From d88b27745b6232130d652dc23424cedd4d326a27 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sat, 19 Jul 2014 17:57:01 +1200 Subject: [PATCH] Fix observer buttons. --- .../Widgets/Logic/IngameChromeLogic.cs | 16 ++++++++++++---- .../Widgets/Logic/ObserverStatsLogic.cs | 17 ++++++++++++++++- .../Widgets/Logic/OrderButtonsChromeLogic.cs | 7 +++++++ mods/cnc/chrome/ingame.yaml | 3 ++- mods/d2k/chrome/ingame-observer.yaml | 2 +- mods/ra/chrome/ingame-observer.yaml | 11 +++++++++-- mods/ra/chrome/ingame-observerstats.yaml | 18 ++++++++++++------ mods/ra/chrome/ingame-player.yaml | 2 ++ 8 files changed, 61 insertions(+), 15 deletions(-) diff --git a/OpenRA.Mods.D2k/Widgets/Logic/IngameChromeLogic.cs b/OpenRA.Mods.D2k/Widgets/Logic/IngameChromeLogic.cs index 0979a9885c..db55cffc9d 100644 --- a/OpenRA.Mods.D2k/Widgets/Logic/IngameChromeLogic.cs +++ b/OpenRA.Mods.D2k/Widgets/Logic/IngameChromeLogic.cs @@ -78,8 +78,16 @@ namespace OpenRA.Mods.D2k.Widgets.Logic { var observerWidgets = Game.LoadWidget(world, "OBSERVER_WIDGETS", playerRoot, new WidgetArgs()); - Game.LoadWidget(world, "OBSERVER_STATS", observerWidgets, new WidgetArgs()); - observerWidgets.Get("INGAME_STATS_BUTTON").OnClick = () => gameRoot.Get("OBSERVER_STATS").Visible ^= true; + Widget observerstats = null; + observerstats = Game.LoadWidget(world, "INGAME_OBSERVERSTATS_BG", observerWidgets, new WidgetArgs + { + { "transient", false }, + { "onExit", () => observerstats.Visible = false } + }); + observerstats.Visible = false; + + var statsButton = observerWidgets.Get("OBSERVER_STATS_BUTTON"); + statsButton.OnClick = () => observerstats.Visible ^= true; } enum RadarBinState { Closed, BinAnimating, RadarAnimating, Open }; @@ -90,7 +98,7 @@ namespace OpenRA.Mods.D2k.Widgets.Logic Widget diplomacy = null; diplomacy = Game.LoadWidget(world, "INGAME_DIPLOMACY_BG", playerWidgets, new WidgetArgs { - { "transient", true }, + { "transient", false }, { "onExit", () => diplomacy.Visible = false } }); diplomacy.Visible = false; @@ -104,7 +112,7 @@ namespace OpenRA.Mods.D2k.Widgets.Logic Widget cheats = null; cheats = Game.LoadWidget(world, "INGAME_DEBUG_BG", playerWidgets, new WidgetArgs { - { "transient", true }, + { "transient", false }, { "onExit", () => cheats.Visible = false } }); cheats.Visible = false; diff --git a/OpenRA.Mods.RA/Widgets/Logic/ObserverStatsLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/ObserverStatsLogic.cs index b1825a4aaa..a24b302d21 100644 --- a/OpenRA.Mods.RA/Widgets/Logic/ObserverStatsLogic.cs +++ b/OpenRA.Mods.RA/Widgets/Logic/ObserverStatsLogic.cs @@ -40,7 +40,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic WorldRenderer worldRenderer; [ObjectCreator.UseCtor] - public ObserverStatsLogic(World world, WorldRenderer worldRenderer, Widget widget) + public ObserverStatsLogic(World world, WorldRenderer worldRenderer, Widget widget, Action onExit, bool transient) { this.world = world; this.worldRenderer = worldRenderer; @@ -136,6 +136,21 @@ namespace OpenRA.Mods.RA.Widgets.Logic ClearStats(); DisplayStats(BasicStats); + + var close = widget.GetOrNull("CLOSE"); + if (close != null) + { + close.OnClick = () => + { + if (transient) + { + Ui.CloseWindow(); + Ui.Root.RemoveChild(widget); + } + + onExit(); + }; + } } void ClearStats() diff --git a/OpenRA.Mods.RA/Widgets/Logic/OrderButtonsChromeLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/OrderButtonsChromeLogic.cs index f9a2d17bd7..3bb5bda0ed 100644 --- a/OpenRA.Mods.RA/Widgets/Logic/OrderButtonsChromeLogic.cs +++ b/OpenRA.Mods.RA/Widgets/Logic/OrderButtonsChromeLogic.cs @@ -78,6 +78,13 @@ namespace OpenRA.Mods.RA.Widgets.Logic debug.IsDisabled = () => disableSystemButtons; debug.OnClick = () => OpenMenuPanel(debug); } + + var stats = widget.GetOrNull("OBSERVER_STATS_BUTTON"); + if (stats != null) + { + stats.IsDisabled = () => disableSystemButtons; + stats.OnClick = () => OpenMenuPanel(stats); + } } void OpenMenuPanel(MenuButtonWidget button) diff --git a/mods/cnc/chrome/ingame.yaml b/mods/cnc/chrome/ingame.yaml index 28c3318cff..c835bf36d4 100644 --- a/mods/cnc/chrome/ingame.yaml +++ b/mods/cnc/chrome/ingame.yaml @@ -59,7 +59,8 @@ Container@INGAME_ROOT: Container@OBSERVER_WIDGETS: Children: - Button@OPTIONS_BUTTON: + MenuButton@OPTIONS_BUTTON: + Logic: OrderButtonsChromeLogic Key: escape X: WINDOW_RIGHT-202 Y: 5 diff --git a/mods/d2k/chrome/ingame-observer.yaml b/mods/d2k/chrome/ingame-observer.yaml index 20a23c2482..996d72c9b4 100644 --- a/mods/d2k/chrome/ingame-observer.yaml +++ b/mods/d2k/chrome/ingame-observer.yaml @@ -1,6 +1,6 @@ Container@OBSERVER_WIDGETS: Children: - Button@INGAME_STATS_BUTTON: + Button@OBSERVER_STATS_BUTTON: X: 162 Y: 0 Width: 160 diff --git a/mods/ra/chrome/ingame-observer.yaml b/mods/ra/chrome/ingame-observer.yaml index 149ac0f679..237e6bdbe7 100644 --- a/mods/ra/chrome/ingame-observer.yaml +++ b/mods/ra/chrome/ingame-observer.yaml @@ -1,4 +1,5 @@ Container@OBSERVER_WIDGETS: + Logic: OrderButtonsChromeLogic Children: Container@GAME_TIMER_BLOCK: Logic: GameTimerLogic @@ -19,7 +20,10 @@ Container@OBSERVER_WIDGETS: Align: Center Font: Bold Contrast: true - Button@INGAME_OPTIONS_BUTTON: + MenuButton@OPTIONS_BUTTON: + MenuContainer: INGAME_OPTIONS_BG + HideIngameUI: false + Pause: false X: 0 Y: 0 Width: 160 @@ -27,7 +31,10 @@ Container@OBSERVER_WIDGETS: Text: Options (ESC) Font: Bold Key: escape - Button@INGAME_STATS_BUTTON: + MenuButton@OBSERVER_STATS_BUTTON: + MenuContainer: INGAME_OBSERVERSTATS_BG + HideIngameUI: false + Pause: false X: 162 Y: 0 Width: 160 diff --git a/mods/ra/chrome/ingame-observerstats.yaml b/mods/ra/chrome/ingame-observerstats.yaml index 77baedb70d..82fcd3b5eb 100644 --- a/mods/ra/chrome/ingame-observerstats.yaml +++ b/mods/ra/chrome/ingame-observerstats.yaml @@ -1,15 +1,14 @@ -Container@OBSERVER_STATS: +Background@INGAME_OBSERVERSTATS_BG: Logic: ObserverStatsLogic X: 25 Y: 50 Width: 950 Height: 500 - Visible: false + Background: dialog Children: - Background@BACKGROUND: + Container@BACKGROUND: Width: PARENT_RIGHT - Height: PARENT_BOTTOM - Background: dialog + Height: PARENT_BOTTOM - 35 Children: Label@TITLE: X: 0 @@ -486,4 +485,11 @@ Container@OBSERVER_STATS: YAxisLabel: $ LabelFont: TinyBold AxisFont: Bold - + Button@CLOSE: + X: PARENT_RIGHT - 145 + Y: PARENT_BOTTOM - 45 + Width: 120 + Height: 25 + Text: Close + Key: escape + Font: Bold diff --git a/mods/ra/chrome/ingame-player.yaml b/mods/ra/chrome/ingame-player.yaml index 5195d4d80f..cd6471154f 100644 --- a/mods/ra/chrome/ingame-player.yaml +++ b/mods/ra/chrome/ingame-player.yaml @@ -108,6 +108,7 @@ Container@PLAYER_WIDGETS: Logic: AddRaceSuffixLogic MenuContainer: INGAME_DEBUG_BG HideIngameUI: false + Pause: false Key: f2 X: 128 Width: 28 @@ -126,6 +127,7 @@ Container@PLAYER_WIDGETS: Logic: AddRaceSuffixLogic MenuContainer: INGAME_DIPLOMACY_BG HideIngameUI: false + Pause: false Key: f1 X: 160 Width: 28