/* ========================================================================== * ÀÛ ¼º ÀÚ : À̹ý¼® * ÀÛ ¼º ÀÏ : 2007.01.18 * ³» ¿ë : NifÆÄÀÏ¿¡ ¼ÓÇÑ ¾Ö´Ï¸ÞÀÌ¼Ç Á¤º¸ * ÁÖÀÇ»çÇ× : *===========================================================================*/ #pragma once class cNifTimeManager { public: enum { TM_SCALE_FACTOR = 0, TM_START_TIME, TM_END_TIME, TM_TIME_MODE, TM_ENABLING }; cNifTimeManager(); float GetFrameTime( float fTime ); float GetRewTime( float fTime ); void SetFrameTime(float fTime); float GetScaleFactor() const; void SetScaleFactor(float fScale); float GetStartTime() const; void SetStartTime(float fStart); float GetEndTime() const; void SetEndTime(float fEnd); bool IsEnabled() const; void Enable(); void Disable(); protected: float m_fAccumTime; float m_fScaleFactor; float m_fStartTime; float m_fEndTime; bool m_bTimingEnabled; float m_fLastTime; }; //--------------------------------------------------------------------------- inline float cNifTimeManager::GetScaleFactor() const { return m_fScaleFactor; } //--------------------------------------------------------------------------- inline void cNifTimeManager::SetScaleFactor(float fScale) { m_fScaleFactor = fScale; } //--------------------------------------------------------------------------- inline float cNifTimeManager::GetStartTime() const { return m_fStartTime; } //--------------------------------------------------------------------------- inline void cNifTimeManager::SetStartTime(float fStart) { m_fStartTime = fStart; } //--------------------------------------------------------------------------- inline float cNifTimeManager::GetEndTime() const { return m_fEndTime; } //--------------------------------------------------------------------------- inline void cNifTimeManager::SetEndTime(float fEnd) { m_fEndTime = fEnd; } //--------------------------------------------------------------------------- inline bool cNifTimeManager::IsEnabled() const { return m_bTimingEnabled; } //--------------------------------------------------------------------------- inline void cNifTimeManager::Enable() { m_bTimingEnabled = true; m_fLastTime = -NI_INFINITY; } //--------------------------------------------------------------------------- inline void cNifTimeManager::Disable() { m_bTimingEnabled = false; } //--------------------------------------------------------------------------- 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 SetCycleType( NiTimeController::CycleType type ); /// ¾Ö´Ï¸ÞÀÌ¼Ç È°¼ºÈ­ void Start( float time, bool begin = false ); /// ¾Ö´Ï¸ÞÀÌ¼Ç ºñȰ¼ºÈ­ void Stop(); /// ·çÇÎ Á¤º¸¿¡ ´ëÇÑ Ã³¸® inline void SetLooping( bool loop ) { mLooping = loop; } inline bool IsLooping() { return mLooping; } inline bool IsEnable() { return mEnable; } /// 󸮺Πunsigned char Update( unsigned long deltaTime, unsigned long accumTime ); unsigned long GetFrameTime(); void SetStopFlag( bool flag ) { mStopFlag = flag; } protected: void Add(NiTimeController* pController); void AddInfo(NiTimeController* pController); void AddInterpInfo(NiInterpController* pController); void FindAndAdd(NiObjectNET* pkRoot); protected: /// Àüü ÄÁÆ®·Ñµé¿¡ ´ëÇÑ Á¤º¸ float mMinTime; float mMaxTime; float mStartTime; unsigned int mKeyframeCount; unsigned int mControllerCount; /// Á¦¾î ÄÁÆ®·ÑµéÀÇ ¸®½ºÆ® NiTPointerList mControllerList; /// Á¦¾î ÄÁÆ®·Ñµé¿¡ ´ëÇÑ ¹Ýº¹ ¿©ºÎ bool mLooping; /// Àüü ÄÁÆ®·Ñ·¯ÀÇ È°¼ºÈ­ ¿©ºÎ bool mEnable; bool mStopFlag; };