forked from metin2/client
Solution refactoring and restructuring, removed Boost dependency, removed unused tools
This commit is contained in:
156
src/EterBase/Timer.cpp
Normal file
156
src/EterBase/Timer.cpp
Normal file
@ -0,0 +1,156 @@
|
||||
#include "StdAfx.h"
|
||||
#include "Timer.h"
|
||||
|
||||
static LARGE_INTEGER gs_liTickCountPerSec;
|
||||
static DWORD gs_dwBaseTime=0;
|
||||
static DWORD gs_dwServerTime=0;
|
||||
static DWORD gs_dwClientTime=0;
|
||||
static DWORD gs_dwFrameTime=0;
|
||||
|
||||
#pragma comment(lib, "winmm.lib")
|
||||
|
||||
BOOL ELTimer_Init()
|
||||
{
|
||||
/*
|
||||
gs_liTickCountPerSec.QuadPart=0;
|
||||
|
||||
if (!QueryPerformanceFrequency(&gs_liTickCountPerSec))
|
||||
return 0;
|
||||
|
||||
LARGE_INTEGER liTickCount;
|
||||
QueryPerformanceCounter(&liTickCount);
|
||||
gs_dwBaseTime= (liTickCount.QuadPart*1000 / gs_liTickCountPerSec.QuadPart);
|
||||
*/
|
||||
gs_dwBaseTime = timeGetTime();
|
||||
return 1;
|
||||
}
|
||||
|
||||
DWORD ELTimer_GetMSec()
|
||||
{
|
||||
//assert(gs_dwBaseTime!=0 && "ELTimer_Init <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD>");
|
||||
//LARGE_INTEGER liTickCount;
|
||||
//QueryPerformanceCounter(&liTickCount);
|
||||
return timeGetTime() - gs_dwBaseTime; //(liTickCount.QuadPart*1000 / gs_liTickCountPerSec.QuadPart)-gs_dwBaseTime;
|
||||
}
|
||||
|
||||
VOID ELTimer_SetServerMSec(DWORD dwServerTime)
|
||||
{
|
||||
NANOBEGIN
|
||||
if (0 != dwServerTime) // nanomite<74><65> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> if
|
||||
{
|
||||
gs_dwServerTime = dwServerTime;
|
||||
gs_dwClientTime = CTimer::instance().GetCurrentMillisecond();
|
||||
}
|
||||
NANOEND
|
||||
}
|
||||
|
||||
DWORD ELTimer_GetServerMSec()
|
||||
{
|
||||
return CTimer::instance().GetCurrentMillisecond() - gs_dwClientTime + gs_dwServerTime;
|
||||
//return ELTimer_GetMSec() - gs_dwClientTime + gs_dwServerTime;
|
||||
}
|
||||
|
||||
DWORD ELTimer_GetFrameMSec()
|
||||
{
|
||||
return gs_dwFrameTime;
|
||||
}
|
||||
|
||||
DWORD ELTimer_GetServerFrameMSec()
|
||||
{
|
||||
return ELTimer_GetFrameMSec() - gs_dwClientTime + gs_dwServerTime;
|
||||
}
|
||||
|
||||
VOID ELTimer_SetFrameMSec()
|
||||
{
|
||||
gs_dwFrameTime = ELTimer_GetMSec();
|
||||
}
|
||||
|
||||
CTimer::CTimer()
|
||||
{
|
||||
ELTimer_Init();
|
||||
|
||||
NANOBEGIN
|
||||
if (this) // nanomite<74><65> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> if
|
||||
{
|
||||
m_dwCurrentTime = 0;
|
||||
m_bUseRealTime = true;
|
||||
m_index = 0;
|
||||
|
||||
m_dwElapsedTime = 0;
|
||||
|
||||
m_fCurrentTime = 0.0f;
|
||||
}
|
||||
NANOEND
|
||||
}
|
||||
|
||||
CTimer::~CTimer()
|
||||
{
|
||||
}
|
||||
|
||||
void CTimer::SetBaseTime()
|
||||
{
|
||||
m_dwCurrentTime = 0;
|
||||
}
|
||||
|
||||
void CTimer::Advance()
|
||||
{
|
||||
if (!m_bUseRealTime)
|
||||
{
|
||||
++m_index;
|
||||
|
||||
if (m_index == 1)
|
||||
m_index = -1;
|
||||
|
||||
m_dwCurrentTime += 16 + (m_index & 1);
|
||||
m_fCurrentTime = m_dwCurrentTime / 1000.0f;
|
||||
}
|
||||
else
|
||||
{
|
||||
DWORD currentTime = ELTimer_GetMSec();
|
||||
|
||||
if (m_dwCurrentTime == 0)
|
||||
m_dwCurrentTime = currentTime;
|
||||
|
||||
m_dwElapsedTime = currentTime - m_dwCurrentTime;
|
||||
m_dwCurrentTime = currentTime;
|
||||
}
|
||||
}
|
||||
|
||||
void CTimer::Adjust(int iTimeGap)
|
||||
{
|
||||
m_dwCurrentTime += iTimeGap;
|
||||
}
|
||||
|
||||
float CTimer::GetCurrentSecond()
|
||||
{
|
||||
if (m_bUseRealTime)
|
||||
return ELTimer_GetMSec() / 1000.0f;
|
||||
|
||||
return m_fCurrentTime;
|
||||
}
|
||||
|
||||
DWORD CTimer::GetCurrentMillisecond()
|
||||
{
|
||||
if (m_bUseRealTime)
|
||||
return ELTimer_GetMSec();
|
||||
|
||||
return m_dwCurrentTime;
|
||||
}
|
||||
|
||||
float CTimer::GetElapsedSecond()
|
||||
{
|
||||
return GetElapsedMilliecond() / 1000.0f;
|
||||
}
|
||||
|
||||
DWORD CTimer::GetElapsedMilliecond()
|
||||
{
|
||||
if (!m_bUseRealTime)
|
||||
return 16 + (m_index & 1);
|
||||
|
||||
return m_dwElapsedTime;
|
||||
}
|
||||
|
||||
void CTimer::UseCustomTime()
|
||||
{
|
||||
m_bUseRealTime = false;
|
||||
}
|
Reference in New Issue
Block a user