mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-10-31 20:56:39 +00:00 
			
		
		
		
	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