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:
parent
7279e015e9
commit
c3ce49798a
1 changed files with 13 additions and 11 deletions
|
@ -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;
|
||||||
|
|
Loading…
Reference in a new issue