Improve glass
[oweals/minetest.git] / src / camera.cpp
index 6fc7c16cd81a09513082dbd63db0ce56ca801a2a..74ecd6cecebce53808feea5b02a2f7bac7c1316a 100644 (file)
@@ -27,6 +27,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include <cmath>
 #include <SAnimatedMesh.h>
 #include "settings.h"
+#include "nodedef.h" // For wield visualization
 
 Camera::Camera(scene::ISceneManager* smgr, MapDrawControl& draw_control):
        m_smgr(smgr),
@@ -221,6 +222,7 @@ void Camera::update(LocalPlayer* player, f32 frametime, v2u32 screensize)
                //rel_cam_target += 0.03 * bobvec;
                //rel_cam_up.rotateXYBy(0.02 * bobdir * bobtmp * PI);
                float f = 1.0;
+               f *= g_settings->getFloat("view_bobbing_amount");
                rel_cam_pos += bobvec * f;
                //rel_cam_target += 0.995 * bobvec * f;
                rel_cam_target += bobvec * f;
@@ -341,7 +343,7 @@ void Camera::updateViewingRange(f32 frametime_in)
                        <<std::endl;*/
 
        m_draw_control.wanted_min_range = m_viewing_range_min;
-       m_draw_control.wanted_max_blocks = (1.5*m_draw_control.blocks_would_have_drawn)+1;
+       m_draw_control.wanted_max_blocks = (2.0*m_draw_control.blocks_would_have_drawn)+1;
        if (m_draw_control.wanted_max_blocks < 10)
                m_draw_control.wanted_max_blocks = 10;
 
@@ -363,7 +365,9 @@ void Camera::updateViewingRange(f32 frametime_in)
        //dstream<<"wanted_frametime_change="<<wanted_frametime_change<<std::endl;
 
        // If needed frametime change is small, just return
-       if (fabs(wanted_frametime_change) < m_wanted_frametime*0.4)
+       // This value was 0.4 for many months until 2011-10-18 by c55;
+       // Let's see how this works out.
+       if (fabs(wanted_frametime_change) < m_wanted_frametime*0.33)
        {
                //dstream<<"ignoring small wanted_frametime_change"<<std::endl;
                return;
@@ -445,8 +449,11 @@ void Camera::updateSettings()
        m_wanted_frametime = 1.0 / wanted_fps;
 }
 
-void Camera::wield(const InventoryItem* item)
+void Camera::wield(const InventoryItem* item, IGameDef *gamedef)
 {
+       ITextureSource *tsrc = gamedef->tsrc();
+       INodeDefManager *ndef = gamedef->ndef();
+
        if (item != NULL)
        {
                bool isCube = false;
@@ -457,9 +464,9 @@ void Camera::wield(const InventoryItem* item)
                        // A block-type material
                        MaterialItem* mat_item = (MaterialItem*) item;
                        content_t content = mat_item->getMaterial();
-                       if (content_features(content).solidness || content_features(content).visual_solidness)
+                       if (ndef->get(content).solidness || ndef->get(content).visual_solidness)
                        {
-                               m_wieldnode->setCube(content_features(content).tiles);
+                               m_wieldnode->setCube(ndef->get(content).tiles);
                                m_wieldnode->setScale(v3f(30));
                                isCube = true;
                        }
@@ -468,7 +475,7 @@ void Camera::wield(const InventoryItem* item)
                // If that failed, make an extruded sprite.
                if (!isCube)
                {
-                       m_wieldnode->setSprite(item->getImageRaw());
+                       m_wieldnode->setSprite(item->getImageRaw(tsrc));
                        m_wieldnode->setScale(v3f(40));
                }