From: Giuseppe Bilotta Date: Wed, 10 Aug 2011 06:06:30 +0000 (+0200) Subject: Refactor player's eye position coding X-Git-Url: http://81.2.79.47:8989/gitweb/?a=commitdiff_plain;h=b318e82356c185b54ef4cd404704422ea24fa277;p=zefram%2Fminetest%2Fminetest_engine.git Refactor player's eye position coding Collect the player's eye position coding in a Player method, and use it in client to pass the eye position information to the game. --- diff --git a/src/client.cpp b/src/client.cpp index 02f78e23..30bd1019 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -1935,11 +1935,13 @@ NodeMetadata* Client::getNodeMetadata(v3s16 p) return m_env.getMap().getNodeMetadata(p); } -v3f Client::getPlayerPosition() +v3f Client::getPlayerPosition(v3f *eye_position) { //JMutexAutoLock envlock(m_env_mutex); //bulk comment-out LocalPlayer *player = m_env.getLocalPlayer(); assert(player != NULL); + if (eye_position) + *eye_position = player->getEyePosition(); return player->getPosition(); } diff --git a/src/client.h b/src/client.h index 0150b687..1c71b2c2 100644 --- a/src/client.h +++ b/src/client.h @@ -206,7 +206,9 @@ public: // Wrapper to Map NodeMetadata* getNodeMetadata(v3s16 p); - v3f getPlayerPosition(); + // Get the player position, and optionally put the + // eye position in *eye_position + v3f getPlayerPosition(v3f *eye_position=NULL); void setPlayerControl(PlayerControl &control); diff --git a/src/game.cpp b/src/game.cpp index c4a9aba0..65f160f7 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -1521,7 +1521,8 @@ void the_game( } // Get player position - v3f player_position = client.getPlayerPosition(); + v3f camera_position; + v3f player_position = client.getPlayerPosition(&camera_position); //TimeTaker //timer2("//timer2"); @@ -1581,11 +1582,6 @@ void the_game( v3f camera_direction = v3f(0,0,1); camera_direction.rotateYZBy(camera_pitch); camera_direction.rotateXZBy(camera_yaw); - - // This is at the height of the eyes of the current figure - //v3f camera_position = player_position + v3f(0, BS+BS/2, 0); - // This is more like in minecraft - v3f camera_position = player_position + v3f(0, BS+BS*0.625, 0); camera->setPosition(camera_position); // *100.0 helps in large map coordinates diff --git a/src/player.h b/src/player.h index 00a1d440..45454e9e 100644 --- a/src/player.h +++ b/src/player.h @@ -67,6 +67,14 @@ public: return floatToInt(m_position + v3f(0,BS+BS/2,0), BS); } + v3f getEyePosition() + { + // This is at the height of the eyes of the current figure + // return m_position + v3f(0, BS+BS/2, 0); + // This is more like in minecraft + return m_position + v3f(0,BS+(5*BS)/8,0); + } + virtual void setPosition(const v3f &position) { m_position = position;