#ifndef __BONE_ANIMATION_STATE_H__
#define __BONE_ANIMATION_STATE_H__

typedef struct BoneAnimationState BoneAnimationState;

#include "3dmath/Matrix.h"
#include "3dmath/Quaternion.h"
#include "3dmath/Vector.h"

struct BoneAnimationSequence;
struct Skeleton;

#define BoneAnimationState_structContents \
	struct Skeleton * skeleton; \
	Quaternion * boneOrientations; \
	Vector3 * boneOffsets; \
	Matrix * boneMatrices; \
	\
	void (* dispose)(void * self); \
	void * (* createCopy)(void * self); \
	void (* updateBoneMatrices)(void * self);

struct BoneAnimationState {
	BoneAnimationState_structContents
};

BoneAnimationState * BoneAnimationState_create(struct Skeleton * skeleton);
void BoneAnimationState_init(BoneAnimationState * self, struct Skeleton * skeleton);
void BoneAnimationState_initCopy(BoneAnimationState * self, BoneAnimationState * original);

void BoneAnimationState_dispose(void * selfPtr);
void * BoneAnimationState_createCopy(void * selfPtr);
void BoneAnimationState_updateBoneMatrices(void * selfPtr);

#endif
