Fix footsteps for players whose collision box min y != 0 (#12110)

This commit is contained in:
Gregor Parzefall 2022-03-14 21:01:18 +01:00 committed by sfan5
parent 6e6cdc834f
commit b4f0e834bf

@ -672,19 +672,21 @@ v3s16 LocalPlayer::getStandingNodePos()
v3s16 LocalPlayer::getFootstepNodePos() v3s16 LocalPlayer::getFootstepNodePos()
{ {
v3f feet_pos = getPosition() + v3f(0.0f, m_collisionbox.MinEdge.Y, 0.0f);
// Emit swimming sound if the player is in liquid // Emit swimming sound if the player is in liquid
if (in_liquid_stable) if (in_liquid_stable)
return floatToInt(getPosition(), BS); return floatToInt(feet_pos, BS);
// BS * 0.05 below the player's feet ensures a 1/16th height // BS * 0.05 below the player's feet ensures a 1/16th height
// nodebox is detected instead of the node below it. // nodebox is detected instead of the node below it.
if (touching_ground) if (touching_ground)
return floatToInt(getPosition() - v3f(0.0f, BS * 0.05f, 0.0f), BS); return floatToInt(feet_pos - v3f(0.0f, BS * 0.05f, 0.0f), BS);
// A larger distance below is necessary for a footstep sound // A larger distance below is necessary for a footstep sound
// when landing after a jump or fall. BS * 0.5 ensures water // when landing after a jump or fall. BS * 0.5 ensures water
// sounds when swimming in 1 node deep water. // sounds when swimming in 1 node deep water.
return floatToInt(getPosition() - v3f(0.0f, BS * 0.5f, 0.0f), BS); return floatToInt(feet_pos - v3f(0.0f, BS * 0.5f, 0.0f), BS);
} }
v3s16 LocalPlayer::getLightPosition() const v3s16 LocalPlayer::getLightPosition() const