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.
This commit is contained in:
Noam
2018-08-27 00:28:25 +03:00
committed by abcdefg30
parent 399e451ada
commit 4e7a35b50f
3 changed files with 12 additions and 3 deletions

View File

@@ -332,8 +332,8 @@ namespace OpenRA
if (string.IsNullOrEmpty(initialUid) || previews[initialUid].Status != MapStatus.Available) if (string.IsNullOrEmpty(initialUid) || previews[initialUid].Status != MapStatus.Available)
{ {
var selected = previews.Values.Where(IsSuitableInitialMap).RandomOrDefault(random) ?? var selected = previews.Values.Where(IsSuitableInitialMap).RandomOrDefault(random) ??
previews.Values.First(m => m.Status == MapStatus.Available && m.Visibility.HasFlag(MapVisibility.Lobby)); previews.Values.FirstOrDefault(m => m.Status == MapStatus.Available && m.Visibility.HasFlag(MapVisibility.Lobby));
return selected.Uid; return selected == null ? string.Empty : selected.Uid;
} }
return initialUid; return initialUid;

View File

@@ -122,7 +122,10 @@ namespace OpenRA.Mods.Common.Widgets.Logic
missionsButton.Disabled = !hasCampaign && !hasMissions; missionsButton.Disabled = !hasCampaign && !hasMissions;
singleplayerMenu.Get<ButtonWidget>("SKIRMISH_BUTTON").OnClick = StartSkirmishGame; var hasMaps = modData.MapCache.Any(p => p.Visibility.HasFlag(MapVisibility.Lobby));
var skirmishButton = singleplayerMenu.Get<ButtonWidget>("SKIRMISH_BUTTON");
skirmishButton.OnClick = StartSkirmishGame;
skirmishButton.Disabled = !hasMaps;
singleplayerMenu.Get<ButtonWidget>("BACK_BUTTON").OnClick = () => SwitchMenu(MenuType.Main); singleplayerMenu.Get<ButtonWidget>("BACK_BUTTON").OnClick = () => SwitchMenu(MenuType.Main);
@@ -200,6 +203,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic
}); });
}; };
loadMapButton.Disabled = !hasMaps;
mapEditorMenu.Get<ButtonWidget>("BACK_BUTTON").OnClick = () => SwitchMenu(MenuType.Extras); mapEditorMenu.Get<ButtonWidget>("BACK_BUTTON").OnClick = () => SwitchMenu(MenuType.Extras);
var newsBG = widget.GetOrNull("NEWS_BG"); var newsBG = widget.GetOrNull("NEWS_BG");

View File

@@ -10,6 +10,7 @@
#endregion #endregion
using System; using System;
using System.Linq;
using OpenRA.Network; using OpenRA.Network;
using OpenRA.Widgets; 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<ButtonWidget>("BACK_BUTTON").OnClick = () => { Ui.CloseWindow(); onExit(); }; widget.Get<ButtonWidget>("BACK_BUTTON").OnClick = () => { Ui.CloseWindow(); onExit(); };
if (directConnectHost != null) if (directConnectHost != null)