// 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 );
};
