diff --git a/OpenRA.Game/Chrome.cs b/OpenRA.Game/Chrome.cs index aca75a176b..a822cd71ed 100644 --- a/OpenRA.Game/Chrome.cs +++ b/OpenRA.Game/Chrome.cs @@ -176,11 +176,12 @@ namespace OpenRA renderer.Device.DisableScissor(); if (Game.Settings.PerfText) - renderer.RegularFont.DrawText( rgbaRenderer, "RenderFrame {0} ({2:F1} ms)\nTick {1} ({3:F1} ms)\n".F( + renderer.RegularFont.DrawText( rgbaRenderer, "RenderFrame {0} ({2:F1} ms)\nTick {4}/ Net{1} ({3:F1} ms)\n".F( Game.RenderFrame, Game.orderManager.FrameNumber, PerfHistory.items["render"].LastValue, - PerfHistory.items["tick_time"].LastValue), + PerfHistory.items["tick_time"].LastValue, + Game.LocalTick), new int2(140, 15), Color.White); if (Game.Settings.PerfGraph) diff --git a/OpenRA.Game/Game.cs b/OpenRA.Game/Game.cs index 67674cca98..bb388ba877 100644 --- a/OpenRA.Game/Game.cs +++ b/OpenRA.Game/Game.cs @@ -180,6 +180,9 @@ namespace OpenRA internal static Chat chat = new Chat(); + public static int LocalTick = 0; + const int NetTickScale = 3; // 120ms net tick for 40ms local tick + public static void Tick() { if (changePending && PackageDownloader.IsIdle()) @@ -199,9 +202,14 @@ namespace OpenRA orderManager.TickImmediate( world ); - if (orderManager.IsReadyForNextFrame) + var isNetTick = LocalTick % NetTickScale == 0; + + if (!isNetTick || orderManager.IsReadyForNextFrame) { - orderManager.Tick(world); + ++LocalTick; + + if (isNetTick) orderManager.Tick(world); + controller.orderGenerator.Tick(world); controller.selection.Tick(world);