#ifndef __BONE_ANIMATION_STATE_CONTROLLER_H__
#define __BONE_ANIMATION_STATE_CONTROLLER_H__

typedef struct BoneAnimationStateController BoneAnimationStateController;

#include "utilities/Atom.h"

struct BoneAnimationSequence;
struct BoneAnimationState;

#define BoneAnimationController_structContents \
	struct BoneAnimationState * animationState; \
	struct BoneAnimationList * animationList; \
	Atom sequenceName; \
	float sequencePlaybackTime; \
	struct BoneAnimationState * lastAnimationState; \
	float sequenceTransitionDuration; \
	\
	void (* dispose)(void * self); \
	void (* update)(void * self, double timestep); \
	void (* setSequence)(void * self, Atom sequenceName);

struct BoneAnimationStateController {
	BoneAnimationController_structContents
};

BoneAnimationStateController * BoneAnimationStateController_create(struct BoneAnimationState * animationState, struct BoneAnimationList * animationList);
void BoneAnimationStateController_init(BoneAnimationStateController * self, struct BoneAnimationState * animationState, struct BoneAnimationList * animationList);

void BoneAnimationStateController_dispose(void * selfPtr);
void BoneAnimationStateController_update(void * selfPtr, double timestep);
void BoneAnimationStateController_setSequence(void * selfPtr, Atom sequenceName);

#endif
