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.
This commit is contained in:
Giuseppe Bilotta 2011-08-10 08:06:30 +02:00
parent 98fa00db12
commit b318e82356
4 changed files with 16 additions and 8 deletions

@ -1935,11 +1935,13 @@ NodeMetadata* Client::getNodeMetadata(v3s16 p)
return m_env.getMap().getNodeMetadata(p); return m_env.getMap().getNodeMetadata(p);
} }
v3f Client::getPlayerPosition() v3f Client::getPlayerPosition(v3f *eye_position)
{ {
//JMutexAutoLock envlock(m_env_mutex); //bulk comment-out //JMutexAutoLock envlock(m_env_mutex); //bulk comment-out
LocalPlayer *player = m_env.getLocalPlayer(); LocalPlayer *player = m_env.getLocalPlayer();
assert(player != NULL); assert(player != NULL);
if (eye_position)
*eye_position = player->getEyePosition();
return player->getPosition(); return player->getPosition();
} }

@ -206,7 +206,9 @@ public:
// Wrapper to Map // Wrapper to Map
NodeMetadata* getNodeMetadata(v3s16 p); 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); void setPlayerControl(PlayerControl &control);

@ -1521,7 +1521,8 @@ void the_game(
} }
// Get player position // Get player position
v3f player_position = client.getPlayerPosition(); v3f camera_position;
v3f player_position = client.getPlayerPosition(&camera_position);
//TimeTaker //timer2("//timer2"); //TimeTaker //timer2("//timer2");
@ -1581,11 +1582,6 @@ void the_game(
v3f camera_direction = v3f(0,0,1); v3f camera_direction = v3f(0,0,1);
camera_direction.rotateYZBy(camera_pitch); camera_direction.rotateYZBy(camera_pitch);
camera_direction.rotateXZBy(camera_yaw); 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); camera->setPosition(camera_position);
// *100.0 helps in large map coordinates // *100.0 helps in large map coordinates

@ -67,6 +67,14 @@ public:
return floatToInt(m_position + v3f(0,BS+BS/2,0), BS); 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) virtual void setPosition(const v3f &position)
{ {
m_position = position; m_position = position;