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(); }; }