Add Chrome update plumbing.

This commit is contained in:
Paul Chote
2018-03-30 11:30:53 +00:00
committed by abcdefg30
parent 910064dfe5
commit aa5b9401c3
2 changed files with 29 additions and 0 deletions

View File

@@ -24,8 +24,13 @@ namespace OpenRA.Mods.Common.UpdateRules
/// <returns>An enumerable of manual steps to be run by the user</returns> /// <returns>An enumerable of manual steps to be run by the user</returns>
public delegate IEnumerable<string> TopLevelNodeTransform(ModData modData, MiniYamlNode node); public delegate IEnumerable<string> TopLevelNodeTransform(ModData modData, MiniYamlNode node);
/// <summary>Defines a transformation that is run on each widget node in a chrome yaml file set.</summary>
/// <returns>An enumerable of manual steps to be run by the user</returns>
public delegate IEnumerable<string> ChromeNodeTransform(ModData modData, MiniYamlNode widgetNode);
public virtual IEnumerable<string> UpdateActorNode(ModData modData, MiniYamlNode actorNode) { yield break; } public virtual IEnumerable<string> UpdateActorNode(ModData modData, MiniYamlNode actorNode) { yield break; }
public virtual IEnumerable<string> UpdateWeaponNode(ModData modData, MiniYamlNode weaponNode) { yield break; } public virtual IEnumerable<string> UpdateWeaponNode(ModData modData, MiniYamlNode weaponNode) { yield break; }
public virtual IEnumerable<string> UpdateChromeNode(ModData modData, MiniYamlNode chromeNode) { yield break; }
public virtual IEnumerable<string> UpdateTilesetNode(ModData modData, MiniYamlNode tilesetNode) { yield break; } public virtual IEnumerable<string> UpdateTilesetNode(ModData modData, MiniYamlNode tilesetNode) { yield break; }
public virtual IEnumerable<string> BeforeUpdate(ModData modData) { yield break; } public virtual IEnumerable<string> BeforeUpdate(ModData modData) { yield break; }

View File

@@ -109,6 +109,7 @@ namespace OpenRA.Mods.Common.UpdateRules
manualSteps.AddRange(ApplyTopLevelTransform(modData, modRules, rule.UpdateActorNode)); manualSteps.AddRange(ApplyTopLevelTransform(modData, modRules, rule.UpdateActorNode));
manualSteps.AddRange(ApplyTopLevelTransform(modData, modWeapons, rule.UpdateWeaponNode)); manualSteps.AddRange(ApplyTopLevelTransform(modData, modWeapons, rule.UpdateWeaponNode));
manualSteps.AddRange(ApplyTopLevelTransform(modData, modTilesets, rule.UpdateTilesetNode)); manualSteps.AddRange(ApplyTopLevelTransform(modData, modTilesets, rule.UpdateTilesetNode));
manualSteps.AddRange(ApplyChromeTransform(modData, modChromeLayout, rule.UpdateChromeNode));
manualSteps.AddRange(rule.AfterUpdate(modData)); manualSteps.AddRange(rule.AfterUpdate(modData));
files = modRules.ToList(); files = modRules.ToList();
@@ -119,6 +120,29 @@ namespace OpenRA.Mods.Common.UpdateRules
return manualSteps; return manualSteps;
} }
static IEnumerable<string> ApplyChromeTransformInner(ModData modData, MiniYamlNode current, UpdateRule.ChromeNodeTransform transform)
{
foreach (var manualStep in transform(modData, current))
yield return manualStep;
var childrenNode = current.Value.Nodes.FirstOrDefault(n => n.Key == "Children");
if (childrenNode != null)
foreach (var node in childrenNode.Value.Nodes)
foreach (var manualStep in ApplyChromeTransformInner(modData, node, transform))
yield return manualStep;
}
static IEnumerable<string> ApplyChromeTransform(ModData modData, YamlFileSet files, UpdateRule.ChromeNodeTransform transform)
{
if (transform == null)
yield break;
foreach (var file in files)
foreach (var node in file.Item3)
foreach (var manualStep in ApplyChromeTransformInner(modData, node, transform))
yield return manualStep;
}
static IEnumerable<string> ApplyTopLevelTransform(ModData modData, YamlFileSet files, UpdateRule.TopLevelNodeTransform transform) static IEnumerable<string> ApplyTopLevelTransform(ModData modData, YamlFileSet files, UpdateRule.TopLevelNodeTransform transform)
{ {
if (transform == null) if (transform == null)