1
0
Fork 0
mirror of https://github.com/k4zmu2a/SpaceCadetPinball.git synced 2024-11-25 10:20:17 +01:00

Fixed unaccounted frame time, now game should be stable at 8ms/125UPS.

Fixed pause handling.
This commit is contained in:
Muzychenko Andrey 2021-11-12 16:21:02 +03:00
parent ec13bca129
commit 0b2fd28fda

View file

@ -224,7 +224,7 @@ int winmain::WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi
else else
pb::replay_level(0); pb::replay_level(0);
DWORD someTimeCounter = 300u, prevTime = 0u; DWORD someTimeCounter = 300u, prevTime = 0u, frameStart = timeGetTime();
int sleepRemainder = 0, frameDuration = TargetFrameTime; int sleepRemainder = 0, frameDuration = TargetFrameTime;
while (true) while (true)
{ {
@ -277,7 +277,6 @@ int winmain::WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi
if (!single_step) if (!single_step)
{ {
auto frameStart = timeGetTime();
auto dt = frameDuration; auto dt = frameDuration;
if (!no_time_loss) if (!no_time_loss)
pb::frame(dt); pb::frame(dt);
@ -313,12 +312,21 @@ int winmain::WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi
auto updateEnd = timeGetTime(); auto updateEnd = timeGetTime();
auto sleepDuration = TargetFrameTime - (int)(updateEnd - frameStart) - sleepRemainder; auto sleepDuration = TargetFrameTime - (int)(updateEnd - frameStart) - sleepRemainder;
DWORD frameEnd;
if (sleepDuration > 0) if (sleepDuration > 0)
{
Sleep(sleepDuration); Sleep(sleepDuration);
frameEnd = timeGetTime();
auto frameEnd = timeGetTime();
sleepRemainder = (frameEnd - updateEnd) - sleepDuration; sleepRemainder = (frameEnd - updateEnd) - sleepDuration;
}
else
{
frameEnd = updateEnd;
sleepRemainder = 0;
}
frameDuration = min(frameEnd - frameStart, TargetFrameTime * 2); frameDuration = min(frameEnd - frameStart, TargetFrameTime * 2);
frameStart = frameEnd;
--someTimeCounter; --someTimeCounter;
} }