Use the looping portion of the animation to calculate the velocity

This commit is contained in:
Chris Robinson 2013-02-19 05:26:58 -08:00
parent 5d55b41714
commit f8349a04bf

View file

@ -284,12 +284,32 @@ void Animation::play(const std::string &groupname, const std::string &start, boo
if(track && track->getNumKeyFrames() > 1) if(track && track->getNumKeyFrames() > 1)
{ {
const Ogre::TransformKeyFrame *startkf, *endkf; float loopstarttime = 0.0f;
startkf = static_cast<const Ogre::TransformKeyFrame*>(track->getKeyFrame(0)); float loopstoptime = mCurrentAnim->getLength();
endkf = static_cast<const Ogre::TransformKeyFrame*>(track->getKeyFrame(track->getNumKeyFrames() - 1)); NifOgre::TextKeyMap::const_iterator keyiter = mCurrentKeys->begin();
while(keyiter != mCurrentKeys->end())
{
if(keyiter->second == "loop start")
loopstarttime = keyiter->first;
else if(keyiter->second == "loop stop")
{
loopstoptime = keyiter->first;
break;
}
keyiter++;
}
mAnimVelocity = startkf->getTranslate().distance(endkf->getTranslate()) / if(loopstoptime > loopstarttime)
mCurrentAnim->getLength(); {
Ogre::TransformKeyFrame startkf(0, loopstarttime);
Ogre::TransformKeyFrame endkf(0, loopstoptime);
track->getInterpolatedKeyFrame(mCurrentAnim->_getTimeIndex(loopstarttime), &startkf);
track->getInterpolatedKeyFrame(mCurrentAnim->_getTimeIndex(loopstoptime), &endkf);
mAnimVelocity = startkf.getTranslate().distance(endkf.getTranslate()) /
(loopstoptime-loopstarttime);
}
} }
} }