92 lines
1.6 KiB
C
92 lines
1.6 KiB
C
|
|
#pragma once
|
|||
|
|
|
|||
|
|
#include "Timer.h"
|
|||
|
|
|
|||
|
|
class CFrameSync:public TBoostMemoryPool<CFrameSync>
|
|||
|
|
{
|
|||
|
|
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() { }
|
|||
|
|
|
|||
|
|
//! <20>ʱ<EFBFBD>ȭ <20>ϴ<EFBFBD> <20>Լ<EFBFBD>..
|
|||
|
|
void Clear()
|
|||
|
|
{
|
|||
|
|
SetFramePerSec( 60.0f );
|
|||
|
|
m_fTimer = 0.0f;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//! <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
|||
|
|
void SetFramePerSec( float fFps )
|
|||
|
|
{
|
|||
|
|
m_fSecPerFrame = 1.0f/fFps;
|
|||
|
|
m_fTimer = 0.0f;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*! Update(float dt) <20>Լ<EFBFBD><D4BC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF><EFBFBD> ȣ<><C8A3><EFBFBD>ɶ<EFBFBD>,
|
|||
|
|
<EFBFBD><EFBFBD> <EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ŭ<EFBFBD><EFBFBD> true<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>. */
|
|||
|
|
bool Update( float fDt )
|
|||
|
|
{
|
|||
|
|
m_fTimer += fDt;
|
|||
|
|
if( m_fTimer < 0 )
|
|||
|
|
return false;
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD> <20>ش<EFBFBD><D8B4>ϴ<EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
|||
|
|
m_fTimer -= m_fSecPerFrame;
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//! <09><><EFBFBD>쿡 <20><><EFBFBD><EFBFBD> <20><>ŵ <20>Ǿ<EFBFBD> <20>ȴٸ<C8B4> false <20><> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
|||
|
|
bool IsFrameSkip() { return (m_fTimer >= 0); }
|
|||
|
|
|
|||
|
|
protected:
|
|||
|
|
float m_fTimer;
|
|||
|
|
float m_fSecPerFrame;
|
|||
|
|
};
|