From fda3ae2fb0db494799560ca728bb7caffa4ffe5e Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Thu, 17 Jul 2014 16:13:48 +1200 Subject: [PATCH] Make the diplomacy panel consistent with cheats and menu. --- .../Widgets/Logic/DiplomacyLogic.cs | 17 ++++++++++++++++- .../Widgets/Logic/IngameChromeLogic.cs | 5 ++++- .../Widgets/Logic/OrderButtonsChromeLogic.cs | 9 +++++++++ mods/ra/chrome/ingame-diplomacy.yaml | 19 +++++++++++++------ 4 files changed, 42 insertions(+), 8 deletions(-) diff --git a/OpenRA.Mods.RA/Widgets/Logic/DiplomacyLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/DiplomacyLogic.cs index d4d02722df..6a3d822f15 100644 --- a/OpenRA.Mods.RA/Widgets/Logic/DiplomacyLogic.cs +++ b/OpenRA.Mods.RA/Widgets/Logic/DiplomacyLogic.cs @@ -23,13 +23,28 @@ namespace OpenRA.Mods.RA.Widgets.Logic ScrollPanelWidget diplomacyPanel; [ObjectCreator.UseCtor] - public DiplomacyLogic(Widget widget, Action onExit, World world) + public DiplomacyLogic(Widget widget, Action onExit, World world, bool transient) { this.world = world; diplomacyPanel = widget.Get("DIPLOMACY_PANEL"); LayoutPlayers(); + + var close = widget.GetOrNull("CLOSE"); + if (close != null) + { + close.OnClick = () => + { + if (transient) + { + Ui.CloseWindow(); + Ui.Root.RemoveChild(widget); + } + + onExit(); + }; + } } void LayoutPlayers() diff --git a/OpenRA.Mods.RA/Widgets/Logic/IngameChromeLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/IngameChromeLogic.cs index 36866a9be4..765dcaef7b 100644 --- a/OpenRA.Mods.RA/Widgets/Logic/IngameChromeLogic.cs +++ b/OpenRA.Mods.RA/Widgets/Logic/IngameChromeLogic.cs @@ -86,10 +86,13 @@ namespace OpenRA.Mods.RA.Widgets.Logic var playerWidgets = Game.LoadWidget(world, "PLAYER_WIDGETS", playerRoot, new WidgetArgs()); Widget diplomacy = null; - diplomacy = Game.LoadWidget(world, "DIPLOMACY", playerWidgets, new WidgetArgs + diplomacy = Game.LoadWidget(world, "INGAME_DIPLOMACY_BG", playerWidgets, new WidgetArgs { + { "transient", true }, { "onExit", () => diplomacy.Visible = false } }); + diplomacy.Visible = false; + var diplomacyButton = playerWidgets.Get("INGAME_DIPLOMACY_BUTTON"); diplomacyButton.OnClick = () => diplomacy.Visible ^= true; var validPlayers = 0; diff --git a/OpenRA.Mods.RA/Widgets/Logic/OrderButtonsChromeLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/OrderButtonsChromeLogic.cs index f91abcabfc..f9a2d17bd7 100644 --- a/OpenRA.Mods.RA/Widgets/Logic/OrderButtonsChromeLogic.cs +++ b/OpenRA.Mods.RA/Widgets/Logic/OrderButtonsChromeLogic.cs @@ -8,6 +8,7 @@ */ #endregion +using System.Linq; using OpenRA.Mods.RA.Orders; using OpenRA.Widgets; @@ -62,6 +63,14 @@ namespace OpenRA.Mods.RA.Widgets.Logic options.OnClick = () => OpenMenuPanel(options); } + var diplomacy = widget.GetOrNull("DIPLOMACY_BUTTON"); + if (diplomacy != null) + { + diplomacy.Visible = world.Players.Any(a => a != world.LocalPlayer && !a.NonCombatant); + diplomacy.IsDisabled = () => disableSystemButtons; + diplomacy.OnClick = () => OpenMenuPanel(diplomacy); + } + var debug = widget.GetOrNull("DEBUG_BUTTON"); if (debug != null) { diff --git a/mods/ra/chrome/ingame-diplomacy.yaml b/mods/ra/chrome/ingame-diplomacy.yaml index b4b6be6a39..df74221875 100644 --- a/mods/ra/chrome/ingame-diplomacy.yaml +++ b/mods/ra/chrome/ingame-diplomacy.yaml @@ -1,10 +1,9 @@ -Background@DIPLOMACY: +Background@INGAME_DIPLOMACY_BG: Logic: DiplomacyLogic - X: 25 - Y: 50 + X: (WINDOW_RIGHT - WIDTH)/2 + Y: (WINDOW_BOTTOM - HEIGHT)/2 Width: 490 - Height: 300 - Visible: false + Height: 355 Children: Label@LABEL_TITLE: X: (PARENT_RIGHT - WIDTH)/2 @@ -44,7 +43,7 @@ Background@DIPLOMACY: X: 20 Y: 67 Width: PARENT_RIGHT-40 - Height: PARENT_BOTTOM-87 + Height: PARENT_BOTTOM-87-35 ItemSpacing: 5 Children: ScrollItem@TEAM_TEMPLATE: @@ -82,3 +81,11 @@ Background@DIPLOMACY: Width: 100 Height: PARENT_BOTTOM + Button@CLOSE: + X: PARENT_RIGHT-145 + Y: PARENT_BOTTOM - 45 + Width: 120 + Height: 25 + Text: Close + Key: escape + Font: Bold \ No newline at end of file