#ifndef _FKP_MOTIONDATA_H_HEADER_
#define _FKP_MOTIONDATA_H_HEADER_

#include <FK/FK.h>

enum fk_MotionInterType {
	LINEAR,
	SPHERE,
	POWER,
	REV_POWER,
	FREEZE,
	HIDE	// <----------------------------------------------------オブジェクトのすげ替え対応のため追加
};

class CKeyFrameMotion {
	friend class CMotionCharactor;

private:
	vector<fk_Quaternion>		qArray;
	vector<int>					frameArray;
	vector<fk_MotionInterType>	interTypeArray;

	vector<fk_Vector>			basePosArray;

	map<int, string>			objSwapEvents;

	vector<string>				motionInfoStrArray;

	fk_Vector		getInterVec(fk_Vector, fk_Vector, double, fk_MotionInterType = LINEAR);
	fk_Quaternion	getInterQ(fk_Quaternion, fk_Quaternion, double, fk_MotionInterType = LINEAR);

public:
	CKeyFrameMotion();
	~CKeyFrameMotion();

	void init(void);

	void pushKeyFrame(fk_Quaternion, int, fk_MotionInterType, int = -1);			// キー追加(子)
	void pushKeyFrame(fk_Quaternion, fk_Vector, int, fk_MotionInterType, int = -1);	// キー追加(親)
	bool changeKeyFrame(int, fk_Quaternion, int, fk_MotionInterType);				// キー修正(子)
	bool changeKeyFrame(int, fk_Quaternion, fk_Vector, int, fk_MotionInterType);	// キー修正(親)
	bool deleteKeyFrame(int);

	bool isBaseMotion(void);					// basePosArray に値がスタックされていたら true を返す

	int getTotalKeyNum(void);					// この関節が持つキーフレーム数を返す(配列のサイズ)
	int getTotalFrameNum(void);					// この関節が持つモーションのトータルフレーム数を返す
	bool getFrameToKeyID(int, int *, int *);	// 与えられたフレームが指すこの関節のキーフレーム ID とその中で何フレーム目かを返す

	void setFrameState(int, fk_Model *);	// 与えられたフレーム数を基に補間モーションを生成する

};

#endif
