last_pitch(0),
last_yaw(0),
last_keyPressed(0),
+ eye_offset_first(v3f(0,0,0)),
+ eye_offset_third(v3f(0,0,0)),
+ last_animation(NO_ANIM),
hotbar_image(""),
hotbar_selected_image(""),
m_sneak_node(32767,32767,32767),
m_old_node_below(32767,32767,32767),
m_old_node_below_type("air"),
m_need_to_get_new_sneak_node(true),
- m_can_jump(false)
+ m_can_jump(false),
+ m_cao(NULL)
{
// Initialize hp to 0, so that no hearts will be shown if server
// doesn't support health points
{
}
-void LocalPlayer::move(f32 dtime, ClientEnvironment *env, f32 pos_max_d,
+void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d,
std::list<CollisionInfo> *collision_info)
{
Map *map = &env->getMap();
If sneaking, keep in range from the last walked node and don't
fall off from it
*/
- if(control.sneak && m_sneak_node_exists && !(fly_allowed && g_settings->getBool("free_move")) && !in_liquid)
+ if(control.sneak && m_sneak_node_exists &&
+ !(fly_allowed && g_settings->getBool("free_move")) && !in_liquid &&
+ physics_override_sneak)
{
f32 maxd = 0.5*BS + sneak_max;
v3f lwn_f = intToFloat(m_sneak_node, BS);
// node.
m_need_to_get_new_sneak_node = true;
}
- if(m_need_to_get_new_sneak_node)
+ if(m_need_to_get_new_sneak_node && physics_override_sneak)
{
v3s16 pos_i_bottom = floatToInt(position - v3f(0,BS/2,0), BS);
v2f player_p2df(position.X, position.Z);
if(nodemgr->get(map->getNode(p)).walkable == false)
continue;
// And the node above it has to be nonwalkable
- if(nodemgr->get(map->getNode(p+v3s16(0,1,0))).walkable == true)
+ if(nodemgr->get(map->getNode(p+v3s16(0,1,0))).walkable == true) {
continue;
+ }
+ if (!physics_override_sneak_glitch) {
+ if (nodemgr->get(map->getNode(p+v3s16(0,2,0))).walkable)
+ continue;
+ }
}
catch(InvalidPositionException &e)
{
m_can_jump = false;
}
-void LocalPlayer::move(f32 dtime, ClientEnvironment *env, f32 pos_max_d)
+void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d)
{
move(dtime, env, pos_max_d, NULL);
}
if(control.jump)
{
if(free_move)
- {
+ {
if(g_settings->getBool("aux1_descends") || g_settings->getBool("always_fly_fast"))
{
if(fast_move)
{
if(m_sneak_node_exists)
return m_sneak_node;
- return floatToInt(getPosition(), BS);
+ return floatToInt(getPosition() - v3f(0, BS, 0), BS);
}