diff --git a/apps/openmw/mwmechanics/actors.cpp b/apps/openmw/mwmechanics/actors.cpp index 8c6da4a31..6c69c457b 100644 --- a/apps/openmw/mwmechanics/actors.cpp +++ b/apps/openmw/mwmechanics/actors.cpp @@ -273,7 +273,14 @@ namespace MWMechanics if(dir.length() >= 0.1f) { - if(dir.y < 0.0f) + if(std::abs(dir.x/2.0f) > std::abs(dir.y)) + { + if(dir.x > 0.0f) + newstate = CharState_WalkRight; + else if(dir.x < 0.0f) + newstate = CharState_WalkLeft; + } + else if(dir.y < 0.0f) newstate = CharState_WalkBack; else newstate = CharState_WalkForward; diff --git a/apps/openmw/mwmechanics/character.cpp b/apps/openmw/mwmechanics/character.cpp index 7e52ef3d8..262945c02 100644 --- a/apps/openmw/mwmechanics/character.cpp +++ b/apps/openmw/mwmechanics/character.cpp @@ -41,6 +41,8 @@ static const struct { { CharState_WalkForward, "walkforward", Ogre::Vector3(0.0f, 1.0f, 0.0f) }, { CharState_WalkBack, "walkback", Ogre::Vector3(0.0f, 1.0f, 0.0f) }, + { CharState_WalkLeft, "walkleft", Ogre::Vector3(1.0f, 0.0f, 0.0f) }, + { CharState_WalkRight, "walkright", Ogre::Vector3(1.0f, 0.0f, 0.0f) }, { CharState_Dead, "death1", Ogre::Vector3(1.0f, 1.0f, 0.0f) }, }; diff --git a/apps/openmw/mwmechanics/character.hpp b/apps/openmw/mwmechanics/character.hpp index d773c85b2..6d8b3386c 100644 --- a/apps/openmw/mwmechanics/character.hpp +++ b/apps/openmw/mwmechanics/character.hpp @@ -19,6 +19,8 @@ enum CharacterState { CharState_WalkForward, CharState_WalkBack, + CharState_WalkLeft, + CharState_WalkRight, CharState_Dead };