/* ==========================================================================
* 작 성 자 : 이법석
* 작 성 일 : 2007.01.18
* 내    용 : Nif파일에 속한 애니메이션 정보
* 주의사항 : 
*===========================================================================*/
#pragma once


class cNifAnimationInfo
{
public:
	cNifAnimationInfo();
	~cNifAnimationInfo();

	enum
	{
		eEvent_None = 0,
		eEvent_Ing,
		eEvent_End,
	};

	/// 애니 정보에 대한 데이터 수집용 인터페이스
	void CollectData( NiNode* pRoot );

	/// 컨트롤러의 총 수
	inline unsigned int GetNumberOfControllers() { return mControllerCount; }
	/// 전체 컨트롤러의 키프레임 총 수
	inline unsigned int GetNumberOfKeyframes() { return mKeyframeCount; }
	/// 전체 컨트롤러들의 시작시간중 최소시간
	inline float GetMinTime() { return (mMinTime == FLT_MAX)? 0.0f:mMinTime; }
	/// 전체 컨트롤러들의 종료시간중 최대시간
	inline float GetMaxTime() { return mMaxTime; }

	/// 컨트롤러들의 속성 변경
	void SetAnimType( NiTimeController::AnimType type);

	/// 애니메이션 활성화
	void Start( float time );

	/// 애니메이션 비활성화
	void Stop();

	/// 루핑 정보에 대한 처리
	inline void SetLooping( bool loop ) { mLooping = loop; }

	/// 처리부
	unsigned char Update( float time );

protected:
	void Add(NiTimeController* pController);

	void AddInfo(NiTimeController* pController);
	void AddInterpInfo(NiInterpController* pController);
	void AddUVInfo(NiUVController* pController);

	void FindAndAdd(NiObjectNET* pkRoot);

protected:
	/// 전체 컨트롤들에 대한 정보
	float mMinTime;
	float mMaxTime;
	float mStartTime;
	unsigned int mKeyframeCount;
	unsigned int mControllerCount;

	/// 제어 컨트롤들의 리스트
	NiTPointerList<NiTimeController*> mControllerList;

	/// 제어 컨트롤들에 대한 반복 여부
	bool mLooping;

	/// 전체 컨트롤러의 활성화 여부
	bool mEnable;

	/// 유지 시간을 넣자!
};
