1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-02-01 10:15:38 +00:00

Fix animation velocity calculation

This commit is contained in:
Chris Robinson 2013-04-22 21:34:39 -07:00
parent 7279e015e9
commit c3ce49798a

View file

@ -228,29 +228,31 @@ void Animation::updatePtr(const MWWorld::Ptr &ptr)
float Animation::calcAnimVelocity(const NifOgre::TextKeyMap &keys, NifOgre::NodeTargetValue<Ogre::Real> *nonaccumctrl, const std::string &groupname) float Animation::calcAnimVelocity(const NifOgre::TextKeyMap &keys, NifOgre::NodeTargetValue<Ogre::Real> *nonaccumctrl, const std::string &groupname)
{ {
const std::string start = groupname+": start";
const std::string loopstart = groupname+": loop start"; const std::string loopstart = groupname+": loop start";
const std::string loopstop = groupname+": loop stop"; const std::string loopstop = groupname+": loop stop";
float loopstarttime = 0.0f; const std::string stop = groupname+": stop";
float loopstoptime = 0.0f; float starttime = std::numeric_limits<float>::max();
NifOgre::TextKeyMap::const_iterator keyiter = keys.begin(); float stoptime = 0.0f;
NifOgre::TextKeyMap::const_iterator keyiter(keys.begin());
while(keyiter != keys.end()) while(keyiter != keys.end())
{ {
if(keyiter->second == loopstart) if(keyiter->second == start || keyiter->second == loopstart)
loopstarttime = keyiter->first; starttime = keyiter->first;
else if(keyiter->second == loopstop) else if(keyiter->second == loopstop || keyiter->second == stop)
{ {
loopstoptime = keyiter->first; stoptime = keyiter->first;
break; break;
} }
keyiter++; keyiter++;
} }
if(loopstoptime > loopstarttime) if(stoptime > starttime)
{ {
Ogre::Vector3 startpos = nonaccumctrl->getTranslation(loopstarttime); Ogre::Vector3 startpos = nonaccumctrl->getTranslation(starttime);
Ogre::Vector3 endpos = nonaccumctrl->getTranslation(loopstarttime); Ogre::Vector3 endpos = nonaccumctrl->getTranslation(stoptime);
return startpos.distance(endpos) / (loopstoptime-loopstarttime); return startpos.distance(endpos) / (stoptime-starttime);
} }
return 0.0f; return 0.0f;