diff --git a/apps/openmw/mwmechanics/obstacle.cpp b/apps/openmw/mwmechanics/obstacle.cpp index 6268eaddf2..e30a2947fd 100644 --- a/apps/openmw/mwmechanics/obstacle.cpp +++ b/apps/openmw/mwmechanics/obstacle.cpp @@ -120,6 +120,7 @@ namespace MWMechanics mWalkState = WalkState::Norm; mStateDuration = 0; mPrev = position; + mInitialDistance = (destination - position).length(); return; } @@ -129,10 +130,11 @@ namespace MWMechanics const float prevDistance = (destination - mPrev).length(); const float currentDistance = (destination - position).length(); const float movedDistance = prevDistance - currentDistance; + const float movedFromInitialDistance = mInitialDistance - currentDistance; mPrev = position; - if (movedDistance >= distSameSpot) + if (movedDistance >= distSameSpot && movedFromInitialDistance >= distSameSpot) { mWalkState = WalkState::Norm; mStateDuration = 0; @@ -143,6 +145,7 @@ namespace MWMechanics { mWalkState = WalkState::CheckStuck; mStateDuration = duration; + mInitialDistance = (destination - position).length(); return; } diff --git a/apps/openmw/mwmechanics/obstacle.hpp b/apps/openmw/mwmechanics/obstacle.hpp index 8314031ea2..6c2197d811 100644 --- a/apps/openmw/mwmechanics/obstacle.hpp +++ b/apps/openmw/mwmechanics/obstacle.hpp @@ -54,6 +54,7 @@ namespace MWMechanics float mStateDuration; int mEvadeDirectionIndex; + float mInitialDistance = 0; void chooseEvasionDirection(); };