remove duplication of initial map choice logic

This commit is contained in:
Chris Forbes
2011-07-28 22:25:54 +12:00
parent b748e4b11b
commit cfa8298190
4 changed files with 21 additions and 14 deletions

View File

@@ -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");

View File

@@ -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);

View File

@@ -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),

View File

@@ -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;