Add support for mission groups.

This commit is contained in:
Paul Chote
2014-10-07 20:40:31 +13:00
parent 9ffd1cefbb
commit 0a4117ec76
3 changed files with 58 additions and 20 deletions

View File

@@ -33,7 +33,8 @@ namespace OpenRA.Mods.RA.Widgets.Logic
this.onStart = onStart; this.onStart = onStart;
var missionList = widget.Get<ScrollPanelWidget>("MISSION_LIST"); var missionList = widget.Get<ScrollPanelWidget>("MISSION_LIST");
var template = widget.Get<ScrollItemWidget>("MISSION_TEMPLATE"); var headerTemplate = widget.Get<ScrollItemWidget>("HEADER");
var template = widget.Get<ScrollItemWidget>("TEMPLATE");
widget.Get("MISSION_INFO").IsVisible = () => selectedMapPreview != null; widget.Get("MISSION_INFO").IsVisible = () => selectedMapPreview != null;
@@ -46,29 +47,41 @@ namespace OpenRA.Mods.RA.Widgets.Logic
var yaml = new MiniYaml(null, Game.modData.Manifest.Missions.Select(MiniYaml.FromFile).Aggregate(MiniYaml.MergeLiberal)).ToDictionary(); var yaml = new MiniYaml(null, Game.modData.Manifest.Missions.Select(MiniYaml.FromFile).Aggregate(MiniYaml.MergeLiberal)).ToDictionary();
var missionMapPaths = yaml["Missions"].Nodes.Select(n => Platform.ResolvePath(n.Key));
var maps = Game.modData.MapCache
.Where(p => p.Status == MapStatus.Available && missionMapPaths.Contains(Path.GetFullPath(p.Map.Path)))
.Select(p => p.Map);
missionList.RemoveChildren(); missionList.RemoveChildren();
foreach (var m in maps)
var selectedFirst = false;
foreach (var kv in yaml)
{ {
var map = m; var header = ScrollItemWidget.Setup(headerTemplate, () => true, () => {});
header.Get<LabelWidget>("LABEL").GetText = () => kv.Key;
missionList.AddChild(header);
var item = ScrollItemWidget.Setup(template, var missionMapPaths = kv.Value.Nodes.Select(n => Platform.ResolvePath(n.Key));
() => selectedMapPreview != null && selectedMapPreview.Uid == map.Uid,
() => SelectMap(map),
StartMission);
item.Get<LabelWidget>("TITLE").GetText = () => map.Title; var maps = Game.modData.MapCache
missionList.AddChild(item); .Where(p => p.Status == MapStatus.Available && missionMapPaths.Contains(Path.GetFullPath(p.Map.Path)))
.Select(p => p.Map);
foreach (var m in maps)
{
var map = m;
var item = ScrollItemWidget.Setup(template,
() => selectedMapPreview != null && selectedMapPreview.Uid == map.Uid,
() => SelectMap(map),
StartMission);
item.Get<LabelWidget>("TITLE").GetText = () => map.Title;
missionList.AddChild(item);
if (!selectedFirst)
{
SelectMap(map);
selectedFirst = true;
}
}
} }
if (maps.Any())
SelectMap(maps.First());
widget.Get<ButtonWidget>("STARTGAME_BUTTON").OnClick = StartMission; widget.Get<ButtonWidget>("STARTGAME_BUTTON").OnClick = StartMission;
widget.Get<ButtonWidget>("BACK_BUTTON").OnClick = () => widget.Get<ButtonWidget>("BACK_BUTTON").OnClick = () =>

View File

@@ -23,7 +23,19 @@ Container@MISSIONBROWSER_PANEL:
Width: 260 Width: 260
Height: 330 Height: 330
Children: Children:
ScrollItem@MISSION_TEMPLATE: ScrollItem@HEADER:
Width: PARENT_RIGHT-27
Height: 13
X: 2
Y: 0
Visible: false
Children:
Label@LABEL:
Font: TinyBold
Width: PARENT_RIGHT
Height: 10
Align: Center
ScrollItem@TEMPLATE:
Width: PARENT_RIGHT-27 Width: PARENT_RIGHT-27
Height: 25 Height: 25
X: 2 X: 2

View File

@@ -19,7 +19,20 @@ Background@MISSIONBROWSER_PANEL:
Width: 260 Width: 260
Height: 330 Height: 330
Children: Children:
ScrollItem@MISSION_TEMPLATE: ScrollItem@HEADER:
BaseName: scrollheader
Width: PARENT_RIGHT-27
Height: 13
X: 2
Y: 0
Visible: false
Children:
Label@LABEL:
Font: TinyBold
Width: PARENT_RIGHT
Height: 10
Align: Center
ScrollItem@TEMPLATE:
Width: PARENT_RIGHT-27 Width: PARENT_RIGHT-27
Height: 25 Height: 25
X: 2 X: 2