diff --git a/apps/openmw/mwmechanics/character.cpp b/apps/openmw/mwmechanics/character.cpp index 1d56a30fbd..a176c1780a 100644 --- a/apps/openmw/mwmechanics/character.cpp +++ b/apps/openmw/mwmechanics/character.cpp @@ -152,7 +152,7 @@ void CharacterController::refreshCurrentAnims(CharacterState idle, CharacterStat idle = "idleswim"; else if(mIdleState == CharState_IdleSneak && mAnimation->hasAnimation("idlesneak")) idle = "idlesneak"; - else + else if(mIdleState != CharState_None) { idle = "idle"; if(weap != sWeaponTypeListEnd) @@ -165,8 +165,9 @@ void CharacterController::refreshCurrentAnims(CharacterState idle, CharacterStat mAnimation->disable(mCurrentIdle); mCurrentIdle = idle; - mAnimation->play(mCurrentIdle, Priority_Default, MWRender::Animation::Group_All, false, - 1.0f, "start", "stop", 0.0f, ~0ul); + if(!mCurrentIdle.empty()) + mAnimation->play(mCurrentIdle, Priority_Default, MWRender::Animation::Group_All, false, + 1.0f, "start", "stop", 0.0f, ~0ul); } if(force || movement != mMovementState) @@ -229,7 +230,7 @@ void CharacterController::getWeaponGroup(WeaponType weaptype, std::string &group CharacterController::CharacterController(const MWWorld::Ptr &ptr, MWRender::Animation *anim) : mPtr(ptr) , mAnimation(anim) - , mIdleState(CharState_Idle) + , mIdleState(CharState_None) , mMovementState(CharState_None) , mMovementSpeed(0.0f) , mDeathState(CharState_None) @@ -248,7 +249,9 @@ CharacterController::CharacterController(const MWWorld::Ptr &ptr, MWRender::Anim * handle knockout and death which moves the character down. */ mAnimation->setAccumulation(Ogre::Vector3(1.0f, 1.0f, 0.0f)); - if(MWWorld::Class::get(mPtr).getCreatureStats(mPtr).isDead()) + if(!MWWorld::Class::get(mPtr).getCreatureStats(mPtr).isDead()) + mIdleState = CharState_Idle; + else { /* FIXME: Get the actual death state used. */ mDeathState = CharState_Death1; @@ -258,6 +261,8 @@ CharacterController::CharacterController(const MWWorld::Ptr &ptr, MWRender::Anim { /* Don't accumulate with non-actors. */ mAnimation->setAccumulation(Ogre::Vector3(0.0f)); + + mIdleState = CharState_Idle; } refreshCurrentAnims(mIdleState, mMovementState, true);