From 4e7a35b50f35edb80e8a3ae72c6d248ebcb368f2 Mon Sep 17 00:00:00 2001 From: Noam Date: Mon, 27 Aug 2018 00:28:25 +0300 Subject: [PATCH] add NoAvailableMaps exception. modify ChooseInitialMap to throw NoAvailalbeMaps exception if no maps were loaded. implement Utilities.TryWithPrompt - safe execution of a provided action with ability to prompt user on error. --- OpenRA.Game/Map/MapCache.cs | 4 ++-- OpenRA.Mods.Common/Widgets/Logic/MainMenuLogic.cs | 7 ++++++- OpenRA.Mods.Common/Widgets/Logic/MultiplayerLogic.cs | 4 ++++ 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/OpenRA.Game/Map/MapCache.cs b/OpenRA.Game/Map/MapCache.cs index 8c5e18d22f..f4127381f6 100644 --- a/OpenRA.Game/Map/MapCache.cs +++ b/OpenRA.Game/Map/MapCache.cs @@ -332,8 +332,8 @@ namespace OpenRA if (string.IsNullOrEmpty(initialUid) || previews[initialUid].Status != MapStatus.Available) { var selected = previews.Values.Where(IsSuitableInitialMap).RandomOrDefault(random) ?? - previews.Values.First(m => m.Status == MapStatus.Available && m.Visibility.HasFlag(MapVisibility.Lobby)); - return selected.Uid; + previews.Values.FirstOrDefault(m => m.Status == MapStatus.Available && m.Visibility.HasFlag(MapVisibility.Lobby)); + return selected == null ? string.Empty : selected.Uid; } return initialUid; diff --git a/OpenRA.Mods.Common/Widgets/Logic/MainMenuLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/MainMenuLogic.cs index d3a46e836a..1df312b834 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/MainMenuLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/MainMenuLogic.cs @@ -122,7 +122,10 @@ namespace OpenRA.Mods.Common.Widgets.Logic missionsButton.Disabled = !hasCampaign && !hasMissions; - singleplayerMenu.Get("SKIRMISH_BUTTON").OnClick = StartSkirmishGame; + var hasMaps = modData.MapCache.Any(p => p.Visibility.HasFlag(MapVisibility.Lobby)); + var skirmishButton = singleplayerMenu.Get("SKIRMISH_BUTTON"); + skirmishButton.OnClick = StartSkirmishGame; + skirmishButton.Disabled = !hasMaps; singleplayerMenu.Get("BACK_BUTTON").OnClick = () => SwitchMenu(MenuType.Main); @@ -200,6 +203,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic }); }; + loadMapButton.Disabled = !hasMaps; + mapEditorMenu.Get("BACK_BUTTON").OnClick = () => SwitchMenu(MenuType.Extras); var newsBG = widget.GetOrNull("NEWS_BG"); diff --git a/OpenRA.Mods.Common/Widgets/Logic/MultiplayerLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/MultiplayerLogic.cs index 2b073e47fc..1fe5e38867 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/MultiplayerLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/MultiplayerLogic.cs @@ -10,6 +10,7 @@ #endregion using System; +using System.Linq; using OpenRA.Network; using OpenRA.Widgets; @@ -55,6 +56,9 @@ namespace OpenRA.Mods.Common.Widgets.Logic }); }; + var hasMaps = modData.MapCache.Any(p => !p.Visibility.HasFlag(MapVisibility.Shellmap)); + createServerButton.Disabled = !hasMaps; + widget.Get("BACK_BUTTON").OnClick = () => { Ui.CloseWindow(); onExit(); }; if (directConnectHost != null)