diff --git a/src/localplayer.cpp b/src/localplayer.cpp index 8613ed7d6..66219a4ee 100644 --- a/src/localplayer.cpp +++ b/src/localplayer.cpp @@ -829,7 +829,7 @@ void LocalPlayer::old_move(f32 dtime, Environment *env, f32 pos_max_d, std::vector *collision_info) { Map *map = &env->getMap(); - INodeDefManager *nodemgr = m_client->ndef(); + NodeDefManager *nodemgr = m_client->ndef(); v3f position = getPosition(); @@ -1127,49 +1127,20 @@ void LocalPlayer::old_move(f32 dtime, Environment *env, f32 pos_max_d, float LocalPlayer::getSlipFactor(Environment *env, const v3f &speedH) { - - if (!touching_ground) - return 1.0f; - - float slip_factor = 1.0f; // Slip on slippery nodes const INodeDefManager *nodemgr = env->getGameDef()->ndef(); Map *map = &env->getMap(); const ContentFeatures &f = nodemgr->get(map->getNodeNoEx( - floatToInt(getPosition() - v3f(0, 0.05f * BS, 0), BS))); + getStandingNodePos())); int slippery = 0; - if (f.walkable) { + if (f.walkable) slippery = itemgroup_get(f.groups, "slippery"); - } else if (is_slipping) { - // slipping over an edge? Check surroundings for slippery nodes - slippery = 2 << 16; // guard value, bigger than all realistic ones - for (int z = 0; z <= 1; z++) { - for (int x = 0; x <= 1; x++) { - // this should cover all nodes surrounding player position - v3f offset((x - 0.5f) * BS, 0.05f * BS, (z - 0.5f) * BS); - const ContentFeatures &f2 = nodemgr->get(map->getNodeNoEx( - floatToInt(getPosition() - offset, BS))); - if (f2.walkable) { - // find least slippery node we might be standing on - int s = itemgroup_get(f2.groups, "slippery"); - if (s < slippery) - slippery = s; - } - } - } - // without any hits, ignore slippery - if (slippery >= (2 << 16)) - slippery = 0; - } + if (slippery >= 1) { if (speedH == v3f(0.0f)) { slippery = slippery * 2; } - slip_factor = core::clamp(1.0f / (slippery + 1), 0.001f, 1.0f); - is_slipping = true; - } else { - // remember this to avoid checking the edge case above too often - is_slipping = false; + return core::clamp(1.0f / (slippery + 1), 0.001f, 1.0f); } - return slip_factor; + return 1.0f; } diff --git a/src/localplayer.h b/src/localplayer.h index 188a76788..8c5b619ff 100644 --- a/src/localplayer.h +++ b/src/localplayer.h @@ -62,7 +62,6 @@ public: bool is_climbing = false; bool swimming_vertical = false; bool swimming_pitch = false; - bool is_slipping = false; float physics_override_speed = 1.0f; float physics_override_jump = 1.0f;