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