Add Chrome update plumbing.
This commit is contained in:
@@ -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; }
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user