forked from Mirrorlandia_minetest/minetest
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:
parent
98fa00db12
commit
b318e82356
@ -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");
|
||||||
|
|
||||||
@ -1582,11 +1583,6 @@ void the_game(
|
|||||||
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
|
||||||
camera->setTarget(camera_position + camera_direction * 100.0);
|
camera->setTarget(camera_position + camera_direction * 100.0);
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user