From b85d5a91935ba8fd17bb248eaaccf5c2c7ef88c2 Mon Sep 17 00:00:00 2001 From: Oliver Brakmann Date: Tue, 5 Aug 2014 02:54:42 +0200 Subject: [PATCH] Fix observer widgets not showing up when a player loses Fixes #6172. --- .../Widgets/Logic/IngameChromeLogic.cs | 2 +- .../Ingame/LoadIngamePlayerOrObserverUILogic.cs | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/OpenRA.Mods.D2k/Widgets/Logic/IngameChromeLogic.cs b/OpenRA.Mods.D2k/Widgets/Logic/IngameChromeLogic.cs index db55cffc9d..171e155376 100644 --- a/OpenRA.Mods.D2k/Widgets/Logic/IngameChromeLogic.cs +++ b/OpenRA.Mods.D2k/Widgets/Logic/IngameChromeLogic.cs @@ -172,7 +172,7 @@ namespace OpenRA.Mods.D2k.Widgets.Logic cachedRadarActive = radarActive; // Switch to observer mode after win/loss - if (world.LocalPlayer.WinState != WinState.Undefined) + if (world.ObserveAfterWinOrLose && world.LocalPlayer.WinState != WinState.Undefined) Game.RunAfterTick(() => { playerRoot.RemoveChildren(); diff --git a/OpenRA.Mods.RA/Widgets/Logic/Ingame/LoadIngamePlayerOrObserverUILogic.cs b/OpenRA.Mods.RA/Widgets/Logic/Ingame/LoadIngamePlayerOrObserverUILogic.cs index 201007bd86..0913002525 100644 --- a/OpenRA.Mods.RA/Widgets/Logic/Ingame/LoadIngamePlayerOrObserverUILogic.cs +++ b/OpenRA.Mods.RA/Widgets/Logic/Ingame/LoadIngamePlayerOrObserverUILogic.cs @@ -23,7 +23,22 @@ namespace OpenRA.Mods.RA.Widgets.Logic if (world.LocalPlayer == null) Game.LoadWidget(world, "OBSERVER_WIDGETS", playerRoot, new WidgetArgs()); else - Game.LoadWidget(world, "PLAYER_WIDGETS", playerRoot, new WidgetArgs()); + { + var playerWidgets = Game.LoadWidget(world, "PLAYER_WIDGETS", playerRoot, new WidgetArgs()); + var sidebarTicker = playerWidgets.Get("SIDEBAR_TICKER"); + + sidebarTicker.OnTick = () => + { + // Switch to observer mode after win/loss + if (world.ObserveAfterWinOrLose && world.LocalPlayer.WinState != WinState.Undefined) + Game.RunAfterTick(() => + { + playerRoot.RemoveChildren(); + Game.LoadWidget(world, "OBSERVER_WIDGETS", playerRoot, new WidgetArgs()); + }); + + }; + } Game.LoadWidget(world, "CHAT_PANEL", ingameRoot, new WidgetArgs()); }