diff options
author | Sergeanur <s.anureev@yandex.ua> | 2021-06-25 02:33:40 +0300 |
---|---|---|
committer | Sergeanur <s.anureev@yandex.ua> | 2021-06-25 02:33:40 +0300 |
commit | 1f082a85cbf1c1bd3c9875533a44ecca26984e01 (patch) | |
tree | d6c2326b31694365514357eca4f0d6210dddec4f /src/core | |
parent | 5c1af537af94fdc1af9881d0d8e5c32f46b89e56 (diff) |
Refactor CTimer::Update
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/Timer.cpp | 135 |
1 files changed, 81 insertions, 54 deletions
diff --git a/src/core/Timer.cpp b/src/core/Timer.cpp index 29875c91..cf060127 100644 --- a/src/core/Timer.cpp +++ b/src/core/Timer.cpp @@ -83,14 +83,14 @@ void CTimer::Shutdown(void) { ; } - +#ifdef FIX_BUGS void CTimer::Update(void) { -#ifdef FIX_BUGS static double frameTimeLogical = 0.0; static double frameTimeFraction = 0.0; static double frameTimeFractionScaled = 0.0; -#endif + double frameTime; + double dblUpdInMs; m_snPreviousTimeInMilliseconds = m_snTimeInMilliseconds; @@ -105,49 +105,100 @@ void CTimer::Update(void) _oldPerfCounter = pc; // bugfix from VC -#ifdef FIX_BUGS float updInCyclesScaled = GetIsPaused() ? updInCycles : updInCycles * ms_fTimeScale; -#else - float updInCyclesScaled = updInCycles * ms_fTimeScale; + + frameTime = updInCyclesScaled / (double)_nCyclesPerMS; + + dblUpdInMs = (double)updInCycles / (double)_nCyclesPerMS; + } + else #endif + { + RsTimerType timer = RsTimer(); + + RsTimerType updInMs = timer - oldPcTimer; + + frameTime = (double)updInMs * ms_fTimeScale; - double frameTime = updInCyclesScaled / (double)_nCyclesPerMS; + oldPcTimer = timer; -#ifdef FIX_BUGS - // count frames as if we're running at 30 fps - m_LogicalFramesPassed = 0; - frameTimeLogical += ((double)updInCycles / (double)_nCyclesPerMS); - while (frameTimeLogical >= 1000.0 / 30.0) { - frameTimeLogical -= 1000.0 / 30.0; - m_LogicalFramesPassed++; - } - m_LogicalFrameCounter += m_LogicalFramesPassed; + dblUpdInMs = (double)updInMs; + } - frameTimeFraction += (double)updInCycles / (double)_nCyclesPerMS; - frameTimeFractionScaled += frameTime; + // count frames as if we're running at 30 fps + m_LogicalFramesPassed = 0; + frameTimeLogical += dblUpdInMs; + while(frameTimeLogical >= 1000.0 / 30.0) { + frameTimeLogical -= 1000.0 / 30.0; + m_LogicalFramesPassed++; + } + m_LogicalFrameCounter += m_LogicalFramesPassed; + + frameTimeFraction += dblUpdInMs; + frameTimeFractionScaled += frameTime; - m_snTimeInMillisecondsPauseMode += uint32(frameTimeFraction); + m_snTimeInMillisecondsPauseMode += uint32(frameTimeFraction); + + if ( GetIsPaused() ) + ms_fTimeStep = 0.0f; + else + { + m_snTimeInMilliseconds += uint32(frameTimeFractionScaled); + m_snTimeInMillisecondsNonClipped += uint32(frameTimeFractionScaled); + ms_fTimeStep = frameTime / 1000.0f * 50.0f; + } + frameTimeFraction -= uint32(frameTimeFraction); + frameTimeFractionScaled -= uint32(frameTimeFractionScaled); + + if ( ms_fTimeStep < 0.01f && !GetIsPaused() ) + ms_fTimeStep = 0.01f; + + ms_fTimeStepNonClipped = ms_fTimeStep; + + if ( !CRecordDataForGame::IsPlayingBack() ) + { + ms_fTimeStep = Min(3.0f, ms_fTimeStep); + + if ( (m_snTimeInMilliseconds - m_snPreviousTimeInMilliseconds) > 60 ) + m_snTimeInMilliseconds = m_snPreviousTimeInMilliseconds + 60; + } + + if ( CRecordDataForChase::IsRecording() ) + { + ms_fTimeStep = 1.0f; + m_snTimeInMilliseconds = m_snPreviousTimeInMilliseconds + 16; + } + + m_FrameCounter++; +} #else +void CTimer::Update(void) +{ + m_snPreviousTimeInMilliseconds = m_snTimeInMilliseconds; + +#ifdef _WIN32 + if ( (double)_nCyclesPerMS != 0.0 ) + { + LARGE_INTEGER pc; + QueryPerformanceCounter(&pc); + + int32 updInCycles = (pc.LowPart - _oldPerfCounter.LowPart); // & 0x7FFFFFFF; pointless + + _oldPerfCounter = pc; + + float updInCyclesScaled = updInCycles * ms_fTimeScale; + + double frameTime = updInCyclesScaled / (double)_nCyclesPerMS; m_snTimeInMillisecondsPauseMode = m_snTimeInMillisecondsPauseMode + frameTime; -#endif if ( GetIsPaused() ) ms_fTimeStep = 0.0f; else { -#ifdef FIX_BUGS - m_snTimeInMilliseconds += uint32(frameTimeFractionScaled); - m_snTimeInMillisecondsNonClipped += uint32(frameTimeFractionScaled); -#else m_snTimeInMilliseconds = m_snTimeInMilliseconds + frameTime; m_snTimeInMillisecondsNonClipped = m_snTimeInMillisecondsNonClipped + frameTime; -#endif ms_fTimeStep = frameTime / 1000.0f * 50.0f; } -#ifdef FIX_BUGS - frameTimeFraction -= uint32(frameTimeFraction); - frameTimeFractionScaled -= uint32(frameTimeFractionScaled); -#endif } else #endif @@ -160,41 +211,16 @@ void CTimer::Update(void) oldPcTimer = timer; -#ifdef FIX_BUGS - // count frames as if we're running at 30 fps - m_LogicalFramesPassed = 0; - frameTimeLogical += (double)updInMs; - while(frameTimeLogical >= 1000.0 / 30.0) { - frameTimeLogical -= 1000.0 / 30.0; - m_LogicalFramesPassed++; - } - m_LogicalFrameCounter += m_LogicalFramesPassed; - - frameTimeFraction += (double)updInMs; - frameTimeFractionScaled += frameTime; - - m_snTimeInMillisecondsPauseMode += uint32(frameTimeFraction); -#else m_snTimeInMillisecondsPauseMode = m_snTimeInMillisecondsPauseMode + frameTime; -#endif if ( GetIsPaused() ) ms_fTimeStep = 0.0f; else { -#ifdef FIX_BUGS - m_snTimeInMilliseconds += uint32(frameTimeFractionScaled); - m_snTimeInMillisecondsNonClipped += uint32(frameTimeFractionScaled); -#else m_snTimeInMilliseconds = m_snTimeInMilliseconds + frameTime; m_snTimeInMillisecondsNonClipped = m_snTimeInMillisecondsNonClipped + frameTime; -#endif ms_fTimeStep = frameTime / 1000.0f * 50.0f; } -#ifdef FIX_BUGS - frameTimeFraction -= uint32(frameTimeFraction); - frameTimeFractionScaled -= uint32(frameTimeFractionScaled); -#endif } if ( ms_fTimeStep < 0.01f && !GetIsPaused() ) @@ -218,6 +244,7 @@ void CTimer::Update(void) m_FrameCounter++; } +#endif void CTimer::Suspend(void) { |