Simple fix for camera blinking black when jumping into ceiling with current smaller...
authorPerttu Ahola <celeron55@gmail.com>
Thu, 29 Mar 2012 18:21:34 +0000 (21:21 +0300)
committerPerttu Ahola <celeron55@gmail.com>
Thu, 29 Mar 2012 18:21:34 +0000 (21:21 +0300)
src/player.cpp
src/player.h

index ff272322f9a2d9349218304b8bbc04443ec597c7..6e8b8c1d44a5a865ce5031e8e847cad9c7697f5a 100644 (file)
@@ -40,6 +40,7 @@ Player::Player(IGameDef *gamedef):
        in_water_stable(false),
        is_climbing(false),
        swimming_up(false),
+       camera_barely_in_ceiling(false),
        inventory(gamedef->idef()),
        hp(PLAYER_MAX_HP),
        peer_id(PEER_ID_INEXISTENT),
@@ -604,6 +605,17 @@ void LocalPlayer::move(f32 dtime, Map &map, f32 pos_max_d,
                MtEvent *e = new SimpleTriggerEvent("PlayerRegainGround");
                m_gamedef->event()->put(e);
        }
+
+       {
+               camera_barely_in_ceiling = false;
+               v3s16 camera_np = floatToInt(getEyePosition(), BS);
+               MapNode n = map.getNodeNoEx(camera_np);
+               if(n.getContent() != CONTENT_IGNORE){
+                       if(nodemgr->get(n).walkable){
+                               camera_barely_in_ceiling = true;
+                       }
+               }
+       }
 }
 
 void LocalPlayer::move(f32 dtime, Map &map, f32 pos_max_d)
index b6856b1d0015963175083a59c14806ad542f5026..9bbdda15a90c0f1d5e6aac20974f10d5c6a57dcb 100644 (file)
@@ -66,9 +66,12 @@ public:
        v3f getEyeOffset()
        {
                // This is at the height of the eyes of the current figure
-               // return v3f(0, BS+BS/2, 0);
+               // return v3f(0, BS*1.5, 0);
                // This is more like in minecraft
-               return v3f(0,BS+(5*BS)/8,0);
+               if(camera_barely_in_ceiling)
+                       return v3f(0,BS*1.5,0);
+               else
+                       return v3f(0,BS*1.625,0);
        }
 
        v3f getEyePosition()
@@ -143,6 +146,7 @@ public:
        bool in_water_stable;
        bool is_climbing;
        bool swimming_up;
+       bool camera_barely_in_ceiling;
        
        u8 light;