From 7a2b78b1d81d721903e949a8bb0dfaf58b017191 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sun, 22 May 2011 19:32:25 +1200 Subject: [PATCH] Fix diplomacy/cheats menu stacking --- OpenRA.Mods.Cnc/Widgets/CncCheatsLogic.cs | 4 ++- OpenRA.Mods.Cnc/Widgets/CncDiplomacyLogic.cs | 5 ++-- .../Widgets/CncIngameChromeLogic.cs | 30 +++++++++++++++++-- 3 files changed, 33 insertions(+), 6 deletions(-) diff --git a/OpenRA.Mods.Cnc/Widgets/CncCheatsLogic.cs b/OpenRA.Mods.Cnc/Widgets/CncCheatsLogic.cs index 0b7d6a4f2f..47ec0155e0 100644 --- a/OpenRA.Mods.Cnc/Widgets/CncCheatsLogic.cs +++ b/OpenRA.Mods.Cnc/Widgets/CncCheatsLogic.cs @@ -18,6 +18,7 @@ */ #endregion +using System; using OpenRA.Traits; using OpenRA.Widgets; @@ -27,6 +28,7 @@ namespace OpenRA.Mods.Cnc.Widgets { [ObjectCreator.UseCtor] public CncCheatsLogic([ObjectCreator.Param] Widget widget, + [ObjectCreator.Param] Action onExit, [ObjectCreator.Param] World world) { var panel = widget.GetWidget("CHEATS_PANEL"); @@ -67,7 +69,7 @@ namespace OpenRA.Mods.Cnc.Widgets panel.GetWidget("GIVE_EXPLORATION_BUTTON").OnClick = () => world.IssueOrder(new Order("DevGiveExploration", world.LocalPlayer.PlayerActor, false)); - panel.GetWidget("CLOSE_BUTTON").OnClick = Widget.CloseWindow; + panel.GetWidget("CLOSE_BUTTON").OnClick = () => { Widget.CloseWindow(); onExit(); }; } public void Order(World world, string order) diff --git a/OpenRA.Mods.Cnc/Widgets/CncDiplomacyLogic.cs b/OpenRA.Mods.Cnc/Widgets/CncDiplomacyLogic.cs index 6a8a9db521..1e1d82bffb 100755 --- a/OpenRA.Mods.Cnc/Widgets/CncDiplomacyLogic.cs +++ b/OpenRA.Mods.Cnc/Widgets/CncDiplomacyLogic.cs @@ -25,11 +25,12 @@ namespace OpenRA.Mods.Cnc.Widgets [ObjectCreator.UseCtor] public CncDiplomacyLogic([ObjectCreator.Param] Widget widget, - [ObjectCreator.Param] World world) + [ObjectCreator.Param] Action onExit, + [ObjectCreator.Param] World world) { this.world = world; var panel = widget.GetWidget("DIPLOMACY_PANEL"); - panel.GetWidget("BACK_BUTTON").OnClick = Widget.CloseWindow; + panel.GetWidget("BACK_BUTTON").OnClick = () => { Widget.CloseWindow(); onExit(); }; var scrollpanel = panel.GetWidget("PLAYER_LIST"); var itemTemplate = scrollpanel.GetWidget("PLAYER_TEMPLATE"); diff --git a/OpenRA.Mods.Cnc/Widgets/CncIngameChromeLogic.cs b/OpenRA.Mods.Cnc/Widgets/CncIngameChromeLogic.cs index c9e5529a2a..5f5ad59bda 100755 --- a/OpenRA.Mods.Cnc/Widgets/CncIngameChromeLogic.cs +++ b/OpenRA.Mods.Cnc/Widgets/CncIngameChromeLogic.cs @@ -19,6 +19,9 @@ namespace OpenRA.Mods.Cnc.Widgets { public class CncIngameChromeLogic : IWidgetDelegate { + enum MenuType { None, Diplomacy, Cheats } + MenuType menu = MenuType.None; + static bool staticSetup; Widget ingameRoot; @@ -61,10 +64,23 @@ namespace OpenRA.Mods.Cnc.Widgets var diplomacyButton = ingameRoot.GetWidget("DIPLOMACY_BUTTON"); var diplomacyAvailable = world.players.Values.Any(a => a != world.LocalPlayer && !a.NonCombatant); diplomacyButton.IsDisabled = () => !diplomacyAvailable; - diplomacyButton.OnClick = () => Game.OpenWindow("DIPLOMACY_PANEL", new WidgetArgs()); - + diplomacyButton.OnClick = () => + { + if (menu != MenuType.None) + Widget.CloseWindow(); + + menu = MenuType.Diplomacy; + Game.OpenWindow("DIPLOMACY_PANEL", new WidgetArgs() {{"onExit", () => menu = MenuType.None }}); + }; + ingameRoot.GetWidget("OPTIONS_BUTTON").OnClick = () => { + if (menu != MenuType.None) + { + Widget.CloseWindow(); + menu = MenuType.None; + } + ingameRoot.IsVisible = () => false; Game.LoadWidget(world, "INGAME_MENU", Widget.RootWidget, new WidgetArgs() { @@ -73,7 +89,15 @@ namespace OpenRA.Mods.Cnc.Widgets }; var cheatsButton = ingameRoot.GetWidget("CHEATS_BUTTON"); - cheatsButton.OnClick = () => Game.OpenWindow("CHEATS_PANEL", new WidgetArgs()); + cheatsButton.OnClick = () => + { + if (menu != MenuType.None) + Widget.CloseWindow(); + + menu = MenuType.Diplomacy; + Game.OpenWindow("CHEATS_PANEL", new WidgetArgs() {{"onExit", () => menu = MenuType.None }}); + }; + cheatsButton.IsVisible = () => world.LobbyInfo.GlobalSettings.AllowCheats; var postgameBG = ingameRoot.GetWidget("POSTGAME_BG");