remove duplication of initial map choice logic
This commit is contained in:
@@ -9,6 +9,7 @@
|
||||
#endregion
|
||||
|
||||
using System;
|
||||
using System.Linq;
|
||||
using OpenRA.FileFormats;
|
||||
using OpenRA.Widgets;
|
||||
|
||||
@@ -22,6 +23,15 @@ namespace OpenRA.Mods.Cnc.Widgets
|
||||
return Mod.AllMods[mod].Version;
|
||||
}
|
||||
|
||||
public static string ChooseInitialMap(string map)
|
||||
{
|
||||
var availableMaps = Game.modData.AvailableMaps;
|
||||
if (string.IsNullOrEmpty(map) || !availableMaps.ContainsKey(map))
|
||||
return availableMaps.First(m => m.Value.Selectable).Key;
|
||||
|
||||
return map;
|
||||
}
|
||||
|
||||
public static void PromptConfirmAction(string title, string text, Action onConfirm, Action onCancel)
|
||||
{
|
||||
var prompt = Widget.OpenWindow("CONFIRM_PROMPT");
|
||||
|
||||
@@ -27,8 +27,7 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
|
||||
[ObjectCreator.Param] Action onExit,
|
||||
[ObjectCreator.Param] Action<Map> onSelect)
|
||||
{
|
||||
if (string.IsNullOrEmpty(initialMap) || ! Game.modData.AvailableMaps.TryGetValue(initialMap, out map))
|
||||
map = Game.modData.AvailableMaps.FirstOrDefault(m => m.Value.Selectable).Value;
|
||||
map = Game.modData.AvailableMaps[ CncWidgetUtils.ChooseInitialMap(initialMap) ];
|
||||
|
||||
var panel = widget.GetWidget("MAPCHOOSER_PANEL");
|
||||
|
||||
@@ -52,12 +51,15 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
|
||||
void EnumerateMaps()
|
||||
{
|
||||
scrollpanel.RemoveChildren();
|
||||
foreach (var kv in Game.modData.AvailableMaps.OrderBy(kv => kv.Value.Title).OrderBy(kv => kv.Value.PlayerCount))
|
||||
|
||||
var maps = Game.modData.AvailableMaps
|
||||
.Where( kv => kv.Value.Selectable )
|
||||
.OrderBy( kv => kv.Value.PlayerCount )
|
||||
.ThenBy( kv => kv.Value.Title );
|
||||
|
||||
foreach (var kv in maps)
|
||||
{
|
||||
var m = kv.Value;
|
||||
if (!m.Selectable)
|
||||
continue;
|
||||
|
||||
var item = ScrollItemWidget.Setup(itemTemplate, () => m == map, () => map = m);
|
||||
item.GetWidget<LabelWidget>("TITLE").GetText = () => m.Title;
|
||||
item.GetWidget<LabelWidget>("PLAYERS").GetText = () => "{0}".F(m.PlayerCount);
|
||||
|
||||
@@ -143,10 +143,7 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
|
||||
|
||||
void StartSkirmishGame()
|
||||
{
|
||||
var maps = Game.modData.AvailableMaps;
|
||||
var last = Game.Settings.Server.Map;
|
||||
var map = !string.IsNullOrEmpty(last) && maps.ContainsKey(last) ? last :
|
||||
maps.FirstOrDefault(m => m.Value.Selectable).Key;
|
||||
var map = CncWidgetUtils.ChooseInitialMap(Game.Settings.Server.Map);
|
||||
|
||||
CncConnectingLogic.Connect(IPAddress.Loopback.ToString(),
|
||||
Game.CreateLocalServer(map),
|
||||
|
||||
@@ -47,9 +47,7 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
|
||||
});
|
||||
};
|
||||
|
||||
if (string.IsNullOrEmpty(Game.Settings.Server.Map) ||
|
||||
!Game.modData.AvailableMaps.TryGetValue(Game.Settings.Server.Map, out map))
|
||||
map = Game.modData.AvailableMaps.FirstOrDefault(m => m.Value.Selectable).Value;
|
||||
map = Game.modData.AvailableMaps[ CncWidgetUtils.ChooseInitialMap(Game.Settings.Server.Map) ];
|
||||
|
||||
panel.GetWidget<MapPreviewWidget>("MAP_PREVIEW").Map = () => map;
|
||||
panel.GetWidget<LabelWidget>("MAP_NAME").GetText = () => map.Title;
|
||||
|
||||
Reference in New Issue
Block a user