From ca80ac2d1f8f9af29c251f6b5206d8e5d9cac3d2 Mon Sep 17 00:00:00 2001 From: Scott_NZ Date: Sun, 21 Apr 2013 18:34:48 +1200 Subject: [PATCH 1/6] Start moving towards saner RA widget logic. This switches players to observer mode after they have finished playing in RA/D2k and removes some legacy code. --- OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj | 3 +- .../Widgets/Logic/CncIngameChromeLogic.cs | 4 +- OpenRA.Mods.D2k/D2kLoadScreen.cs | 3 +- ...tGameStart.cs => LoadWidgetAtGameStart.cs} | 31 - OpenRA.Mods.RA/OpenRA.Mods.RA.csproj | 5 +- OpenRA.Mods.RA/RALoadScreen.cs | 4 - .../Widgets/Logic/IngameChromeLogic.cs | 145 ++-- .../Widgets/Logic/IngameMenuLogic.cs | 46 ++ .../Logic/IngameObserverChromeLogic.cs | 67 -- .../Widgets/LogicTickerWidget.cs | 10 +- mods/d2k/chrome/ingame.yaml | 232 ------- mods/d2k/chrome/mainmenu.yaml | 2 +- mods/d2k/maps/Brimstone.oramap | Bin 5467 -> 5589 bytes mods/d2k/maps/DeathDepths.oramap | Bin 8900 -> 8749 bytes mods/d2k/maps/DeathDepths2.oramap | Bin 9193 -> 9057 bytes mods/d2k/maps/dune_boogie.oramap | Bin 2988 -> 3034 bytes mods/d2k/maps/shellmap/map.bin | Bin 0 -> 81925 bytes mods/d2k/maps/shellmap/map.yaml | 100 +++ mods/d2k/maps/the-duell.oramap | Bin 7671 -> 7552 bytes mods/d2k/maps/tucks-sietch.oramap | Bin 4284 -> 4470 bytes mods/d2k/maps/venac-ditch.oramap | Bin 9707 -> 9621 bytes mods/d2k/mod.yaml | 5 +- mods/d2k/rules/system.yaml | 3 +- mods/ra/chrome/cheats.yaml | 2 +- mods/ra/chrome/ingame-menu.yaml | 52 ++ mods/ra/chrome/ingame-objectives.yaml | 99 +++ mods/ra/chrome/ingame-observer.yaml | 643 ------------------ mods/ra/chrome/ingame-observerstats.yaml | 488 +++++++++++++ mods/ra/chrome/ingame.yaml | 181 ++--- mods/ra/chrome/mainmenu.yaml | 2 +- mods/ra/chrome/objectives.yaml | 102 --- mods/ra/maps/desert-shellmap/map.yaml | 2 + mods/ra/maps/shellmap/map.yaml | 2 + mods/ra/mod.yaml | 5 +- mods/ra/rules/system.yaml | 3 +- 35 files changed, 951 insertions(+), 1290 deletions(-) rename OpenRA.Mods.RA/{OpenWidgetAtGameStart.cs => LoadWidgetAtGameStart.cs} (57%) create mode 100644 OpenRA.Mods.RA/Widgets/Logic/IngameMenuLogic.cs delete mode 100644 OpenRA.Mods.RA/Widgets/Logic/IngameObserverChromeLogic.cs rename {OpenRA.Mods.Cnc => OpenRA.Mods.RA}/Widgets/LogicTickerWidget.cs (68%) delete mode 100644 mods/d2k/chrome/ingame.yaml create mode 100644 mods/d2k/maps/shellmap/map.bin create mode 100644 mods/d2k/maps/shellmap/map.yaml create mode 100644 mods/ra/chrome/ingame-menu.yaml create mode 100644 mods/ra/chrome/ingame-objectives.yaml delete mode 100644 mods/ra/chrome/ingame-observer.yaml create mode 100644 mods/ra/chrome/ingame-observerstats.yaml delete mode 100644 mods/ra/chrome/objectives.yaml diff --git a/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj b/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj index dddbb9e9b7..710b030414 100644 --- a/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj +++ b/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj @@ -1,4 +1,4 @@ - + Debug @@ -92,7 +92,6 @@ - diff --git a/OpenRA.Mods.Cnc/Widgets/Logic/CncIngameChromeLogic.cs b/OpenRA.Mods.Cnc/Widgets/Logic/CncIngameChromeLogic.cs index 316e660252..915afa106b 100644 --- a/OpenRA.Mods.Cnc/Widgets/Logic/CncIngameChromeLogic.cs +++ b/OpenRA.Mods.Cnc/Widgets/Logic/CncIngameChromeLogic.cs @@ -8,10 +8,10 @@ */ #endregion -using System; using System.Drawing; -using OpenRA.Mods.RA.Orders; using OpenRA.Mods.RA.Buildings; +using OpenRA.Mods.RA.Orders; +using OpenRA.Mods.RA.Widgets; using OpenRA.Traits; using OpenRA.Widgets; diff --git a/OpenRA.Mods.D2k/D2kLoadScreen.cs b/OpenRA.Mods.D2k/D2kLoadScreen.cs index 146d1e250e..20c84cb459 100644 --- a/OpenRA.Mods.D2k/D2kLoadScreen.cs +++ b/OpenRA.Mods.D2k/D2kLoadScreen.cs @@ -84,9 +84,8 @@ namespace OpenRA.Mods.D2k } else { - Game.LoadShellMap(); Ui.ResetAll(); - Ui.OpenWindow("MAINMENU_BG"); + Game.LoadShellMap(); } } } diff --git a/OpenRA.Mods.RA/OpenWidgetAtGameStart.cs b/OpenRA.Mods.RA/LoadWidgetAtGameStart.cs similarity index 57% rename from OpenRA.Mods.RA/OpenWidgetAtGameStart.cs rename to OpenRA.Mods.RA/LoadWidgetAtGameStart.cs index d5fc347109..d284e4532d 100644 --- a/OpenRA.Mods.RA/OpenWidgetAtGameStart.cs +++ b/OpenRA.Mods.RA/LoadWidgetAtGameStart.cs @@ -10,40 +10,9 @@ using OpenRA.Traits; using OpenRA.Widgets; -using System.Collections.Generic; namespace OpenRA.Mods.RA { - // Legacy crap - public class OpenWidgetAtGameStartInfo : ITraitInfo - { - public readonly string Widget = "INGAME_ROOT"; - public readonly string ObserverWidget = null; - - public object Create(ActorInitializer init) { return new OpenWidgetAtGameStart(this); } - } - - public class OpenWidgetAtGameStart: IWorldLoaded - { - readonly OpenWidgetAtGameStartInfo Info; - public OpenWidgetAtGameStart(OpenWidgetAtGameStartInfo Info) - { - this.Info = Info; - } - - public void WorldLoaded(World world) - { - // Remove all open widgets - Ui.ResetAll(); - - if (world.LocalPlayer != null) - Game.OpenWindow(world, Info.Widget); - else if (Info.ObserverWidget != null) - Game.OpenWindow(world, Info.ObserverWidget); - } - } - - // New version public class LoadWidgetAtGameStartInfo : ITraitInfo { public readonly string Widget = null; diff --git a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj index d19315ef96..e04f5a9a77 100644 --- a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj +++ b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj @@ -267,7 +267,7 @@ - + @@ -370,6 +370,8 @@ + + @@ -378,7 +380,6 @@ - diff --git a/OpenRA.Mods.RA/RALoadScreen.cs b/OpenRA.Mods.RA/RALoadScreen.cs index d4e8184aea..71e5a25fd6 100644 --- a/OpenRA.Mods.RA/RALoadScreen.cs +++ b/OpenRA.Mods.RA/RALoadScreen.cs @@ -87,11 +87,7 @@ namespace OpenRA.Mods.RA Ui.OpenWindow(Info["InstallerMenuWidget"], args); } else - { Game.LoadShellMap(); - Ui.ResetAll(); - Ui.OpenWindow("MAINMENU_BG"); - } } } } diff --git a/OpenRA.Mods.RA/Widgets/Logic/IngameChromeLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/IngameChromeLogic.cs index cad508d877..71dc3036cb 100644 --- a/OpenRA.Mods.RA/Widgets/Logic/IngameChromeLogic.cs +++ b/OpenRA.Mods.RA/Widgets/Logic/IngameChromeLogic.cs @@ -1,6 +1,6 @@ #region Copyright & License Information /* - * Copyright 2007-2011 The OpenRA Developers (see AUTHORS) + * Copyright 2007-2013 The OpenRA Developers (see AUTHORS) * This file is part of OpenRA, which is free software. It is made * available to you under the terms of the GNU General Public License * as published by the Free Software Foundation. For more information, @@ -19,99 +19,92 @@ namespace OpenRA.Mods.RA.Widgets.Logic public class IngameChromeLogic { Widget gameRoot; + Widget playerRoot; + World world; [ObjectCreator.UseCtor] public IngameChromeLogic(World world) { - var r = Ui.Root; - gameRoot = r.Get("INGAME_ROOT"); - var optionsBG = gameRoot.Get("INGAME_OPTIONS_BG"); + this.world = world; + gameRoot = Ui.Root.Get("INGAME_ROOT"); + playerRoot = gameRoot.Get("PLAYER_ROOT"); - // TODO: RA's broken UI wiring makes it unreasonably difficult to - // cache and restore the previous pause state, so opening/closing - // the menu in a paused singleplayer game will un-pause the game. - r.Get("INGAME_OPTIONS_BUTTON").OnClick = () => + InitRootWidgets(); + if (world.LocalPlayer == null) + InitObserverWidgets(); + else + InitPlayerWidgets(); + } + + void InitRootWidgets() + { + Widget optionsBG = null; + optionsBG = Game.LoadWidget(world, "INGAME_OPTIONS_BG", Ui.Root, new WidgetArgs { - optionsBG.Visible = !optionsBG.Visible; + { "onExit", () => + { + if (world.LobbyInfo.IsSinglePlayer) + world.IssueOrder(Order.PauseGame(false)); + optionsBG.Visible = false; + } + } + }); + + gameRoot.Get("INGAME_OPTIONS_BUTTON").OnClick = () => + { + optionsBG.Visible ^= true; if (world.LobbyInfo.IsSinglePlayer) - world.IssueOrder(Order.PauseGame(true)); + world.IssueOrder(Order.PauseGame(optionsBG.Visible)); }; - - var cheatsButton = gameRoot.Get("CHEATS_BUTTON"); - cheatsButton.OnClick = () => + + Game.LoadWidget(world, "CHAT_PANEL", gameRoot, new WidgetArgs()); + } + + void InitObserverWidgets() + { + 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; + } + + void InitPlayerWidgets() + { + var playerWidgets = Game.LoadWidget(world, "PLAYER_WIDGETS", playerRoot, new WidgetArgs()); + + Widget cheats = null; + cheats = Game.LoadWidget(world, "CHEATS_PANEL", playerWidgets, new WidgetArgs { - Game.OpenWindow("CHEATS_PANEL", new WidgetArgs() {{"onExit", () => {} }}); - }; - cheatsButton.IsVisible = () => world.LocalPlayer != null && world.LobbyInfo.GlobalSettings.AllowCheats; + { "onExit", () => cheats.Visible = false } + }); + var cheatsButton = playerWidgets.Get("CHEATS_BUTTON"); + cheatsButton.OnClick = () => cheats.Visible ^= true; + cheatsButton.IsVisible = () => world.LobbyInfo.GlobalSettings.AllowCheats; var iop = world.WorldActor.TraitsImplementing().FirstOrDefault(); if (iop != null && iop.ObjectivesPanel != null) { - var objectivesButton = gameRoot.Get("OBJECTIVES_BUTTON"); - var objectivesWidget = Game.LoadWidget(world, iop.ObjectivesPanel, Ui.Root, new WidgetArgs()); - objectivesWidget.Visible = false; - objectivesButton.OnClick += () => objectivesWidget.Visible = !objectivesWidget.Visible; - objectivesButton.IsVisible = () => world.LocalPlayer != null; + var objectivesButton = playerWidgets.Get("OBJECTIVES_BUTTON"); + var objectivesWidget = Game.LoadWidget(world, iop.ObjectivesPanel, playerWidgets, new WidgetArgs()); + objectivesButton.Visible = true; + objectivesButton.OnClick += () => objectivesWidget.Visible ^= true; } - var moneybin = gameRoot.Get("INGAME_MONEY_BIN"); - moneybin.Get("SELL").GetKey = _ => Game.Settings.Keys.SellKey; - moneybin.Get("POWER_DOWN").GetKey = _ => Game.Settings.Keys.PowerDownKey; - moneybin.Get("REPAIR").GetKey = _ => Game.Settings.Keys.RepairKey; + var moneyBin = playerWidgets.Get("INGAME_MONEY_BIN"); + moneyBin.Get("SELL").GetKey = _ => Game.Settings.Keys.SellKey; + moneyBin.Get("POWER_DOWN").GetKey = _ => Game.Settings.Keys.PowerDownKey; + moneyBin.Get("REPAIR").GetKey = _ => Game.Settings.Keys.RepairKey; - var chatPanel = Game.LoadWidget(world, "CHAT_PANEL", Ui.Root, new WidgetArgs()); - gameRoot.AddChild(chatPanel); - - optionsBG.Get("DISCONNECT").OnClick = () => LeaveGame(optionsBG, world); - optionsBG.Get("SETTINGS").OnClick = () => Ui.OpenWindow("SETTINGS_MENU"); - optionsBG.Get("MUSIC").OnClick = () => Ui.OpenWindow("MUSIC_MENU"); - optionsBG.Get("RESUME").OnClick = () => + var winLossWatcher = playerWidgets.Get("WIN_LOSS_WATCHER"); + winLossWatcher.OnTick = () => { - optionsBG.Visible = false; - if (world.LobbyInfo.IsSinglePlayer) - world.IssueOrder(Order.PauseGame(false)); + if (world.LocalPlayer.WinState != WinState.Undefined) + Game.RunAfterTick(() => + { + playerRoot.RemoveChildren(); + InitObserverWidgets(); + }); }; - - optionsBG.Get("SURRENDER").OnClick = () => - { - optionsBG.Visible = false; - world.IssueOrder(new Order("Surrender", world.LocalPlayer.PlayerActor, false)); - }; - - optionsBG.Get("SURRENDER").IsVisible = () => (world.LocalPlayer != null && world.LocalPlayer.WinState == WinState.Undefined); - - var postgameBG = gameRoot.Get("POSTGAME_BG"); - var postgameText = postgameBG.Get("TEXT"); - var postGameObserve = postgameBG.Get("POSTGAME_OBSERVE"); - - var postgameQuit = postgameBG.Get("POSTGAME_QUIT"); - postgameQuit.OnClick = () => LeaveGame(postgameQuit, world); - - postGameObserve.OnClick = () => postgameQuit.Visible = false; - postGameObserve.IsVisible = () => world.LocalPlayer.WinState != WinState.Won; - - postgameBG.IsVisible = () => - { - return postgameQuit.Visible && world.LocalPlayer != null && world.LocalPlayer.WinState != WinState.Undefined; - }; - - - postgameText.GetText = () => - { - var state = world.LocalPlayer.WinState; - return state == WinState.Undefined ? "" : - (state == WinState.Lost ? "YOU ARE DEFEATED" : "YOU ARE VICTORIOUS"); - }; - } - - void LeaveGame(Widget pane, World world) - { - Sound.PlayNotification(null, "Speech", "Leave", world.LocalPlayer.Country.Race); - pane.Visible = false; - Game.Disconnect(); - Game.LoadShellMap(); - Ui.CloseWindow(); - Ui.OpenWindow("MAINMENU_BG"); } } } diff --git a/OpenRA.Mods.RA/Widgets/Logic/IngameMenuLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/IngameMenuLogic.cs new file mode 100644 index 0000000000..b3593625ea --- /dev/null +++ b/OpenRA.Mods.RA/Widgets/Logic/IngameMenuLogic.cs @@ -0,0 +1,46 @@ +#region Copyright & License Information +/* + * Copyright 2007-2013 The OpenRA Developers (see AUTHORS) + * This file is part of OpenRA, which is free software. It is made + * available to you under the terms of the GNU General Public License + * as published by the Free Software Foundation. For more information, + * see COPYING. + */ +#endregion + +using System; +using OpenRA.Widgets; + +namespace OpenRA.Mods.RA.Widgets.Logic +{ + class IngameMenuLogic + { + [ObjectCreator.UseCtor] + public IngameMenuLogic(Widget widget, World world, Action onExit) + { + widget.Get("DISCONNECT").OnClick = () => + { + onExit(); + LeaveGame(widget, world, onExit); + }; + widget.Get("SETTINGS").OnClick = () => Ui.OpenWindow("SETTINGS_MENU"); + widget.Get("MUSIC").OnClick = () => Ui.OpenWindow("MUSIC_MENU"); + widget.Get("RESUME").OnClick = () => onExit(); + + widget.Get("SURRENDER").OnClick = () => + { + world.IssueOrder(new Order("Surrender", world.LocalPlayer.PlayerActor, false)); + onExit(); + }; + widget.Get("SURRENDER").IsVisible = () => world.LocalPlayer != null && world.LocalPlayer.WinState == WinState.Undefined; + } + + void LeaveGame(Widget widget, World world, Action onExit) + { + Sound.PlayNotification(null, "Speech", "Leave", world.LocalPlayer.Country.Race); + Game.Disconnect(); + Ui.CloseWindow(); + Game.LoadShellMap(); + } + } +} diff --git a/OpenRA.Mods.RA/Widgets/Logic/IngameObserverChromeLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/IngameObserverChromeLogic.cs deleted file mode 100644 index 7f68806f2a..0000000000 --- a/OpenRA.Mods.RA/Widgets/Logic/IngameObserverChromeLogic.cs +++ /dev/null @@ -1,67 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2011 The OpenRA Developers (see AUTHORS) - * This file is part of OpenRA, which is free software. It is made - * available to you under the terms of the GNU General Public License - * as published by the Free Software Foundation. For more information, - * see COPYING. - */ -#endregion - -using OpenRA.Traits; -using OpenRA.Widgets; -using OpenRA.Network; -using System; -using System.Drawing; -using System.Linq; - -namespace OpenRA.Mods.RA.Widgets.Logic -{ - public class IngameObserverChromeLogic - { - Widget gameRoot; - - // WTF duplication - [ObjectCreator.UseCtor] - public IngameObserverChromeLogic(World world) - { - var r = Ui.Root; - gameRoot = r.Get("OBSERVER_ROOT"); - var optionsBG = gameRoot.Get("INGAME_OPTIONS_BG"); - - r.Get("INGAME_OPTIONS_BUTTON").OnClick = () => - { - optionsBG.Visible = !optionsBG.Visible; - if (world.LobbyInfo.IsSinglePlayer) - world.IssueOrder(Order.PauseGame(true)); - }; - - optionsBG.Get("DISCONNECT").OnClick = () => - { - optionsBG.Visible = false; - Game.Disconnect(); - Game.LoadShellMap(); - Ui.CloseWindow(); - Ui.OpenWindow("MAINMENU_BG"); - }; - - optionsBG.Get("SETTINGS").OnClick = () => Ui.OpenWindow("SETTINGS_MENU"); - optionsBG.Get("MUSIC").OnClick = () => Ui.OpenWindow("MUSIC_MENU"); - optionsBG.Get("RESUME").OnClick = () => - { - optionsBG.Visible = false; - if (world.LobbyInfo.IsSinglePlayer) - world.IssueOrder(Order.PauseGame(false)); - }; - optionsBG.Get("SURRENDER").IsVisible = () => false; - - Ui.Root.Get("INGAME_STATS_BUTTON").OnClick = () => gameRoot.Get("OBSERVER_STATS").Visible ^= true; - - if (!world.IsShellmap) - { - var chatPanel = Game.LoadWidget(world, "CHAT_PANEL", Ui.Root, new WidgetArgs()); - gameRoot.AddChild(chatPanel); - } - } - } -} diff --git a/OpenRA.Mods.Cnc/Widgets/LogicTickerWidget.cs b/OpenRA.Mods.RA/Widgets/LogicTickerWidget.cs similarity index 68% rename from OpenRA.Mods.Cnc/Widgets/LogicTickerWidget.cs rename to OpenRA.Mods.RA/Widgets/LogicTickerWidget.cs index 5aad99107f..1bc7637581 100644 --- a/OpenRA.Mods.Cnc/Widgets/LogicTickerWidget.cs +++ b/OpenRA.Mods.RA/Widgets/LogicTickerWidget.cs @@ -1,6 +1,6 @@ -#region Copyright & License Information +#region Copyright & License Information /* - * Copyright 2007-2011 The OpenRA Developers (see AUTHORS) + * Copyright 2007-2013 The OpenRA Developers (see AUTHORS) * This file is part of OpenRA, which is free software. It is made * available to you under the terms of the GNU General Public License * as published by the Free Software Foundation. For more information, @@ -11,11 +11,11 @@ using System; using OpenRA.Widgets; -namespace OpenRA.Mods.Cnc.Widgets +namespace OpenRA.Mods.RA.Widgets { public class LogicTickerWidget : Widget { - public Action OnTick = () => {}; + public Action OnTick = () => { }; public override void Tick() { OnTick(); } } -} \ No newline at end of file +} diff --git a/mods/d2k/chrome/ingame.yaml b/mods/d2k/chrome/ingame.yaml deleted file mode 100644 index 00f3ca76f1..0000000000 --- a/mods/d2k/chrome/ingame.yaml +++ /dev/null @@ -1,232 +0,0 @@ -Container@INGAME_ROOT: - Logic:IngameChromeLogic - Children: - WorldInteractionController@INTERACTION_CONTROLLER: - X:0 - Y:0 - Width:WINDOW_RIGHT - Height:WINDOW_BOTTOM - ViewportScrollController: - X:0 - Y:0 - Width:WINDOW_RIGHT - Height:WINDOW_BOTTOM - WorldCommand: - X:0 - Y:0 - Width:WINDOW_RIGHT - Height:WINDOW_BOTTOM - Timer@GAME_TIMER: - X: WINDOW_RIGHT/2 - Y: 0-10 - StrategicProgress@STRATEGIC_PROGRESS: - X: WINDOW_RIGHT/2 - Y: 40 - Background@POSTGAME_BG: - X:(WINDOW_RIGHT - WIDTH)/2 - Y:(WINDOW_BOTTOM - HEIGHT)/2 - Width:400 - Height:100 - Background:dialog4 - Visible:false - Children: - Label@TEXT: - X:(PARENT_RIGHT - WIDTH)/2 - Y:0 - Width:200 - Height:80 - Align:Center - Button@POSTGAME_OBSERVE: - X:10 - Y:(PARENT_BOTTOM - HEIGHT - 10) - Width:150 - Height:25 - Font:Bold - Text:Observe - Button@POSTGAME_QUIT: - X:(PARENT_RIGHT - WIDTH - 10) - Y:(PARENT_BOTTOM - HEIGHT - 10) - Width:150 - Height:25 - Font:Bold - Text:Leave - SupportPowerBin@INGAME_POWERS_BIN: - X:0 - Y:25 - ReadyText: READY - HoldText: ON HOLD - BuildPalette@INGAME_BUILD_PALETTE: - X:WINDOW_RIGHT - 250 - Y:280 - Width:250 - Height:500 - ReadyText: READY - HoldText: ON HOLD - RequiresText: Requires - IconWidth: 60 - IconHeight: 47 - Button@INGAME_OPTIONS_BUTTON: - X:0 - Y:0 - Width:160 - Height:25 - Text:Options (ESC) - Font:Bold - Key: escape - Button@INGAME_DIPLOMACY_BUTTON: - X:162 - Y:0 - Width:160 - Height:25 - Text:Diplomacy (F1) - Font:Bold - Key: f1 - Button@CHEATS_BUTTON: - X:324 - Y:0 - Width:160 - Height:25 - Text:Cheats (F2) - Visible:false - Font:Bold - Key: f2 - Button@OBJECTIVES_BUTTON: - X:486 - Y:0 - Width:160 - Height:25 - Text:Objectives (F3) - Visible:false - Font:Bold - Key: f3 - RadarBin@INGAME_RADAR_BIN: - WorldInteractionController:INTERACTION_CONTROLLER - PowerBin@INGAME_POWER_BIN: - MoneyBin@INGAME_MONEY_BIN: - X:WINDOW_RIGHT - WIDTH - Y:0 - Width:320 - Height: 32 - Children: - OrderButton@SELL: - Logic:OrderButtonsChromeLogic - X:3 - Y:0 - Width:30 - Height:30 - Image:sell - Description:Sell - LongDesc:Sell buildings, reclaiming a \nproportion of their build cost - OrderButton@POWER_DOWN: - Logic:OrderButtonsChromeLogic - X:39 - Y:0 - Width:30 - Height:30 - Image:power - Description:Powerdown - LongDesc:Disable unneeded structures so their \npower can be used elsewhere - OrderButton@REPAIR: - Logic:OrderButtonsChromeLogic - X:75 - Y:0 - Width:30 - Height:30 - Image:repair - Description:Repair - LongDesc:Repair damaged buildings - WorldTooltip: - Background@INGAME_OPTIONS_BG: - X:(WINDOW_RIGHT - WIDTH)/2 - Y:(WINDOW_BOTTOM - HEIGHT)/2 - Width:300 - Height:295 - Visible:false - Children: - Label@LABEL_TITLE: - X:(PARENT_RIGHT - WIDTH)/2 - Y:20 - Width:250 - Height:25 - Text:Options - Align:Center - Font:Bold - Button@RESUME: - X:(PARENT_RIGHT - WIDTH)/2 - Y:60 - Width:160 - Height:25 - Text:Resume - Font:Bold - Key:escape - Button@SETTINGS: - X:(PARENT_RIGHT - WIDTH)/2 - Y:100 - Width:160 - Height:25 - Text:Settings - Font:Bold - Button@MUSIC: - X:(PARENT_RIGHT - WIDTH)/2 - Y:140 - Width:160 - Height:25 - Text:Music - Font:Bold - Button@SURRENDER: - X:(PARENT_RIGHT - WIDTH)/2 - Y:180 - Width:160 - Height:25 - Text:Surrender - Font:Bold - Button@DISCONNECT: - X:(PARENT_RIGHT - WIDTH)/2 - Y:220 - Width:160 - Height:25 - Text:Abort Mission - Font:Bold - Background@DIPLOMACY_BG: - Logic:DiplomacyLogic - X:(WINDOW_RIGHT - WIDTH)/2 - Y:(WINDOW_BOTTOM - HEIGHT)/2 - Width:450 - Height:400 - Visible:false - Children: - Label@LABEL_TITLE: - X:(PARENT_RIGHT - WIDTH)/2 - Y:20 - Width:250 - Height:25 - Text:Diplomacy - Align:Center - Font:Bold - Button@CLOSE_DIPLOMACY: - X:(PARENT_RIGHT - WIDTH)/2 - Y:350 - Width:160 - Height:25 - Text:Close - Font:Bold - Key:escape - Background@PERF_BG: - ClickThrough:true - Background:dialog4 - Logic:PerfDebugLogic - X:10 - Y:WINDOW_BOTTOM - 250 - Width: 210 - Height: 250 - Children: - PerfGraph@GRAPH: - X:5 - Y:5 - Width:200 - Height:200 - Label@TEXT: - X:20 - Y:205 - Width:170 - Height:40 \ No newline at end of file diff --git a/mods/d2k/chrome/mainmenu.yaml b/mods/d2k/chrome/mainmenu.yaml index a0ba0d41e1..240b7bf962 100644 --- a/mods/d2k/chrome/mainmenu.yaml +++ b/mods/d2k/chrome/mainmenu.yaml @@ -1,4 +1,4 @@ -Background@MAINMENU_BG: +Background@MAINMENU: X:(WINDOW_RIGHT - WIDTH)/2 Y:(WINDOW_BOTTOM - HEIGHT)/2 Width:250 diff --git a/mods/d2k/maps/Brimstone.oramap b/mods/d2k/maps/Brimstone.oramap index 5a8833a1568f4f763eda7c41f87f1dcbf93d8398..d622b7861746421bd26bd3e4732ca250d941676f 100644 GIT binary patch literal 5589 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 literal 5467 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 WZ>yn#i1be$?(fs|*Je`x`}!X#2Qvl$ literal 9193 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 N`Hp{UA_ZsO%N@z-?OP7Qqy-E=jA`nUdk%$xt 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 diff --git a/mods/d2k/maps/shellmap/map.bin b/mods/d2k/maps/shellmap/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..14177c35fead36c9840d6ece087f9813acd15527 GIT binary patch literal 81925 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 T5$W&r@PA6vpZJyhZ|lDRA$uGv literal 7671 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 diff --git a/mods/d2k/maps/venac-ditch.oramap b/mods/d2k/maps/venac-ditch.oramap index b8bd7a743598fc754fab1b07f64f2bf80e6c9df6..f9b91fde979127b93537afe85ac341d87136b2b3 100644 GIT binary patch literal 9621 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 literal 9707 zcmbt)Wl&t*wk^;=6C{m0H119a-gtl@!7U`XOR(T>jng;@K|>%oK^qA)?j91PfyN=Y z1cyAnb57m5Rqx(PYTx-o5YiOwfFiFwS&~VUvGw|d@ccFseOlW9W zZ!pk+k69NBH$F=T*Mm1p$+WW>GTR1!1`;$dSP11KWmIvD*+X4?Rbq^Yjcg)F0(hM6 zW#M#&dyaghFxA&$S*!W*z3jrq+g zHfMXOGO1|J0IiugKBp3m*e1MX;pLc zPv9h}xsy{POQE1EB^7VLVf48{=<6<1kehTi9ggH=u*MMv9B)+OD%31Y(bST9XB=nj8A4B-&AE3%;8l z9k>OHLD!8NRRx2|&4s}M2fxPOg!;@bKo9Jp^GOb~cpZRK;+Y*A3Ti2Ct=hie9Nh9b zLq1a|ylLVO6=Fix1AroUV7{9t@WejGFSbLUkbjxXkM=fngAU=t(1PzP9&jJ#w+XNu z*6rva@DvNUo1KdXV_c=uv}DaE!RZcuA*uh)C3cTBf_I2Z^T@o<>+v+2Wm4o8V7)S% zZ(H!pe_b8^lmR@<&ts~^jvEWu6)Gf0F?*WLGX>#oXM)Ht!dL-^wHJlmi}YTB2>zCo z0IE~|yKpez0dD{50^kam+tO3~Js|($N$Y(qepxMJS;+8r4+>Ouc9;qEy;a9vv>%1e zYL2gY3JB+nKruqR)dvlUj{Qw1l#cvu^xeqnK1R^b#KG_FW7W*E0|MW8~PDn2LW*+KYBYRi&>(%yrEbnz04m!#Dv1B?8RP)drw0O=xR4^FQX-a zg(fJDlSfbrEU*p;#z>V!KjQJnr7A??xLHN`F?&vp)x@7by4_LUp^IICG{-rtBZMMY zo2A~5MJsPY4&z7fz*N;PA_Nj!d_>4>8o84oG|V3`uCm@^F6qV}xMm-~40OAbu>SeR zGOE3NkH3$Nl|h7fW);ls5c523KJF_bxMYUBYz*#zh9K;w)U9 zM`oirx7xIkr5v<(#7A~iuls>WS7wZzee^lN(A&`OeM5FHuclZR+sNE1ZcVa7;uLq5 zuPIUML@T2{=wG^Nsg>_A4=7y&o8T6f7tKG zjt+TZ3qsMWTw)wXHSln?A3c_e@+re_oZ*zgq3KSeb-zo=U#ND#P;9xF{4sh+_zmGl#c2+4Yu!|zO#>2Pa&bL zy;`N1zaf{w46_tk2V`Dp?fw@rbt3{E>H9=7%gv%ufj?5h;^R`z-{ZA7*_ z$A_qW_CvWg0KpzJIXXEV!KYF&RCR!qJEX?=2HRQEL=_Bp;9^UYTCp8ahVGgvsXqz1s?T za+0IM*};v*-v0Cbu`nKh;iQr5f?DUK!j8qX@{W~d4Ls3Lb%k#$#bIJG^UmjBVgfzS zDQobKc5Pdr<>|46N~Tbw8wM&8-fK-zY*rwaG~IU|uOZb@zbtmlnLf_c>;XbZYnDBI zWkDzBi7BaEdvqN-VSYL)aMa(`CxoiAQhF5wyhLGzQXtNq38NfVlyrBU&}v$Ip))r7 z8e$=vm64vhbMjG~OTAAJBx}TJBCz1FHL;fzzqT83K;lou!0rO^SYiRk`PsKA0cc0= zoMVifl|4@PUZkdTBhC1>^WTd2dm{plF;IB0^GThe8ReOQai`FlYtge@Dd{?`{h1x> zKv_g_Vjv|vmLZ*i74a)K4RK*B!+L7c7%2PUXUTrpIrF91%LHV-mpvu~jNl`ADNw$f6zj4$ArK*bqGypz@=4*puteKfz0I@dsmGWvOrw;o-+OnFt9Da^_B z9N_F)^6iTcM^;byFyT51@bH9~7<(IiJi?C(WrOmLkNSoF7I-F690p+woKKXSpa+&( z>u<&3s}-3mLZVE@i@(m{!&^S|^94X}G?(0|2#6b4@W%mp&+8?_N~zqfnjg-z!b^$hEE2D#}@z>kd08GSJQCYkCh7vv#PoaPTF}#-522dcwGzZFuNP{c*bZkvp`;7DK10F4Rcwm}u=E z;tAj#v~wN{eA>xu(gp0(YT~Lw0haM%Uk&y!AHKdM`F&IH%S|cOBRdC8)W(71`Fb-N zGWB~XxRQ#6_oY54YZIb}QegaIoF7z#=c3#I)aj_?((xT3I3q7EA`8?yan=pgHYF1F zze8`wN@XY9>AJZ>6-SX0|6NrjR%BA>nrGjNVDUS*kt?nR9SGbC1mPX? zsw{^m*<-!RQ}$h+vMSU#i88`wrBEf47^PW@J$cXIIU6B`m7@59Ne|sZxSK-LmPPEA zM-~zsQ_Ew~k4U z4s^VXs-WNC^k&*ul;W*J{+o~QV^At{UwC{V0$51u+77(R6M+11@O%Ec;ZFc!1+e`U z?@foxOU;{){7`MWl~;4|Ccn1qbxNE$*awwAjbF8Z4-lvIn=3Y@U@iHl4uBR8wkwnb zuftU4QSa8B_i#oHqI^^goVq3i4fB0Ut*pG=b1Y<|Ag=vZ{YI>N-N=69DT{qS6uJBB zw2Np>uz{JAqHl10vWRyjHg~((W|O;?OL!bw5a7m;Cra@yKiWu6GL>w-x3CwEvi=`qAh zV=+!f#ZBSx@Lk-CXm8i#xK5kT!^(qfzY{=70_krVTo`74c$qz}iGt6PGx(ect5f9) zM#+HLBvnnOlG5{kDl~QEVtuXren%TO>f%mvOSf%YnH$vBr`kM>%OPx?q=K z$d)&Uv!=;FM)0>tcqHd$E9k`)p+koFEGi$i%0+{TtEnp6UQ6ZhbVEj)J`P6>kDj4b~D~L)I?j93`VHq(;Ou^+M-XBKfoA%dbCudejs20Bs{)+gM-e=K$yK;YBQZR#bz z$orB0xKd`#XzI-=n^5id{IM)n+lh80w8mC62%Q{FH5McM$%9;?d$X=PW86htH00qi ztY9F0i)monQt{JyI*H?7aDzFhTxK1YGH(JPjWLTvLtQb{-uTm@YfHbff7(aeH%vOh zklr&`9>^$dGl?2^fhdalF9-7i?kz(5MQQoy7##0g)|2OP_&zkW*%Qg2Q?TZCC! zC`-mTk1V;a1bQ``JF9P&m8gA$kpqV^cpOd3Fj43qMVB=e%D&|H`$uK{8k7i zt6#G@BqkX2q3j~md@0NSi>wygP$)H?QSX3`opFePlIDT@jloN);XZ1)d#8fLdOg3r zQ|(xF-7MBfinLf22;w(`c5HVBe*4fIr#9B_560yxO8yW5D&nK{Q&9u*59z+?@gm_j zS*QrLjAlNw++nWL#yHSGpEVP6d{L)4B%Opb?F*(IFNZ+cLP036!c zF0gg(t6BB4_h`~!3=%=jqx_~wkiv8I_<3N*O)42jAnqWA=sC5=Uto3k?B$Yn?RA4w z91hJN0M0GL!JO~4z!^4+$w0yhI#;>^laz{15wx9T&-KNJozM4R`>r>&dk&-?fA2ol zi!0vu4az#?l3WRpKRoQ8SzJYueqi_mSj1I*Qg4!d(d|@zEueBP*AyB~j#ToICa_d* z2?^GBlR%23QakX=Ih?nS zK?Co@Y#6;QiT115XMZI<;GHP&#;12RayZjku?!JGS~Jp7tn3*258*hnFA8G4(sMLv zUH3&4i;Xoi@ay)VlTUTkxIPl{*jhp<5ymsvQCrsyS_|}g&GS5772BP@f6~?fB)NR$ zmbzw68D1=d9XJqzM9l*S1dvCf1`)U^zec#ms6MEr@;ZgQ1S?`ct|9nwUmyH!J;Y|N zAQZDmsF;fv*Uoj;rT?w0rZM=IbDpAW>D0?{f@JR4Ds#+`sU7TY(hyo#!4iy+G9`#v5^7I{z@Rsn+4|Gh+;#SnRqC zHvOdphdc80@?d9nfAye;(F)7T6BWKJNYtN($Dlvk% zdMA2%cF2!rdQ8K8k9Gq5M&F$si)i$liw~us=!C#{vD%MqG|yYmTHe&~n3IplQ!_iL=(3xJ%_Z1a(U$z1^({ z+vdd)@OU;F_GKaB3}9^Jt+mo&?h|jiw_S|U@z4us3143 zqy)q4YgO@YUG5LZrkyY^!e|LR8B970aIwCvz3mOKO022mJM@gl`h6j5^)el|j?Exq zc0=3ZdE8yf8HO7`$Xu9j&CxygWc$r@Ssv#yGA7d3Jp zx)RxC;pxl~jCb`~g%9xdqOZ)pjN8#e9H{g!u1SyJ7HIZ2C!%4p&iDE7Y)97?5?v+;Jy(^bGMfJ4M zHz0H8S7vtkAUzHqGoP2(Kl3|>N(uRxkjs_&ZN1R0Jx(hvO>F}gv1{6e)#eI$WZSnr zjw610GPz`mTC6~~sP3D+r}M!H4K1QJMb_h85-CAiEt@~SUd@5Jpl&^?sp%7p5TC@K znl}**$e&d4Q8P?#7uV)H?OUNBJERH+jjEr@0y0NPJKfV47ggpSuqXt^@%R_6@QWh5 zif$lWF0de?0j4=R)Zx8*zI?%nTL-X1n~;4uuhPvGq&LVif2B^-)Kxu{Ka)l?f>oI3Nu1fS{`F`tG#wbkf5w)@-=3A#S{ z+#cI((=CJ$Vi}nv3q&M<(j@reXbJ6VvmAY>(}!2B1@Tk%!ar~CCUC!QL;V4Oqb4zg zv{0|=y7DpBKdlQHy(}J?9JxYeGbBg&wa$b2!4kS7!0k{LV07N9%J6Ej*^0(b*=oFp z1~(#+iXi1}zy}=F=mxrnaEy>tf(KH{J+?}l+VmYBg_YC7Kw9;lF~Oq6kzWzw$G`R$ z?dc`8vah><5d0MG_CbS5y#6{12f>YJ@ex&>Y2G_SsWv-Tbp6CXL7(Y?p4|iryw6Ch zlg=~kd9gF(i~ROwEmD~au$R)_s!m@gSaa`Sb;@6nS!!fq^!60wA)q_a?zyFhk^&7t1iNV5O^bH9jQ*I33Lt5aZ-BMx>z^W3&K1f=b=>j z*rT+3Cy*bPBG^3B-Vj-kjrm8}(K8^0GEBZ|HT{t^Zd9uv(idv2J>nv);68VYqbW!G z^=%bNFNKb(yi#htBPdK;moOC@!j1K~$#r1FO2szzLg@#xrxHc|ZncbU*y3A_9CO5x zDBhH04%%`do=FBgh71-x7V(O_M&H4f?A21VfD^l^083A)(t3^FgU{9t*G=3^n-uioCx0C<*WkE| z4u3{0eT!*UlQdKXG(`=j`qJmjCte&+{8$3=>Om@6eCfZ9uO2m`z*KzHjVD3gRbvM+{|dTBNmWq8~FpjEAR81`t-7E8f{QzwxfCDQ3&ZPS8u}y@?n3 zc>(v}ig7~j-XMuoW+lBl{oX>y}Ms60^r3!DAs(WLHOc@i3gin}rE zH0_h$4vC-%0ti7@oD3D49J7D5;qyxAmF}8ZDQyXz4i~IqDgBI5=F;>Kr#VjoL%*Y3 zhos@O*#fIL5L4jKZyx9evSJq=6G3%^jDl(^#XXH{~GF2~sL`~6j-E0`ViXQ0AN_i-8l7lX)r0-ziB zM8dKQSX?bIZ;K>{XvM7RaGOm$7ni|xBTWUOgGY5q{4&xOuqMzyjX>IDxGdd5ajq#i z8LdBen0nBB|3&R>uEUihoVXcLxa-Z9(-~c_SN`$2lk8dxmNlU?XfXVm1EpPC>2|X! zhH$@h_Nh;neU$e`Ad+PrfGC+YXEm5hL57eQP$~E6iqql6InbW|>w1KmO+7yc7~kcc z-OsNgc4g0qKIj|AG|8V!QGz{8*3CJm#BuMH1*M<*BBd9tATVNI8k9?ZEOAJ0Y{eL4 z5s_;c2qb7k>q7r1l9Tj8x^Gn-6Px-yCwVr$G>%v~%M(2zt8%HSqW2x0o)LRZ$L}H( zDASaQzsMJsYCqw*PixhvO@fF;Zm-J?z5ga3_RUu2eal+;uBr}ossYAGBz8&Bf%^%OSa zh|z4aD@?VwCD#zdWfwKjiOFA%;){wFzK;F_=Su^x2!G|CM7qql#i*+5`axc&=mnXHAENp~02o z{As9`BxQITOt7vHI6_TMTvs2?;vQsV;#yhMc}7D!nBe_sf(A3FBQE7Q*A*NBS`Dxl zTWauw6{sk#H1ech<|_tHzw%8>EF0F zt$tFsjrK5rm8SQ+*2`K6j-RXiqZt-=@H*xiaWxrDR>{efl@(17q!jLGM&`~fBz}Rb z@IF0IDx^J)%ezt?r=0*wVV8|6r<_YHIrqa41yVn^fU#rGMbhPWh($*k2lvVQC^SsU z7l>WmSev(Vy9#`No{L>&D`Th$*t94a*#lQi9@jf2i8~z=A^& zj;$9G4b9oeMk@l(={q;0Q-*^z0Jca}YG#3OZd->ck5)zmVMOZeUy)YbB@8$gu>?h% zs>8H@oMxeL;3SDAmT`;I0P~@ft|cvDiV(+|36mjddN_v=x*4YLR2wCgSpw$p-Eqs@ z9}~U(5xJ6~7}x&1ck7Wf&ao+52cvzo%7q9B}88K(CRkw>tulG_WV+VsIU>b0CU zBozT1nb&2%irV?16PYYUIVpMsana> zpXxyFKnU=Xz@wyn8?|hRRwFyDyl?e#V%o3;A9==@zf2ZMrfyK@9kT_a>6CRp!b-A- zr*;Q-CF?bXE@X)~4}GrxtBG-_JeMps{lMah0N#D38S+D%^+hcQHLw*aOiceWr@GRn zRX@UA!!6;StB}$DlJ~s*G8{$_A*Gr^i7tvXsb}+x)qU9StipLc<=mHkQLXLQ5==YR zOQUgwYx2^Fd+M*T%PG`Bm&QP4USKedG?vJ%Cn@SidP4lXWO~S;x60mls_?s$-dnE! z`6&B;Jm3ERN{-?SoUSyqbLXxm`WnuNn)UgJ=bY`y05wIj+!OKhI_TU+48vxOCR0b7IiKl=hSrK8g#A6Dk$l-yn% ziG3>bk&-+jwu4cKdDbsJ4HC>PXQEH$=&$l@kDj^CP0yda&TYt=oYy~?d9Jya;aXbP zD{d~#6~I22=kehC8FDG*CVD5s<-dnI(|wPE*Pw3+Zq|atrGZY z#ra~F@1sm+vQ_YV@0{DVp>IANyypu6Jz93&k=K1G^YK=2j5BNK0Nppv0CpOgy?xD0 zhhek-_ze1>*4d#C9iJo`dD)k2~(?LtAKt)POp)Hzt2N=h!e z%Eip9k7fRAud@*vG!Wd6OJKH8E z(;rJY?E7h6mnVtKL(a>sk?uVnJ$;Z7zXdZ7=DIAg=CgR3V}A2KaW;w0_1x9#r1+Yp z&Z3(D=B>BezBlWhN=x`o&BOg}MuL8gg<58%A59C%<&6V**X#T)N#lkV1p68$jvBvf z&Wxm0!y; zEp9ttVT-~pF!+m2c2WTGFY%t4-6{)5t~+=&RexCn?#za^Tdr{B|7PR(f0nta+MSHn zf7w)uQw`?=HlZ5J3%S|AIe~92DHXfHSJdXrZSax9RU7|9$XMk?l=NAF;e7~MtBM3nw~wh zP17~U+i(3f?7sOe32RTHw%AKdej8raxKpL&LG-3;q1JO7lex4TVLk}FNx)5+nl`3_z;Y&0^r%ra05uv_yzlYO^b zmJk-QbF!ZksTrCB-79QlVp{~!$vEG!u%{3F1a3+nJ~V5rsIM|-)oxX{)|tL$1i$-I zyCqhdI`ZQEk)7rtR5cG`_^n2b?91xJG2cdqbR7j|6*vVp<@W6{qH`i#~S@_ z*MD49|A1uv1Ny(Kn&m$LhR0a?Xvz8q^iPfBqWzOWLqkWSM4M^7wv+fahMwv Date: Sun, 21 Apr 2013 21:29:50 +1200 Subject: [PATCH 2/6] Fix NRE when leaving game through menu after observing --- OpenRA.Mods.RA/Widgets/Logic/IngameMenuLogic.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/OpenRA.Mods.RA/Widgets/Logic/IngameMenuLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/IngameMenuLogic.cs index b3593625ea..cc11efd2c3 100644 --- a/OpenRA.Mods.RA/Widgets/Logic/IngameMenuLogic.cs +++ b/OpenRA.Mods.RA/Widgets/Logic/IngameMenuLogic.cs @@ -21,7 +21,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic widget.Get("DISCONNECT").OnClick = () => { onExit(); - LeaveGame(widget, world, onExit); + LeaveGame(world); }; widget.Get("SETTINGS").OnClick = () => Ui.OpenWindow("SETTINGS_MENU"); widget.Get("MUSIC").OnClick = () => Ui.OpenWindow("MUSIC_MENU"); @@ -35,9 +35,9 @@ namespace OpenRA.Mods.RA.Widgets.Logic widget.Get("SURRENDER").IsVisible = () => world.LocalPlayer != null && world.LocalPlayer.WinState == WinState.Undefined; } - void LeaveGame(Widget widget, World world, Action onExit) + void LeaveGame(World world) { - Sound.PlayNotification(null, "Speech", "Leave", world.LocalPlayer.Country.Race); + Sound.PlayNotification(null, "Speech", "Leave", world.LocalPlayer == null ? null : world.LocalPlayer.Country.Race); Game.Disconnect(); Ui.CloseWindow(); Game.LoadShellMap(); From 4470d6761767f280201729a51d62fef41e191a07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Thu, 25 Apr 2013 18:01:16 +0200 Subject: [PATCH 3/6] fixed remove/hide main-menu when sub-menus are closed --- .../Widgets/Logic/MainMenuButtonsLogic.cs | 43 ++++++++++++++++--- .../Widgets/Logic/MusicPlayerLogic.cs | 5 ++- .../Widgets/Logic/SettingsMenuLogic.cs | 4 +- 3 files changed, 43 insertions(+), 9 deletions(-) diff --git a/OpenRA.Mods.RA/Widgets/Logic/MainMenuButtonsLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/MainMenuButtonsLogic.cs index 4008a4c7f5..4cff2b4679 100644 --- a/OpenRA.Mods.RA/Widgets/Logic/MainMenuButtonsLogic.cs +++ b/OpenRA.Mods.RA/Widgets/Logic/MainMenuButtonsLogic.cs @@ -14,33 +14,62 @@ namespace OpenRA.Mods.RA.Widgets.Logic { public class MainMenuButtonsLogic { + + enum MenuType { Main, None } + MenuType Menu = MenuType.Main; + Widget rootMenu; [ObjectCreator.UseCtor] public MainMenuButtonsLogic(Widget widget) { rootMenu = widget; + rootMenu.IsVisible = () => Menu == MenuType.Main; Game.modData.WidgetLoader.LoadWidget( new WidgetArgs(), Ui.Root, "PERF_BG" ); + widget.Get("MAINMENU_BUTTON_JOIN").OnClick = () => OpenGamePanel("JOINSERVER_BG"); widget.Get("MAINMENU_BUTTON_CREATE").OnClick = () => OpenGamePanel("CREATESERVER_BG"); widget.Get("MAINMENU_BUTTON_DIRECTCONNECT").OnClick = () => OpenGamePanel("DIRECTCONNECT_BG"); - widget.Get("MAINMENU_BUTTON_SETTINGS").OnClick = () => Ui.OpenWindow("SETTINGS_MENU"); - widget.Get("MAINMENU_BUTTON_MUSIC").OnClick = () => Ui.OpenWindow("MUSIC_MENU"); + + widget.Get("MAINMENU_BUTTON_SETTINGS").OnClick = () => + { + Menu = MenuType.None; + Ui.OpenWindow("SETTINGS_MENU", new WidgetArgs() + { + { "onExit", () => Menu = MenuType.Main } + }); + }; + + widget.Get("MAINMENU_BUTTON_MUSIC").OnClick = () => + { + Menu = MenuType.None; + Ui.OpenWindow("MUSIC_MENU", new WidgetArgs() + { + { "onExit", () => Menu = MenuType.Main } + }); + }; widget.Get("MAINMENU_BUTTON_MODS").OnClick = () => + { + Menu = MenuType.None; Ui.OpenWindow("MODS_PANEL", new WidgetArgs() { - { "onExit", () => {} }, + { "onExit", () => Menu = MenuType.Main }, { "onSwitch", RemoveShellmapUI } }); + }; widget.Get("MAINMENU_BUTTON_REPLAY_VIEWER").OnClick = () => + { + Menu = MenuType.None; Ui.OpenWindow("REPLAYBROWSER_BG", new WidgetArgs() { - { "onExit", () => {} }, + { "onExit", () => Menu = MenuType.Main }, { "onStart", RemoveShellmapUI } }); + }; + widget.Get("MAINMENU_BUTTON_QUIT").OnClick = () => Game.Exit(); } @@ -51,18 +80,20 @@ namespace OpenRA.Mods.RA.Widgets.Logic void OpenGamePanel(string id) { + Menu = MenuType.None; Ui.OpenWindow(id, new WidgetArgs() { - { "onExit", () => {} }, + { "onExit", () => Menu = MenuType.Main }, { "openLobby", () => OpenLobbyPanel() } }); } void OpenLobbyPanel() { + Menu = MenuType.None; Game.OpenWindow("SERVER_LOBBY", new WidgetArgs() { - { "onExit", () => { Game.Disconnect(); } }, + { "onExit", () => { Game.Disconnect(); Menu = MenuType.Main; } }, { "onStart", RemoveShellmapUI }, { "addBots", false } }); diff --git a/OpenRA.Mods.RA/Widgets/Logic/MusicPlayerLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/MusicPlayerLogic.cs index 1cf3c614b6..1b7ab442b4 100644 --- a/OpenRA.Mods.RA/Widgets/Logic/MusicPlayerLogic.cs +++ b/OpenRA.Mods.RA/Widgets/Logic/MusicPlayerLogic.cs @@ -32,7 +32,8 @@ namespace OpenRA.Mods.RA.Widgets.Logic () => Play( Game.Settings.Sound.Repeat ? CurrentSong : GetNextSong() )); } - public MusicPlayerLogic() + [ObjectCreator.UseCtor] + public MusicPlayerLogic(Action onExit) { bg = Ui.Root.Get("MUSIC_MENU"); CurrentSong = GetNextSong(); @@ -41,7 +42,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic bg.Get( "BUTTON_PLAY" ).IsVisible = () => !Sound.MusicPlaying; bg.Get("BUTTON_CLOSE").OnClick = - () => { Game.Settings.Save(); Ui.CloseWindow(); }; + () => { Game.Settings.Save(); Ui.CloseWindow(); onExit(); }; bg.Get("BUTTON_INSTALL").IsVisible = () => false; diff --git a/OpenRA.Mods.RA/Widgets/Logic/SettingsMenuLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/SettingsMenuLogic.cs index b995c229c6..bea9cf55dc 100644 --- a/OpenRA.Mods.RA/Widgets/Logic/SettingsMenuLogic.cs +++ b/OpenRA.Mods.RA/Widgets/Logic/SettingsMenuLogic.cs @@ -21,7 +21,8 @@ namespace OpenRA.Mods.RA.Widgets.Logic { Widget bg; - public SettingsMenuLogic() + [ObjectCreator.UseCtor] + public SettingsMenuLogic(Action onExit) { bg = Ui.Root.Get("SETTINGS_MENU"); var tabs = bg.Get("TAB_CONTAINER"); @@ -247,6 +248,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic int.TryParse(maxFrameRate.Text, out gs.MaxFramerate); Game.Settings.Save(); Ui.CloseWindow(); + onExit(); }; } From cf9fcdee60f69392e85492d17e4362232676c09e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Thu, 25 Apr 2013 18:48:50 +0200 Subject: [PATCH 4/6] separate music-player from main-menu yaml --- mods/d2k/chrome/mainmenu.yaml | 144 +------------------------------- mods/d2k/mod.yaml | 3 +- mods/ra/chrome/mainmenu.yaml | 144 +------------------------------- mods/ra/chrome/musicplayer.yaml | 142 +++++++++++++++++++++++++++++++ mods/ra/mod.yaml | 1 + 5 files changed, 146 insertions(+), 288 deletions(-) create mode 100644 mods/ra/chrome/musicplayer.yaml diff --git a/mods/d2k/chrome/mainmenu.yaml b/mods/d2k/chrome/mainmenu.yaml index 240b7bf962..2e762ef458 100644 --- a/mods/d2k/chrome/mainmenu.yaml +++ b/mods/d2k/chrome/mainmenu.yaml @@ -88,146 +88,4 @@ Background@PERF_BG: X:20 Y:205 Width:170 - Height:40 -Background@MUSIC_MENU: - Logic:MusicPlayerLogic - X:(WINDOW_RIGHT - WIDTH)/2 - Y:(WINDOW_BOTTOM - HEIGHT)/2 - Width: 450 - Height: 250 - Visible: true - Children: - Label@SETTINGS_LABEL_TITLE: - X:0 - Y:20 - Width:450 - Height:25 - Text:Music - Align:Center - Font:Bold - Button@BUTTON_INSTALL: - X:20 - Y:PARENT_BOTTOM - 45 - Width:160 - Height:25 - Text:Install Music - Font:Bold - Button@BUTTON_CLOSE: - X:PARENT_RIGHT - 180 - Y:PARENT_BOTTOM - 45 - Width:160 - Height:25 - Text:Close - Font:Bold - Key:escape - Container@BUTTONS: - X:PARENT_RIGHT - 150 - Y:50 - Children: - Button@BUTTON_PLAY: - X:35 - Y:0 - Width:25 - Height:25 - Children: - Image@IMAGE_PLAY: - X:0 - Y:0 - Width:25 - Height:25 - ImageCollection:music - ImageName:play - Button@BUTTON_PAUSE: - Visible:false - X:35 - Y:0 - Width:25 - Height:25 - Children: - Image@IMAGE_PAUSE: - X:0 - Y:0 - Width:25 - Height:25 - ImageCollection:music - ImageName:pause - Button@BUTTON_STOP: - X:70 - Y:0 - Width:25 - Height:25 - Children: - Image@IMAGE_STOP: - X:0 - Y:0 - Width:25 - Height:25 - ImageCollection:music - ImageName:stop - Button@BUTTON_NEXT: - X:105 - Y:0 - Width:25 - Height:25 - Children: - Image@IMAGE_NEXT: - X:0 - Y:0 - Width:25 - Height:25 - ImageCollection:music - ImageName:next - Button@BUTTON_PREV: - X:0 - Y:0 - Width:25 - Height:25 - Children: - Image@IMAGE_PREV: - X:0 - Y:0 - Width:25 - Height:25 - ImageCollection:music - ImageName:prev - Label@TIME: - X:PARENT_RIGHT - 150 - Y:75 - Width:140 - Height:25 - Align: Center - ScrollPanel@MUSIC_LIST: - X:10 - Y:50 - Width:280 - Height:140 - Children: - ScrollItem@MUSIC_TEMPLATE: - Width:PARENT_RIGHT-27 - Height:25 - X:2 - Y:0 - Visible:false - Children: - Label@TITLE: - X:5 - Width:PARENT_RIGHT - 10 - Height:PARENT_BOTTOM - Align: Left - Label@LENGTH: - X:5 - Width:PARENT_RIGHT - 10 - Height:PARENT_BOTTOM - Align: Right - Checkbox@SHUFFLE: - X:PARENT_RIGHT - 150 - Y:110 - Width:100 - Height:20 - Text:Shuffle - Checkbox@REPEAT: - X:PARENT_RIGHT - 150 - Y:140 - Width:100 - Height:20 - Text:Loop + Height:40 \ No newline at end of file diff --git a/mods/d2k/mod.yaml b/mods/d2k/mod.yaml index 65ca38dcbc..af61548e84 100644 --- a/mods/d2k/mod.yaml +++ b/mods/d2k/mod.yaml @@ -61,8 +61,7 @@ ChromeLayout: mods/ra/chrome/dropdowns.yaml mods/ra/chrome/modchooser.yaml mods/ra/chrome/cheats.yaml - mods/d2k/chrome/tooltips.yaml - + mods/ra/chrome/musicplayer.yaml mods/d2k/chrome/tooltips.yaml Weapons: mods/d2k/weapons/defaults.yaml mods/d2k/weapons/explosions.yaml diff --git a/mods/ra/chrome/mainmenu.yaml b/mods/ra/chrome/mainmenu.yaml index 59ac467d3f..6eda3690b0 100644 --- a/mods/ra/chrome/mainmenu.yaml +++ b/mods/ra/chrome/mainmenu.yaml @@ -88,146 +88,4 @@ Background@PERF_BG: X:20 Y:205 Width:170 - Height:40 -Background@MUSIC_MENU: - Logic:MusicPlayerLogic - X:(WINDOW_RIGHT - WIDTH)/2 - Y:(WINDOW_BOTTOM - HEIGHT)/2 - Width: 450 - Height: 250 - Visible: true - Children: - Label@SETTINGS_LABEL_TITLE: - X:0 - Y:20 - Width:450 - Height:25 - Text:Music - Align:Center - Font:Bold - Button@BUTTON_INSTALL: - X:20 - Y:PARENT_BOTTOM - 45 - Width:160 - Height:25 - Text:Install Music - Font:Bold - Button@BUTTON_CLOSE: - X:PARENT_RIGHT - 180 - Y:PARENT_BOTTOM - 45 - Width:160 - Height:25 - Text:Close - Font:Bold - Key:escape - Container@BUTTONS: - X:PARENT_RIGHT - 150 - Y:50 - Children: - Button@BUTTON_PLAY: - X:35 - Y:0 - Width:25 - Height:25 - Children: - Image@IMAGE_PLAY: - X:0 - Y:0 - Width:25 - Height:25 - ImageCollection:music - ImageName:play - Button@BUTTON_PAUSE: - Visible:false - X:35 - Y:0 - Width:25 - Height:25 - Children: - Image@IMAGE_PAUSE: - X:0 - Y:0 - Width:25 - Height:25 - ImageCollection:music - ImageName:pause - Button@BUTTON_STOP: - X:70 - Y:0 - Width:25 - Height:25 - Children: - Image@IMAGE_STOP: - X:0 - Y:0 - Width:25 - Height:25 - ImageCollection:music - ImageName:stop - Button@BUTTON_NEXT: - X:105 - Y:0 - Width:25 - Height:25 - Children: - Image@IMAGE_NEXT: - X:0 - Y:0 - Width:25 - Height:25 - ImageCollection:music - ImageName:next - Button@BUTTON_PREV: - X:0 - Y:0 - Width:25 - Height:25 - Children: - Image@IMAGE_PREV: - X:0 - Y:0 - Width:25 - Height:25 - ImageCollection:music - ImageName:prev - Label@TIME: - X:PARENT_RIGHT - 150 - Y:75 - Width:140 - Height:25 - Align: Center - ScrollPanel@MUSIC_LIST: - X:10 - Y:50 - Width:280 - Height:140 - Children: - ScrollItem@MUSIC_TEMPLATE: - Width:PARENT_RIGHT-27 - Height:25 - X:2 - Y:0 - Visible:false - Children: - Label@TITLE: - X:5 - Width:PARENT_RIGHT - 10 - Height:PARENT_BOTTOM - Align: Left - Label@LENGTH: - X:5 - Width:PARENT_RIGHT - 10 - Height:PARENT_BOTTOM - Align: Right - Checkbox@SHUFFLE: - X:PARENT_RIGHT - 150 - Y:110 - Width:100 - Height:20 - Text:Shuffle - Checkbox@REPEAT: - X:PARENT_RIGHT - 150 - Y:140 - Width:100 - Height:20 - Text:Loop + Height:40 \ No newline at end of file diff --git a/mods/ra/chrome/musicplayer.yaml b/mods/ra/chrome/musicplayer.yaml new file mode 100644 index 0000000000..e37c415888 --- /dev/null +++ b/mods/ra/chrome/musicplayer.yaml @@ -0,0 +1,142 @@ +Background@MUSIC_MENU: + Logic:MusicPlayerLogic + X:(WINDOW_RIGHT - WIDTH)/2 + Y:(WINDOW_BOTTOM - HEIGHT)/2 + Width: 450 + Height: 250 + Visible: true + Children: + Label@SETTINGS_LABEL_TITLE: + X:0 + Y:20 + Width:450 + Height:25 + Text:Music + Align:Center + Font:Bold + Button@BUTTON_INSTALL: + X:20 + Y:PARENT_BOTTOM - 45 + Width:160 + Height:25 + Text:Install Music + Font:Bold + Button@BUTTON_CLOSE: + X:PARENT_RIGHT - 180 + Y:PARENT_BOTTOM - 45 + Width:160 + Height:25 + Text:Close + Font:Bold + Key:escape + Container@BUTTONS: + X:PARENT_RIGHT - 150 + Y:50 + Children: + Button@BUTTON_PLAY: + X:35 + Y:0 + Width:25 + Height:25 + Children: + Image@IMAGE_PLAY: + X:0 + Y:0 + Width:25 + Height:25 + ImageCollection:music + ImageName:play + Button@BUTTON_PAUSE: + Visible:false + X:35 + Y:0 + Width:25 + Height:25 + Children: + Image@IMAGE_PAUSE: + X:0 + Y:0 + Width:25 + Height:25 + ImageCollection:music + ImageName:pause + Button@BUTTON_STOP: + X:70 + Y:0 + Width:25 + Height:25 + Children: + Image@IMAGE_STOP: + X:0 + Y:0 + Width:25 + Height:25 + ImageCollection:music + ImageName:stop + Button@BUTTON_NEXT: + X:105 + Y:0 + Width:25 + Height:25 + Children: + Image@IMAGE_NEXT: + X:0 + Y:0 + Width:25 + Height:25 + ImageCollection:music + ImageName:next + Button@BUTTON_PREV: + X:0 + Y:0 + Width:25 + Height:25 + Children: + Image@IMAGE_PREV: + X:0 + Y:0 + Width:25 + Height:25 + ImageCollection:music + ImageName:prev + Label@TIME: + X:PARENT_RIGHT - 150 + Y:75 + Width:140 + Height:25 + Align: Center + ScrollPanel@MUSIC_LIST: + X:10 + Y:50 + Width:280 + Height:140 + Children: + ScrollItem@MUSIC_TEMPLATE: + Width:PARENT_RIGHT-27 + Height:25 + X:2 + Y:0 + Visible:false + Children: + Label@TITLE: + X:5 + Width:PARENT_RIGHT - 10 + Height:PARENT_BOTTOM + Align: Left + Label@LENGTH: + X:5 + Width:PARENT_RIGHT - 10 + Height:PARENT_BOTTOM + Align: Right + Checkbox@SHUFFLE: + X:PARENT_RIGHT - 150 + Y:110 + Width:100 + Height:20 + Text:Shuffle + Checkbox@REPEAT: + X:PARENT_RIGHT - 150 + Y:140 + Width:100 + Height:20 + Text:Loop \ No newline at end of file diff --git a/mods/ra/mod.yaml b/mods/ra/mod.yaml index dee99f4bcc..9be827a088 100644 --- a/mods/ra/mod.yaml +++ b/mods/ra/mod.yaml @@ -71,6 +71,7 @@ ChromeLayout: mods/ra/chrome/dropdowns.yaml mods/ra/chrome/modchooser.yaml mods/ra/chrome/cheats.yaml + mods/ra/chrome/musicplayer.yaml mods/ra/chrome/tooltips.yaml Weapons: From e3325711021a514ec932769d1db97f6e4da53653 Mon Sep 17 00:00:00 2001 From: Scott_NZ Date: Fri, 26 Apr 2013 13:39:34 +1200 Subject: [PATCH 5/6] Fix crash when clicking settings or music buttons in ingame menu --- OpenRA.Mods.RA/Widgets/Logic/IngameMenuLogic.cs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/OpenRA.Mods.RA/Widgets/Logic/IngameMenuLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/IngameMenuLogic.cs index cc11efd2c3..48fc33b2f7 100644 --- a/OpenRA.Mods.RA/Widgets/Logic/IngameMenuLogic.cs +++ b/OpenRA.Mods.RA/Widgets/Logic/IngameMenuLogic.cs @@ -23,8 +23,16 @@ namespace OpenRA.Mods.RA.Widgets.Logic onExit(); LeaveGame(world); }; - widget.Get("SETTINGS").OnClick = () => Ui.OpenWindow("SETTINGS_MENU"); - widget.Get("MUSIC").OnClick = () => Ui.OpenWindow("MUSIC_MENU"); + widget.Get("SETTINGS").OnClick = () => + { + widget.Visible = false; + Ui.OpenWindow("SETTINGS_MENU", new WidgetArgs { { "onExit", () => { widget.Visible = true; } } }); + }; + widget.Get("MUSIC").OnClick = () => + { + widget.Visible = false; + Ui.OpenWindow("MUSIC_MENU", new WidgetArgs { { "onExit", () => { widget.Visible = true; } } }); + }; widget.Get("RESUME").OnClick = () => onExit(); widget.Get("SURRENDER").OnClick = () => From 5d4fa5eea95b8fc9b615334e9474045371aba5ac Mon Sep 17 00:00:00 2001 From: Scott_NZ Date: Fri, 26 Apr 2013 18:13:34 +1200 Subject: [PATCH 6/6] Cache pause state and switch back to it when closing the ingame menu. Fix formatting fail in d2k mod.yaml --- .../Widgets/Logic/IngameChromeLogic.cs | 17 +++++++++++++---- mods/d2k/mod.yaml | 3 ++- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/OpenRA.Mods.RA/Widgets/Logic/IngameChromeLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/IngameChromeLogic.cs index 71dc3036cb..93b6f4f9c1 100644 --- a/OpenRA.Mods.RA/Widgets/Logic/IngameChromeLogic.cs +++ b/OpenRA.Mods.RA/Widgets/Logic/IngameChromeLogic.cs @@ -38,14 +38,16 @@ namespace OpenRA.Mods.RA.Widgets.Logic void InitRootWidgets() { + var cachedPause = false; Widget optionsBG = null; optionsBG = Game.LoadWidget(world, "INGAME_OPTIONS_BG", Ui.Root, new WidgetArgs { { "onExit", () => { - if (world.LobbyInfo.IsSinglePlayer) - world.IssueOrder(Order.PauseGame(false)); optionsBG.Visible = false; + + if (world.LobbyInfo.IsSinglePlayer) + world.IssueOrder(Order.PauseGame(cachedPause)); } } }); @@ -53,8 +55,15 @@ namespace OpenRA.Mods.RA.Widgets.Logic gameRoot.Get("INGAME_OPTIONS_BUTTON").OnClick = () => { optionsBG.Visible ^= true; - if (world.LobbyInfo.IsSinglePlayer) - world.IssueOrder(Order.PauseGame(optionsBG.Visible)); + if (optionsBG.Visible) + { + cachedPause = world.Paused; + + if (world.LobbyInfo.IsSinglePlayer) + world.IssueOrder(Order.PauseGame(true)); + } + else + world.IssueOrder(Order.PauseGame(cachedPause)); }; Game.LoadWidget(world, "CHAT_PANEL", gameRoot, new WidgetArgs()); diff --git a/mods/d2k/mod.yaml b/mods/d2k/mod.yaml index af61548e84..dbd26c8d27 100644 --- a/mods/d2k/mod.yaml +++ b/mods/d2k/mod.yaml @@ -61,7 +61,8 @@ ChromeLayout: mods/ra/chrome/dropdowns.yaml mods/ra/chrome/modchooser.yaml mods/ra/chrome/cheats.yaml - mods/ra/chrome/musicplayer.yaml mods/d2k/chrome/tooltips.yaml + mods/ra/chrome/musicplayer.yaml + mods/d2k/chrome/tooltips.yaml Weapons: mods/d2k/weapons/defaults.yaml mods/d2k/weapons/explosions.yaml