From b59c904836b6e0b0a2963e588df83cf892e85e2a Mon Sep 17 00:00:00 2001 From: RD42 <42702181+dashr9230@users.noreply.github.com> Date: Wed, 24 Apr 2024 22:42:10 +0800 Subject: [PATCH] [server] Implement `GetElapsedTime()` * Update `CNetGame::Process()` --- server/netgame.cpp | 63 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/server/netgame.cpp b/server/netgame.cpp index 4bac454..90f426d 100644 --- a/server/netgame.cpp +++ b/server/netgame.cpp @@ -465,8 +465,71 @@ void CNetGame::ShutdownForGameModeRestart() */ } +//---------------------------------------------------- + +#ifdef WIN32 + +#pragma comment(lib, "winmm.lib") +float GetElapsedTime() +{ + static BOOL bTimerInit = false; + static BOOL bUsingOPF = false; + static LONGLONG nTicksPerSec = 0; + + if (!bTimerInit) + { + bTimerInit = true; + LARGE_INTEGER qwTicksPerSec; + bUsingOPF = QueryPerformanceFrequency(&qwTicksPerSec); + if (bUsingOPF) nTicksPerSec = qwTicksPerSec.QuadPart; + } + + if (bUsingOPF) + { + LARGE_INTEGER qwTime; + QueryPerformanceCounter(&qwTime); + static LONGLONG llLastTime = qwTime.QuadPart; + double fElapsedTime = (double)(qwTime.QuadPart - llLastTime) / (double) nTicksPerSec; + llLastTime = qwTime.QuadPart; + return (float)fElapsedTime; + } else { + double fTime = timeGetTime() * 0.001; + static double fLastTime = fTime; + double fElapsedTime = (double)(fTime - fLastTime); + fLastTime = fTime; + return (float)fElapsedTime; + } +} + +#else + +float GetElapsedTime() +{ + static timeval lasttv; + timeval tv; + float fRet; + + gettimeofday(&tv, NULL); + + if (!timerisset(&lasttv)) memcpy(&lasttv, &tv, sizeof(timeval)); + + fRet = (float)((tv.tv_sec - lasttv.tv_sec) * 1000000) + (tv.tv_usec - lasttv.tv_usec); + fRet /= 1000000.0f; + + memcpy(&lasttv,&tv,sizeof(timeval)); + + return fRet; +} + +#endif // WIN32 + +//---------------------------------------------------- + void CNetGame::Process() { + float fElapsedTime = GetElapsedTime(); + + // TODO: CNetGame::Process W: 00491240 L: 080AEEE0 /*