// From http://www.ogre3d.org/wiki/index.php/AnimationBlender #include "OgreEntity.h" using namespace Ogre; class AnimationBlender { public: enum BlendingTransition { BlendSwitch, // stop source and start dest BlendWhileAnimating, // cross fade, blend source animation out while blending destination animation in BlendThenAnimate // blend source to first frame of dest, when done, start dest anim }; private: Entity *mEntity; AnimationState *mSource; AnimationState *mTarget; BlendingTransition mTransition; bool loop; ~AnimationBlender() {} public: Real mTimeleft, mDuration; bool complete; void blend( const String &animation, BlendingTransition transition, Real duration, bool loop ); void addTime( Real ); Real getProgress() { return mTimeleft/ mDuration; } AnimationState *getSource() { return mSource; } AnimationState *getTarget() { return mTarget; } AnimationBlender( Entity *); void init( const String &animation ); };