Fix cut off sfx on high framerates

This commit is contained in:
Sergeanur
2021-05-28 19:03:16 +03:00
parent f2390deaa9
commit cacec36dd1
4 changed files with 51 additions and 2 deletions

View File

@ -16,6 +16,9 @@ float CTimer::ms_fTimeStep;
float CTimer::ms_fTimeStepNonClipped;
bool CTimer::m_UserPause;
bool CTimer::m_CodePause;
#ifdef FIX_BUGS
uint32 CTimer::m_LogicalFrameCounter;
#endif
uint32 _nCyclesPerMS = 1;
@ -49,6 +52,9 @@ void CTimer::Initialise(void)
m_snTimeInMillisecondsNonClipped = 0;
m_snPreviousTimeInMilliseconds = 0;
m_snTimeInMilliseconds = 1;
#ifdef FIX_BUGS
m_LogicalFrameCounter = 0;
#endif
#ifdef _WIN32
LARGE_INTEGER perfFreq;
@ -102,6 +108,15 @@ void CTimer::Update(void)
#endif
frameTime = updInCyclesScaled / (double)_nCyclesPerMS;
#ifdef FIX_BUGS
static double frameTimeLogical = 0.0;
frameTimeLogical += ((double)updInCycles / (double)_nCyclesPerMS);
while (frameTimeLogical >= 1000.0 / 30.0) {
frameTimeLogical -= 1000.0 / 30.0;
m_LogicalFrameCounter++;
}
#endif
m_snTimeInMillisecondsPauseMode = m_snTimeInMillisecondsPauseMode + frameTime;
if ( GetIsPaused() )
@ -126,6 +141,15 @@ void CTimer::Update(void)
#endif
frameTime = (double)updInMs * ms_fTimeScale;
#ifdef FIX_BUGS
static double frameTimeLogical = 0.0;
frameTimeLogical += (double)updInMs;
while(frameTimeLogical >= 1000.0 / 30.0) {
frameTimeLogical -= 1000.0 / 30.0;
m_LogicalFrameCounter++;
}
#endif
oldPcTimer = timer;
m_snTimeInMillisecondsPauseMode = m_snTimeInMillisecondsPauseMode + frameTime;

View File

@ -11,6 +11,9 @@ class CTimer
static float ms_fTimeScale;
static float ms_fTimeStep;
static float ms_fTimeStepNonClipped;
#ifdef FIX_BUGS
static uint32 m_LogicalFrameCounter;
#endif
public:
static bool m_UserPause;
static bool m_CodePause;
@ -61,6 +64,7 @@ public:
#ifdef FIX_BUGS
static float GetDefaultTimeStep(void) { return 50.0f / 30.0f; }
static float GetTimeStepFix(void) { return GetTimeStep() / GetDefaultTimeStep(); }
static uint32 GetLogicalFrameCounter(void) { return m_LogicalFrameCounter; }
#endif
};