Account for game ticks when applying the frame limiter.

This commit is contained in:
Paul Chote
2019-12-08 21:32:32 +00:00
committed by teinarss
parent 656a260171
commit 2231183fe0

View File

@@ -774,6 +774,7 @@ namespace OpenRA
var nextLogic = RunTime; var nextLogic = RunTime;
var nextRender = RunTime; var nextRender = RunTime;
var forcedNextRender = RunTime; var forcedNextRender = RunTime;
var renderBeforeNextTick = false;
while (state == RunStatus.Running) while (state == RunStatus.Running)
{ {
@@ -802,9 +803,9 @@ namespace OpenRA
var nextUpdate = Math.Min(nextLogic, nextRender); var nextUpdate = Math.Min(nextLogic, nextRender);
if (now >= nextUpdate) if (now >= nextUpdate)
{ {
var forceRender = now >= forcedNextRender; var forceRender = renderBeforeNextTick || now >= forcedNextRender;
if (now >= nextLogic) if (now >= nextLogic && !renderBeforeNextTick)
{ {
nextLogic += logicInterval; nextLogic += logicInterval;
@@ -812,7 +813,7 @@ namespace OpenRA
// Force at least one render per tick during regular gameplay // Force at least one render per tick during regular gameplay
if (OrderManager.World != null && !OrderManager.World.IsLoadingGameSave && !OrderManager.World.IsReplay) if (OrderManager.World != null && !OrderManager.World.IsLoadingGameSave && !OrderManager.World.IsReplay)
forceRender = true; renderBeforeNextTick = true;
} }
var haveSomeTimeUntilNextLogic = now < nextLogic; var haveSomeTimeUntilNextLogic = now < nextLogic;
@@ -831,6 +832,7 @@ namespace OpenRA
forcedNextRender = now + maxRenderInterval; forcedNextRender = now + maxRenderInterval;
RenderTick(); RenderTick();
renderBeforeNextTick = false;
} }
} }
else else