/* _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

	FILE	: animeCalc.h

+ ------ Explanation of file --------------------------------------------------------------------------

	アニメーションの各種数値の計算
	内部で自動計算するので計算後数値を直接使用すればい
	指定は「n秒でpos,deg,sclに移動」となる
	初期要素は座標セットと捉えるので0秒で移動にするべし

+ _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ */

#pragma once

enum ANIMESTATE
{
	ANIMESTATE_NON,		// 無
	ANIMESTATE_RUN,		// 実行
	ANIMESTATE_STOP,	// 停止
	ANIMESTATE_END,		// 終了

	ANIMESTATE_MAX
};

struct ANIMECALC
{
	int		id;			// 番号
	float	time;		// 時間
	VEC3	pos;		// 座標
	VEC3	degree;		// 角度
	float	scale;		// 拡縮率
};
typedef vector<ANIMECALC>			vecAnmCalc;
typedef vector<ANIMECALC>::iterator	iteAnmCalc;

class animeCalcClass
{
	private:
		int			m_state;		// アニメ状態
		int			m_animeID;		// 再生中ID
		float		m_startTime;	// 開始時間
		float		m_elapsedTime;	// 経過時間
		float		m_delayTime;	// 遅延時間
		bool		m_isLoop;		// ループ設定
		vecAnmCalc	m_animeList;	// アニメデータリスト

	private:
		ANIMECALC	calc(void);		// 計算

	public:
		void	set(int id, float time, VEC3 pos, VEC3 deg, float scale);	// データセット
		void	clear(void);		// 初期化
		void	start(void);		// 開始
		void	resume(void);		// 再開
		void	stop(void);			// 停止
		void	skip(void);			// スキップ

		void	setDelay(float delay){ m_delayTime = delay; }
		void	setLoop(bool loop){ m_isLoop = loop; }

		VEC3	getPos(void);		// 座標取得
		VEC3	getDegree(void);	// 角度取得
		float	getScale(void);		// 拡縮率取得
		float	getSumTime(void);	// 合計時間取得

		bool	isRun(void);		// 実行判定
		bool	isEnd(void);		// 終了判定
};

