diff options
-rw-r--r-- | src/player.cpp | 12 | ||||
-rw-r--r-- | src/player.h | 8 |
2 files changed, 18 insertions, 2 deletions
diff --git a/src/player.cpp b/src/player.cpp index ff272322f..6e8b8c1d4 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -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) diff --git a/src/player.h b/src/player.h index b6856b1d0..9bbdda15a 100644 --- a/src/player.h +++ b/src/player.h @@ -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; |