DragonNest/Common/EngineUtil/FrameSync.h
Cussrro 47f7895977 Revert "修复编码问题"
This reverts commit 9e69c01767.
2024-12-21 10:04:04 +08:00

92 lines
No EOL
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() { }
//! 초기화 하는 함수..
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;
};