diff --git a/OpenRA.Mods.Common/Widgets/Logic/MainMenuLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/MainMenuLogic.cs index 1e6422d7d3..fbf65cd305 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/MainMenuLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/MainMenuLogic.cs @@ -31,6 +31,14 @@ namespace OpenRA.Mods.Common.Widgets.Logic // Update news once per game launch static bool fetchedNews; + void SwitchMenu(MenuType type) + { + menuType = type; + + // Update button mouseover + Game.RunAfterTick(Ui.ResetTooltips); + } + [ObjectCreator.UseCtor] public MainMenuLogic(Widget widget, World world) { @@ -41,15 +49,15 @@ namespace OpenRA.Mods.Common.Widgets.Logic var mainMenu = widget.Get("MAIN_MENU"); mainMenu.IsVisible = () => menuType == MenuType.Main; - mainMenu.Get("SINGLEPLAYER_BUTTON").OnClick = () => menuType = MenuType.Singleplayer; + mainMenu.Get("SINGLEPLAYER_BUTTON").OnClick = () => SwitchMenu(MenuType.Singleplayer); mainMenu.Get("MULTIPLAYER_BUTTON").OnClick = () => { - menuType = MenuType.None; + SwitchMenu(MenuType.None); Ui.OpenWindow("MULTIPLAYER_PANEL", new WidgetArgs { { "onStart", RemoveShellmapUI }, - { "onExit", () => menuType = MenuType.Main }, + { "onExit", () => SwitchMenu(MenuType.Main) }, { "directConnectHost", null }, { "directConnectPort", 0 }, }); @@ -68,14 +76,14 @@ namespace OpenRA.Mods.Common.Widgets.Logic mainMenu.Get("SETTINGS_BUTTON").OnClick = () => { - menuType = MenuType.None; + SwitchMenu(MenuType.None); Game.OpenWindow("SETTINGS_PANEL", new WidgetArgs { - { "onExit", () => menuType = MenuType.Main } + { "onExit", () => SwitchMenu(MenuType.Main) } }); }; - mainMenu.Get("EXTRAS_BUTTON").OnClick = () => menuType = MenuType.Extras; + mainMenu.Get("EXTRAS_BUTTON").OnClick = () => SwitchMenu(MenuType.Extras); mainMenu.Get("QUIT_BUTTON").OnClick = Game.Exit; @@ -86,10 +94,10 @@ namespace OpenRA.Mods.Common.Widgets.Logic var missionsButton = singleplayerMenu.Get("MISSIONS_BUTTON"); missionsButton.OnClick = () => { - menuType = MenuType.None; + SwitchMenu(MenuType.None); Game.OpenWindow("MISSIONBROWSER_PANEL", new WidgetArgs { - { "onExit", () => menuType = MenuType.Singleplayer }, + { "onExit", () => SwitchMenu(MenuType.Singleplayer) }, { "onStart", RemoveShellmapUI } }); }; @@ -102,7 +110,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic singleplayerMenu.Get("SKIRMISH_BUTTON").OnClick = StartSkirmishGame; - singleplayerMenu.Get("BACK_BUTTON").OnClick = () => menuType = MenuType.Main; + singleplayerMenu.Get("BACK_BUTTON").OnClick = () => SwitchMenu(MenuType.Main); // Extras menu var extrasMenu = widget.Get("EXTRAS_MENU"); @@ -110,47 +118,47 @@ namespace OpenRA.Mods.Common.Widgets.Logic extrasMenu.Get("REPLAYS_BUTTON").OnClick = () => { - menuType = MenuType.None; + SwitchMenu(MenuType.None); Ui.OpenWindow("REPLAYBROWSER_PANEL", new WidgetArgs { - { "onExit", () => menuType = MenuType.Extras }, + { "onExit", () => SwitchMenu(MenuType.Extras) }, { "onStart", RemoveShellmapUI } }); }; extrasMenu.Get("MUSIC_BUTTON").OnClick = () => { - menuType = MenuType.None; + SwitchMenu(MenuType.None); Ui.OpenWindow("MUSIC_PANEL", new WidgetArgs { - { "onExit", () => menuType = MenuType.Extras }, + { "onExit", () => SwitchMenu(MenuType.Extras) }, { "world", world } }); }; - extrasMenu.Get("MAP_EDITOR_BUTTON").OnClick = () => menuType = MenuType.MapEditor; + extrasMenu.Get("MAP_EDITOR_BUTTON").OnClick = () => SwitchMenu(MenuType.MapEditor); var assetBrowserButton = extrasMenu.GetOrNull("ASSETBROWSER_BUTTON"); if (assetBrowserButton != null) assetBrowserButton.OnClick = () => { - menuType = MenuType.None; + SwitchMenu(MenuType.None); Game.OpenWindow("ASSETBROWSER_PANEL", new WidgetArgs { - { "onExit", () => menuType = MenuType.Extras }, + { "onExit", () => SwitchMenu(MenuType.Extras) }, }); }; extrasMenu.Get("CREDITS_BUTTON").OnClick = () => { - menuType = MenuType.None; + SwitchMenu(MenuType.None); Ui.OpenWindow("CREDITS_PANEL", new WidgetArgs { - { "onExit", () => menuType = MenuType.Extras }, + { "onExit", () => SwitchMenu(MenuType.Extras) }, }); }; - extrasMenu.Get("BACK_BUTTON").OnClick = () => menuType = MenuType.Main; + extrasMenu.Get("BACK_BUTTON").OnClick = () => SwitchMenu(MenuType.Main); // Map editor menu var mapEditorMenu = widget.Get("MAP_EDITOR_MENU"); @@ -165,29 +173,29 @@ namespace OpenRA.Mods.Common.Widgets.Logic var newMapButton = widget.Get("NEW_MAP_BUTTON"); newMapButton.OnClick = () => { - menuType = MenuType.None; + SwitchMenu(MenuType.None); Game.OpenWindow("NEW_MAP_BG", new WidgetArgs() { { "onSelect", onSelect }, - { "onExit", () => menuType = MenuType.MapEditor } + { "onExit", () => SwitchMenu(MenuType.MapEditor) } }); }; var loadMapButton = widget.Get("LOAD_MAP_BUTTON"); loadMapButton.OnClick = () => { - menuType = MenuType.None; + SwitchMenu(MenuType.None); Game.OpenWindow("MAPCHOOSER_PANEL", new WidgetArgs() { { "initialMap", null }, { "initialTab", MapClassification.User }, - { "onExit", () => menuType = MenuType.MapEditor }, + { "onExit", () => SwitchMenu(MenuType.MapEditor) }, { "onSelect", onSelect }, { "filter", MapVisibility.Lobby | MapVisibility.Shellmap | MapVisibility.MissionSelector }, }); }; - mapEditorMenu.Get("BACK_BUTTON").OnClick = () => menuType = MenuType.Extras; + mapEditorMenu.Get("BACK_BUTTON").OnClick = () => SwitchMenu(MenuType.Extras); var newsBG = widget.GetOrNull("NEWS_BG"); if (newsBG != null) @@ -224,11 +232,11 @@ namespace OpenRA.Mods.Common.Widgets.Logic void OnRemoteDirectConnect(string host, int port) { - menuType = MenuType.None; + SwitchMenu(MenuType.None); Ui.OpenWindow("MULTIPLAYER_PANEL", new WidgetArgs { { "onStart", RemoveShellmapUI }, - { "onExit", () => menuType = MenuType.Main }, + { "onExit", () => SwitchMenu(MenuType.Main) }, { "directConnectHost", host }, { "directConnectPort", port }, }); @@ -240,7 +248,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic Game.CreateLocalServer(map.Uid), "", () => { Game.LoadEditor(map.Uid); }, - () => { Game.CloseServer(); menuType = MenuType.MapEditor; }); + () => { Game.CloseServer(); SwitchMenu(MenuType.MapEditor); }); } void SetNewsStatus(string message) @@ -343,10 +351,10 @@ namespace OpenRA.Mods.Common.Widgets.Logic void OpenSkirmishLobbyPanel() { - menuType = MenuType.None; + SwitchMenu(MenuType.None); Game.OpenWindow("SERVER_LOBBY", new WidgetArgs { - { "onExit", () => { Game.Disconnect(); menuType = MenuType.Singleplayer; } }, + { "onExit", () => { Game.Disconnect(); SwitchMenu(MenuType.Singleplayer); } }, { "onStart", RemoveShellmapUI }, { "skirmishMode", true } }); @@ -362,7 +370,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic Game.CreateLocalServer(map), "", OpenSkirmishLobbyPanel, - () => { Game.CloseServer(); menuType = MenuType.Main; }); + () => { Game.CloseServer(); SwitchMenu(MenuType.Main); }); } protected override void Dispose(bool disposing)