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)
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue