From 6f0927069a4d3f6a404bd1be9e01cfcda9818f05 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Mon, 15 Dec 2014 17:47:27 +1300 Subject: [PATCH] Allow outside code to specify the map chooser visibility filter. --- OpenRA.Mods.RA/Widgets/Logic/LobbyLogic.cs | 3 ++- OpenRA.Mods.RA/Widgets/Logic/MapChooserLogic.cs | 16 ++++++++-------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/OpenRA.Mods.RA/Widgets/Logic/LobbyLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/LobbyLogic.cs index 2802bd7f23..a36b4da6f6 100644 --- a/OpenRA.Mods.RA/Widgets/Logic/LobbyLogic.cs +++ b/OpenRA.Mods.RA/Widgets/Logic/LobbyLogic.cs @@ -173,7 +173,8 @@ namespace OpenRA.Mods.RA.Widgets.Logic { { "initialMap", Map.Uid }, { "onExit", DoNothing }, - { "onSelect", onSelect } + { "onSelect", onSelect }, + { "filter", MapVisibility.Lobby }, }); }; } diff --git a/OpenRA.Mods.RA/Widgets/Logic/MapChooserLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/MapChooserLogic.cs index a61f02b963..3474f065c3 100644 --- a/OpenRA.Mods.RA/Widgets/Logic/MapChooserLogic.cs +++ b/OpenRA.Mods.RA/Widgets/Logic/MapChooserLogic.cs @@ -29,7 +29,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic string gameMode; [ObjectCreator.UseCtor] - internal MapChooserLogic(Widget widget, string initialMap, Action onExit, Action onSelect) + internal MapChooserLogic(Widget widget, string initialMap, Action onExit, Action onSelect, MapVisibility filter) { selectedUid = WidgetUtils.ChooseInitialMap(initialMap); @@ -47,7 +47,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic var gameModeDropdown = widget.GetOrNull("GAMEMODE_FILTER"); if (gameModeDropdown != null) { - var selectableMaps = Game.modData.MapCache.Where(m => m.Status == MapStatus.Available && m.Map.Visibility.HasFlag(MapVisibility.Lobby)); + var selectableMaps = Game.modData.MapCache.Where(m => m.Status == MapStatus.Available && (m.Map.Visibility & filter) != 0); var gameModes = selectableMaps .GroupBy(m => m.Type) .Select(g => Pair.New(g.Key, g.Count())).ToList(); @@ -62,7 +62,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic { var item = ScrollItemWidget.Setup(template, () => gameMode == ii.First, - () => { gameMode = ii.First; EnumerateMaps(onSelect); }); + () => { gameMode = ii.First; EnumerateMaps(onSelect, filter); }); item.Get("LABEL").GetText = () => showItem(ii); return item; }; @@ -84,13 +84,13 @@ namespace OpenRA.Mods.RA.Widgets.Logic else { mapFilter = mapfilterInput.Text = null; - EnumerateMaps(onSelect); + EnumerateMaps(onSelect, filter); } return true; }; mapfilterInput.OnEnterKey = () => { approving(); return true; }; mapfilterInput.OnTextEdited = () => - { mapFilter = mapfilterInput.Text; EnumerateMaps(onSelect); }; + { mapFilter = mapfilterInput.Text; EnumerateMaps(onSelect, filter); }; } var randomMapButton = widget.GetOrNull("RANDOMMAP_BUTTON"); @@ -105,13 +105,13 @@ namespace OpenRA.Mods.RA.Widgets.Logic randomMapButton.IsDisabled = () => visibleMaps == null || visibleMaps.Count == 0; } - EnumerateMaps(onSelect); + EnumerateMaps(onSelect, filter); } - void EnumerateMaps(Action onSelect) + void EnumerateMaps(Action onSelect, MapVisibility filter) { var maps = Game.modData.MapCache - .Where(m => m.Status == MapStatus.Available && m.Map.Visibility.HasFlag(MapVisibility.Lobby)) + .Where(m => m.Status == MapStatus.Available && (m.Map.Visibility & filter) != 0) .Where(m => gameMode == null || m.Type == gameMode) .Where(m => mapFilter == null || m.Title.IndexOf(mapFilter, StringComparison.OrdinalIgnoreCase) >= 0 || m.Author.IndexOf(mapFilter, StringComparison.OrdinalIgnoreCase) >= 0) .OrderBy(m => m.PlayerCount)