From 7e9793fa90aa1db11c13acbac83a9e456a52f54b Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Thu, 13 Mar 2014 10:57:29 +1300 Subject: [PATCH] Fix the timestep jank threshold. --- OpenRA.Game/Game.cs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/OpenRA.Game/Game.cs b/OpenRA.Game/Game.cs index c5de620cbc..1f1499411f 100644 --- a/OpenRA.Game/Game.cs +++ b/OpenRA.Game/Game.cs @@ -74,9 +74,8 @@ namespace OpenRA public static int NetFrameNumber { get { return orderManager.NetFrameNumber; } } public static int LocalTick { get { return orderManager.LocalFrameNumber; } } public const int NetTickScale = 3; // 120 ms net tick for 40 ms local tick - public const int MinTick = 1; - public const int MaxTick = 10; public const int Timestep = 40; + public const int TimestepJankThreshold = 250; // Don't catch up for delays larger than 250ms public static event Action ConnectionStateChanged = _ => { }; static ConnectionState lastConnectionState = ConnectionState.PreConnecting; @@ -181,9 +180,13 @@ namespace OpenRA if (worldTimestep != 0 && worldTickDelta >= worldTimestep) using (new PerfSample("tick_time")) { - var relativeTickDelta = (worldTickDelta / worldTimestep) * worldTimestep; - var tickIntervall = relativeTickDelta > MinTick && relativeTickDelta < MaxTick ? MinTick : relativeTickDelta; - orderManager.LastTickTime += tickIntervall; + // Tick the world to advance the world time to match real time: + // If dt < TickJankThreshold then we should try and catch up by repeatedly ticking + // If dt >= TickJankThreshold then we should accept the jank and progress at the normal rate + // dt is rounded down to an integer tick count in order to preserve fractional tick components. + + var integralTickTimestep = (worldTickDelta / worldTimestep) * worldTimestep; + orderManager.LastTickTime += integralTickTimestep >= TimestepJankThreshold ? integralTickTimestep : worldTimestep; if (orderManager.GameStarted) ++Viewport.TicksSinceLastMove;