forked from teamnwah/openmw-tes3coop
Use the looping portion of the animation to calculate the velocity
This commit is contained in:
parent
5d55b41714
commit
f8349a04bf
1 changed files with 25 additions and 5 deletions
|
@ -284,12 +284,32 @@ void Animation::play(const std::string &groupname, const std::string &start, boo
|
|||
|
||||
if(track && track->getNumKeyFrames() > 1)
|
||||
{
|
||||
const Ogre::TransformKeyFrame *startkf, *endkf;
|
||||
startkf = static_cast<const Ogre::TransformKeyFrame*>(track->getKeyFrame(0));
|
||||
endkf = static_cast<const Ogre::TransformKeyFrame*>(track->getKeyFrame(track->getNumKeyFrames() - 1));
|
||||
float loopstarttime = 0.0f;
|
||||
float loopstoptime = mCurrentAnim->getLength();
|
||||
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()) /
|
||||
mCurrentAnim->getLength();
|
||||
if(loopstoptime > loopstarttime)
|
||||
{
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue