X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Flocalplayer.cpp;h=1a238cb4787789c0f45d25cecf5abd015765517d;hb=8852333eb3042580592ade478e5def20f8ed5d4c;hp=13117d8811b54830ac5856c9fd63d867ba8ce9d6;hpb=97cddd1b960e3b60ce74ff9ad16307b39676144e;p=oweals%2Fminetest.git diff --git a/src/localplayer.cpp b/src/localplayer.cpp index 13117d881..1a238cb47 100644 --- a/src/localplayer.cpp +++ b/src/localplayer.cpp @@ -43,12 +43,18 @@ LocalPlayer::LocalPlayer(IGameDef *gamedef): 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_sneak_node_exists(false), 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 @@ -59,7 +65,7 @@ LocalPlayer::~LocalPlayer() { } -void LocalPlayer::move(f32 dtime, ClientEnvironment *env, f32 pos_max_d, +void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d, std::list *collision_info) { Map *map = &env->getMap(); @@ -73,6 +79,7 @@ void LocalPlayer::move(f32 dtime, ClientEnvironment *env, f32 pos_max_d, if(isAttached) { setPosition(overridePosition); + m_sneak_node_exists = false; return; } @@ -85,6 +92,7 @@ void LocalPlayer::move(f32 dtime, ClientEnvironment *env, f32 pos_max_d, { position += m_speed * dtime; setPosition(position); + m_sneak_node_exists = false; return; } @@ -161,7 +169,9 @@ void LocalPlayer::move(f32 dtime, ClientEnvironment *env, f32 pos_max_d, 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); @@ -221,7 +231,7 @@ void LocalPlayer::move(f32 dtime, ClientEnvironment *env, f32 pos_max_d, // 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); @@ -258,8 +268,13 @@ void LocalPlayer::move(f32 dtime, ClientEnvironment *env, f32 pos_max_d, 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) { @@ -346,7 +361,7 @@ void LocalPlayer::move(f32 dtime, ClientEnvironment *env, f32 pos_max_d, 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); } @@ -490,7 +505,7 @@ void LocalPlayer::applyControl(float dtime) if(control.jump) { if(free_move) - { + { if(g_settings->getBool("aux1_descends") || g_settings->getBool("always_fly_fast")) { if(fast_move) @@ -572,6 +587,6 @@ v3s16 LocalPlayer::getStandingNodePos() { if(m_sneak_node_exists) return m_sneak_node; - return floatToInt(getPosition(), BS); + return floatToInt(getPosition() - v3f(0, BS, 0), BS); }