#pragma once #include "Timer.h" class CFrameSync:public TBoostMemoryPool { public: CFrameSync(); ~CFrameSync(); void Begin( int nSecureFrame ); void End(); void Pause(); void Resume(); void Reset(); void UpdateTime( int nDebugSecureCount = 0 ); bool CheckSync(); void CheckSecureFrameLoad( int nIgnoreFrame ); LOCAL_TIME GetMSTime(); float GetFps(); void SetTimeSpeed( float fSpeed, DWORD dwDelay = 0 ); protected: LOCAL_TIME m_SystemTime; LOCAL_TIME m_NextSyncTime; LOCAL_TIME m_PrevUpdateTime; /* LARGE_INTEGER m_qpFreq; LARGE_INTEGER m_qpBaseTime; LARGE_INTEGER m_qpTime; LARGE_INTEGER m_qpPrevTime; */ int m_nSecureFrame; LOCAL_TIME m_SecureCount; LOCAL_TIME m_PrevSecureCount; bool m_bActivate; bool m_bPause; float m_fFPS; float m_fTimeSpeed; LOCAL_TIME m_LastModifySpeedTime; LOCAL_TIME m_RevisionModifyTime; DWORD m_dwModifySpeedDelay; DWORD m_dwPovitTime; }; class CFrameSkip { public: CFrameSkip() { Clear(); } virtual ~CFrameSkip() { } //! ÃʱâÈ­ ÇÏ´Â ÇÔ¼ö.. void Clear() { SetFramePerSec( 60.0f ); m_fTimer = 0.0f; } //! ÇÁ·¹ÀÓÀ²À» ¼³Á¤ÇÑ´Ù. void SetFramePerSec( float fFps ) { m_fSecPerFrame = 1.0f/fFps; m_fTimer = 0.0f; } /*! Update(float dt) ÇÔ¼ö°¡ ·çÇÁ¾È¿¡¼­ È£ÃâµÉ¶§, ÀÌ ÇÔ¼ö´Â ¼³Á¤µÈ °íÁ¤ ÇÁ·¹ÀÓÀ² ¸¸Å­¸¸ true¸¦ ¸®ÅÏÇÑ´Ù. */ bool Update( float fDt ) { m_fTimer += fDt; if( m_fTimer < 0 ) return false; // ÇÑÇÁ·¹ÀÓ¿¡ ÇØ´çÇÏ´Â ½Ã°£À» »«´Ù. m_fTimer -= m_fSecPerFrame; return true; } //! °æ¿ì¿¡ µû¶ó ½ºÅµ µÇ¾ß µÈ´Ù¸é false ¸¦ ¸®ÅÏÇÑ´Ù. bool IsFrameSkip() { return (m_fTimer >= 0); } protected: float m_fTimer; float m_fSecPerFrame; };