From 92d0c55f32bf9e2ee8d6a850bdd4b2d4e4fff82c Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Tue, 29 Jan 2013 00:43:42 -0800 Subject: [PATCH] Add a flag to specify if an animation should be playing --- apps/openmw/mwrender/animation.cpp | 13 ++++++++++--- apps/openmw/mwrender/animation.hpp | 1 + 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/apps/openmw/mwrender/animation.cpp b/apps/openmw/mwrender/animation.cpp index c4439841f..b0f21da84 100644 --- a/apps/openmw/mwrender/animation.cpp +++ b/apps/openmw/mwrender/animation.cpp @@ -26,6 +26,7 @@ Animation::Animation(const MWWorld::Ptr &ptr) , mLastPosition(0.0f) , mCurrentKeys(NULL) , mAnimState(NULL) + , mPlaying(false) , mLooping(false) , mAnimSpeedMult(1.0f) { @@ -187,6 +188,7 @@ void Animation::play(const std::string &groupname, const std::string &start, boo mCurrentKeys = &mTextKeys[groupname]; mLooping = loop; reset(start); + mPlaying = true; } catch(std::exception &e) { std::cerr<< e.what() < 0.0f) + while(mAnimState && mPlaying && timepassed > 0.0f) { float targetTime = mAnimState->getTimePosition() + timepassed; if(mNextKey == mCurrentKeys->end() || mNextKey->first > targetTime) { movement += updatePosition(targetTime); + mPlaying = (targetTime < mAnimState->getLength() || mLooping); break; } @@ -236,8 +239,12 @@ Ogre::Vector3 Animation::runAnimation(float timepassed) if(mAnimState->getTimePosition() >= time) break; } - else if(mController) - mController->markerEvent(time, evt); + else + { + mPlaying = false; + if(mController) + mController->markerEvent(time, evt); + } continue; } if(mController) diff --git a/apps/openmw/mwrender/animation.hpp b/apps/openmw/mwrender/animation.hpp index ed9c6eb19..091c2f227 100644 --- a/apps/openmw/mwrender/animation.hpp +++ b/apps/openmw/mwrender/animation.hpp @@ -31,6 +31,7 @@ protected: NifOgre::TextKeyMap *mCurrentKeys; NifOgre::TextKeyMap::const_iterator mNextKey; Ogre::AnimationState *mAnimState; + bool mPlaying; bool mLooping; float mAnimSpeedMult;