From 56eede2610afd7145bc885cfcc2092309e056dcc Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Fri, 10 May 2013 19:31:33 -0700 Subject: [PATCH] Search more aggressively for an animation velocity --- apps/openmw/mwrender/animation.cpp | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwrender/animation.cpp b/apps/openmw/mwrender/animation.cpp index bd248438b..1cb67d78b 100644 --- a/apps/openmw/mwrender/animation.cpp +++ b/apps/openmw/mwrender/animation.cpp @@ -546,8 +546,9 @@ bool Animation::resetActiveGroups() bool ismoving = false; - const NifOgre::TextKeyMap &keys = state->second.mSource->mTextKeys; - std::vector >&ctrls = state->second.mSource->mControllers[0]; + const AnimSource *animsrc = state->second.mSource; + const NifOgre::TextKeyMap &keys = animsrc->mTextKeys; + const std::vector >&ctrls = animsrc->mControllers[0]; for(size_t i = 0;i < ctrls.size();i++) { NifOgre::NodeTargetValue *dstval; @@ -562,6 +563,23 @@ bool Animation::resetActiveGroups() } } + // If there's no velocity, keep looking + while(!(mAnimVelocity > 1.0f) && animsrc-- != &mAnimSources[0]) + { + const NifOgre::TextKeyMap &keys = animsrc->mTextKeys; + const std::vector >&ctrls = animsrc->mControllers[0]; + for(size_t i = 0;i < ctrls.size();i++) + { + NifOgre::NodeTargetValue *dstval; + dstval = static_cast*>(ctrls[i].getDestination().getPointer()); + if(dstval->getNode() == mNonAccumRoot) + { + mAnimVelocity = calcAnimVelocity(keys, dstval, mAccumulate, state->first); + break; + } + } + } + return ismoving; }