From 96e3933ee9cdfbd17492ed2f2559b22e02b26909 Mon Sep 17 00:00:00 2001 From: dteviot Date: Sun, 6 Sep 2015 17:39:48 +1200 Subject: [PATCH] Fixed bug in smoothTurn() Now correctly handles changing direction from 178 to -178 degrees. --- apps/openmw/mwmechanics/steering.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/apps/openmw/mwmechanics/steering.cpp b/apps/openmw/mwmechanics/steering.cpp index 219a23655..1ef46e1ae 100644 --- a/apps/openmw/mwmechanics/steering.cpp +++ b/apps/openmw/mwmechanics/steering.cpp @@ -14,14 +14,16 @@ bool smoothTurn(const MWWorld::Ptr& actor, float targetAngleRadians, int axis, f { float currentAngle (actor.getRefData().getPosition().rot[axis]); float diff (targetAngleRadians - currentAngle); - if (diff >= osg::DegreesToRadians(180.f)) + if (std::abs(diff) >= osg::DegreesToRadians(180.f)) { - // Turning the other way would be a better idea - diff = diff-osg::DegreesToRadians(360.f); - } - else if (diff <= osg::DegreesToRadians(-180.f)) - { - diff = osg::DegreesToRadians(360.f)-diff; + if (diff >= 0) + { + diff = diff - osg::DegreesToRadians(360.f); + } + else + { + diff = osg::DegreesToRadians(360.f) + diff; + } } float absDiff = std::abs(diff);