#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;
	vector<fk_Vector>			scaleArray;

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

public:
	CKeyFrameMotion();
	~CKeyFrameMotion();

	void init(void);

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

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

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

	int setFrameState(int, fk_Model *);	// 与えられたフレーム数を基に補間モーションを生成する、返値はこの関節の表示ON/OFF

};

#endif
