diff --git a/OpenRA.Mods.RA/Widgets/Logic/GameTimerLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/GameTimerLogic.cs index 8233b9eda7..c3b048f404 100644 --- a/OpenRA.Mods.RA/Widgets/Logic/GameTimerLogic.cs +++ b/OpenRA.Mods.RA/Widgets/Logic/GameTimerLogic.cs @@ -8,6 +8,7 @@ */ #endregion +using System; using OpenRA.Network; using OpenRA.Widgets; @@ -19,27 +20,39 @@ namespace OpenRA.Mods.RA.Widgets.Logic public GameTimerLogic(Widget widget, OrderManager orderManager, World world) { var timer = widget.GetOrNull("GAME_TIMER"); - if (timer != null) - timer.GetText = () => WidgetUtils.FormatTime(world.WorldTick); - var status = widget.GetOrNull("GAME_TIMER_STATUS"); + var startTick = Ui.LastTickTime; + + Func shouldShowStatus = () => (world.Paused || world.Timestep != Game.Timestep) + && (Ui.LastTickTime - startTick) / 1000 % 2 == 0; + + Func statusText = () => + { + if (world.Paused || world.Timestep == 0) + return "Paused"; + + if (world.Timestep == 1) + return "Max Speed"; + + return "{0:F1}x Speed".F(Game.Timestep * 1f / world.Timestep); + }; + + if (timer != null) + { + timer.GetText = () => + { + if (status == null && shouldShowStatus()) + return statusText(); + + return WidgetUtils.FormatTime(world.WorldTick); + }; + } + if (status != null) { - var startTick = Ui.LastTickTime; // Blink the status line - status.IsVisible = () => (world.Paused || world.Timestep != Game.Timestep) - && (Ui.LastTickTime - startTick) / 1000 % 2 == 0; - - status.GetText = () => - { - if (world.Paused || world.Timestep == 0) - return "Paused"; - - if (world.Timestep == 1) - return "Max Speed"; - - return "{0:F1}x Speed".F(Game.Timestep * 1f / world.Timestep); - }; + status.IsVisible = shouldShowStatus; + status.GetText = statusText; } } }