diff options
author | Giuseppe Bilotta <giuseppe.bilotta@gmail.com> | 2011-08-10 08:06:30 +0200 |
---|---|---|
committer | Giuseppe Bilotta <giuseppe.bilotta@gmail.com> | 2011-08-11 15:22:35 +0200 |
commit | b318e82356c185b54ef4cd404704422ea24fa277 (patch) | |
tree | 08ef9ba8115ebb97ffebbb035b75e3c3feb42a04 | |
parent | 98fa00db12b4658f6bce61f0a2c03c69b963f8f2 (diff) | |
download | minetest-b318e82356c185b54ef4cd404704422ea24fa277.tar.gz minetest-b318e82356c185b54ef4cd404704422ea24fa277.tar.bz2 minetest-b318e82356c185b54ef4cd404704422ea24fa277.zip |
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.
-rw-r--r-- | src/client.cpp | 4 | ||||
-rw-r--r-- | src/client.h | 4 | ||||
-rw-r--r-- | src/game.cpp | 8 | ||||
-rw-r--r-- | src/player.h | 8 |
4 files changed, 16 insertions, 8 deletions
diff --git a/src/client.cpp b/src/client.cpp index 02f78e233..30bd10198 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 0150b687e..1c71b2c2c 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 c4a9aba00..65f160f7b 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 00a1d4408..45454e9e1 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; |