From 46fc61a4c19877a883f44d161fd95c31fc023015 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Wed, 16 Jan 2013 16:31:09 -0800 Subject: [PATCH] Run animations from the character controller --- apps/openmw/mwmechanics/actors.cpp | 1 + apps/openmw/mwmechanics/character.cpp | 15 ++++++++++++--- apps/openmw/mwmechanics/character.hpp | 2 ++ apps/openmw/mwrender/actors.cpp | 3 +-- apps/openmw/mwrender/player.cpp | 3 --- 5 files changed, 16 insertions(+), 8 deletions(-) diff --git a/apps/openmw/mwmechanics/actors.cpp b/apps/openmw/mwmechanics/actors.cpp index 23272e674..7205e7d54 100644 --- a/apps/openmw/mwmechanics/actors.cpp +++ b/apps/openmw/mwmechanics/actors.cpp @@ -263,6 +263,7 @@ namespace MWMechanics std::vector > movement; for(PtrControllerMap::iterator iter(mActors.begin());iter != mActors.end();++iter) { + iter->second.update(duration); Ogre::Vector3 vector = MWWorld::Class::get(iter->first).getMovementVector(iter->first); if(vector!=Ogre::Vector3::ZERO) movement.push_back(std::make_pair(iter->first.getRefData().getHandle(), vector)); diff --git a/apps/openmw/mwmechanics/character.cpp b/apps/openmw/mwmechanics/character.cpp index 6acd9a7cf..87ed8a9e6 100644 --- a/apps/openmw/mwmechanics/character.cpp +++ b/apps/openmw/mwmechanics/character.cpp @@ -32,7 +32,9 @@ namespace MWMechanics CharacterController::CharacterController(const MWWorld::Ptr &ptr, MWRender::Animation *anim, CharacterState state) : mPtr(ptr), mAnimation(anim), mState(state) { - if(!mAnimation || mAnimation->getAnimationCount() == 0) + if(mAnimation && mAnimation->getAnimationCount() == 0) + mAnimation = NULL; + if(!mAnimation) return; mAnimation->setController(this); @@ -50,7 +52,7 @@ CharacterController::CharacterController(const MWWorld::Ptr &ptr, MWRender::Anim CharacterController::CharacterController(const CharacterController &rhs) : mPtr(rhs.mPtr), mAnimation(rhs.mAnimation), mState(rhs.mState) { - if(!mAnimation || mAnimation->getAnimationCount() == 0) + if(!mAnimation) return; /* We've been copied. Update the animation with the new controller. */ mAnimation->setController(this); @@ -67,11 +69,18 @@ void CharacterController::markerEvent(const std::string &evt) } +void CharacterController::update(float duration) +{ + if(mAnimation) + mAnimation->runAnimation(duration); +} + + void CharacterController::setState(CharacterState state) { mState = state; - if(!mAnimation || mAnimation->getAnimationCount() == 0) + if(!mAnimation) return; switch(mState) { diff --git a/apps/openmw/mwmechanics/character.hpp b/apps/openmw/mwmechanics/character.hpp index c09cb8e42..3a59ae4bb 100644 --- a/apps/openmw/mwmechanics/character.hpp +++ b/apps/openmw/mwmechanics/character.hpp @@ -33,6 +33,8 @@ public: CharacterController(const MWWorld::Ptr &ptr, MWRender::Animation *anim, CharacterState state); CharacterController(const CharacterController &rhs); + void update(float duration); + void setState(CharacterState state); CharacterState getState() const { return mState; } diff --git a/apps/openmw/mwrender/actors.cpp b/apps/openmw/mwrender/actors.cpp index d62e16fa2..91395277b 100644 --- a/apps/openmw/mwrender/actors.cpp +++ b/apps/openmw/mwrender/actors.cpp @@ -149,8 +149,7 @@ void Actors::skipAnimation (const MWWorld::Ptr& ptr) } void Actors::update (float duration) { - for(PtrAnimationMap::const_iterator iter = mAllActors.begin();iter != mAllActors.end();iter++) - iter->second->runAnimation(duration); + // Nothing to do } Animation* Actors::getAnimation(const MWWorld::Ptr &ptr) diff --git a/apps/openmw/mwrender/player.cpp b/apps/openmw/mwrender/player.cpp index 0e4c76b0e..8f3e13039 100644 --- a/apps/openmw/mwrender/player.cpp +++ b/apps/openmw/mwrender/player.cpp @@ -129,9 +129,6 @@ namespace MWRender MWBase::Environment::get().getWindowManager ()->showCrosshair (!MWBase::Environment::get().getWindowManager ()->isGuiMode () && (mFirstPersonView && !mVanity.enabled && !mPreviewMode)); - if (mAnimation) { - mAnimation->runAnimation(duration); - } mPlayerNode->setVisible( mVanity.enabled || mPreviewMode || !mFirstPersonView, false