Make yaml node resolving optional

This commit is contained in:
Gustas
2023-05-15 09:32:23 +03:00
committed by Matthias Mailänder
parent d4e6815f64
commit 462a3ef3c0
7 changed files with 65 additions and 28 deletions

View File

@@ -14,7 +14,7 @@ using System.Linq;
namespace OpenRA.Mods.Common.UpdateRules.Rules namespace OpenRA.Mods.Common.UpdateRules.Rules
{ {
public class UnhardcodeBaseBuilderBotModule : UpdateRule public class UnhardcodeBaseBuilderBotModule : UpdateRule, IBeforeUpdateActors
{ {
MiniYamlNode defences; MiniYamlNode defences;
@@ -28,7 +28,7 @@ namespace OpenRA.Mods.Common.UpdateRules.Rules
public override string Description => "DefenseTypes were added."; public override string Description => "DefenseTypes were added.";
public override IEnumerable<string> BeforeUpdateActors(ModData modData, List<MiniYamlNode> resolvedActors) public IEnumerable<string> BeforeUpdateActors(ModData modData, List<MiniYamlNode> resolvedActors)
{ {
var defences = new List<string>(); var defences = new List<string>();

View File

@@ -14,7 +14,7 @@ using System.Linq;
namespace OpenRA.Mods.Common.UpdateRules.Rules namespace OpenRA.Mods.Common.UpdateRules.Rules
{ {
public class UnhardcodeSquadManager : UpdateRule public class UnhardcodeSquadManager : UpdateRule, IBeforeUpdateActors
{ {
readonly List<MiniYamlNode> addNodes = new(); readonly List<MiniYamlNode> addNodes = new();
@@ -28,7 +28,7 @@ namespace OpenRA.Mods.Common.UpdateRules.Rules
public override string Description => "AirUnitsTypes and ProtectionTypes were added."; public override string Description => "AirUnitsTypes and ProtectionTypes were added.";
public override IEnumerable<string> BeforeUpdateActors(ModData modData, List<MiniYamlNode> resolvedActors) public IEnumerable<string> BeforeUpdateActors(ModData modData, List<MiniYamlNode> resolvedActors)
{ {
var aircraft = new List<string>(); var aircraft = new List<string>();
var vips = new List<string>(); var vips = new List<string>();

View File

@@ -15,7 +15,7 @@ using System.Reflection;
namespace OpenRA.Mods.Common.UpdateRules.Rules namespace OpenRA.Mods.Common.UpdateRules.Rules
{ {
public class ExplicitSequenceFilenames : UpdateRule public class ExplicitSequenceFilenames : UpdateRule, IBeforeUpdateSequences
{ {
public override string Name => "Sequence filenames must be specified explicitly."; public override string Name => "Sequence filenames must be specified explicitly.";
@@ -33,7 +33,7 @@ namespace OpenRA.Mods.Common.UpdateRules.Rules
bool reportModYamlChanges; bool reportModYamlChanges;
bool disabled; bool disabled;
public override IEnumerable<string> BeforeUpdateSequences(ModData modData, List<MiniYamlNode> resolvedImagesNodes) public IEnumerable<string> BeforeUpdateSequences(ModData modData, List<MiniYamlNode> resolvedImagesNodes)
{ {
// Keep a resolved copy of the sequences so we can account for values imported through inheritance or Defaults. // Keep a resolved copy of the sequences so we can account for values imported through inheritance or Defaults.
// This will be modified during processing, so take a deep copy to avoid side-effects on other update rules. // This will be modified during processing, so take a deep copy to avoid side-effects on other update rules.

View File

@@ -15,7 +15,7 @@ using System.Linq;
namespace OpenRA.Mods.Common.UpdateRules.Rules namespace OpenRA.Mods.Common.UpdateRules.Rules
{ {
public class RemoveNegativeSequenceLength : UpdateRule public class RemoveNegativeSequenceLength : UpdateRule, IBeforeUpdateSequences
{ {
public override string Name => "Negative sequence length is no longer allowed."; public override string Name => "Negative sequence length is no longer allowed.";
@@ -23,7 +23,7 @@ namespace OpenRA.Mods.Common.UpdateRules.Rules
List<MiniYamlNode> resolvedImagesNodes; List<MiniYamlNode> resolvedImagesNodes;
public override IEnumerable<string> BeforeUpdateSequences(ModData modData, List<MiniYamlNode> resolvedImagesNodes) public IEnumerable<string> BeforeUpdateSequences(ModData modData, List<MiniYamlNode> resolvedImagesNodes)
{ {
this.resolvedImagesNodes = resolvedImagesNodes; this.resolvedImagesNodes = resolvedImagesNodes;
yield break; yield break;

View File

@@ -72,34 +72,38 @@ namespace OpenRA.Mods.Common.UpdateRules
new RemoveSmokeTrailWhenDamaged(), new RemoveSmokeTrailWhenDamaged(),
new ReplaceCrateSecondsWithTicks(), new ReplaceCrateSecondsWithTicks(),
new UseMillisecondsForSounds(), new UseMillisecondsForSounds(),
new UnhardcodeSquadManager(),
new RenameSupportPowerDescription(), new RenameSupportPowerDescription(),
new AttackBomberFacingTolerance(), new AttackBomberFacingTolerance(),
new AttackFrontalFacingTolerance(), new AttackFrontalFacingTolerance(),
new RenameCloakTypes(), new RenameCloakTypes(),
new SplitNukePowerMissileImage(), new SplitNukePowerMissileImage(),
new ReplaceSequenceEmbeddedPalette(), new ReplaceSequenceEmbeddedPalette(),
new UnhardcodeBaseBuilderBotModule(),
new UnhardcodeVeteranProductionIconOverlay(), new UnhardcodeVeteranProductionIconOverlay(),
new RenameContrailProperties(), new RenameContrailProperties(),
new RemoveDomainIndex(), new RemoveDomainIndex(),
new AddControlGroups(), new AddControlGroups(),
// Execute these rules last to avoid premature yaml merge crashes.
new UnhardcodeSquadManager(),
new UnhardcodeBaseBuilderBotModule(),
}), }),
new UpdatePath("release-20230225", new UpdateRule[] new UpdatePath("release-20230225", new UpdateRule[]
{ {
// bleed only changes here // bleed only changes here
new TextNotificationsDisplayWidgetRemoveTime(), new TextNotificationsDisplayWidgetRemoveTime(),
new ExplicitSequenceFilenames(),
new RenameEngineerRepair(), new RenameEngineerRepair(),
new ProductionTabsWidgetAddTabButtonCollection(), new ProductionTabsWidgetAddTabButtonCollection(),
new RemoveTSRefinery(), new RemoveTSRefinery(),
new RenameMcvCrateAction(), new RenameMcvCrateAction(),
new RemoveSequenceHasEmbeddedPalette(),
new RenameContrailWidth(), new RenameContrailWidth(),
new RemoveNegativeSequenceLength(),
new RemoveExperienceFromInfiltrates(), new RemoveExperienceFromInfiltrates(),
new AddColorPickerValueRange(), new AddColorPickerValueRange(),
// Execute these rules last to avoid premature yaml merge crashes.
new ExplicitSequenceFilenames(),
new RemoveSequenceHasEmbeddedPalette(),
new RemoveNegativeSequenceLength(),
}) })
}; };

View File

@@ -36,9 +36,21 @@ namespace OpenRA.Mods.Common.UpdateRules
public virtual IEnumerable<string> BeforeUpdate(ModData modData) { yield break; } public virtual IEnumerable<string> BeforeUpdate(ModData modData) { yield break; }
public virtual IEnumerable<string> AfterUpdate(ModData modData) { yield break; } public virtual IEnumerable<string> AfterUpdate(ModData modData) { yield break; }
}
public virtual IEnumerable<string> BeforeUpdateActors(ModData modData, List<MiniYamlNode> resolvedActors) { yield break; } // These aren't part of the UpdateRule class as to avoid premature yaml merge crashes when updating maps.
public virtual IEnumerable<string> BeforeUpdateWeapons(ModData modData, List<MiniYamlNode> resolvedWeapons) { yield break; } public interface IBeforeUpdateActors
public virtual IEnumerable<string> BeforeUpdateSequences(ModData modData, List<MiniYamlNode> resolvedImages) { yield break; } {
IEnumerable<string> BeforeUpdateActors(ModData modData, List<MiniYamlNode> resolvedActors) { yield break; }
}
public interface IBeforeUpdateWeapons
{
IEnumerable<string> BeforeUpdateWeapons(ModData modData, List<MiniYamlNode> resolvedWeapons) { yield break; }
}
public interface IBeforeUpdateSequences
{
IEnumerable<string> BeforeUpdateSequences(ModData modData, List<MiniYamlNode> resolvedImages) { yield break; }
} }
} }

View File

@@ -113,9 +113,12 @@ namespace OpenRA.Mods.Common.UpdateRules
var mapRulesNode = yaml.Nodes.FirstOrDefault(n => n.Key == "Rules"); var mapRulesNode = yaml.Nodes.FirstOrDefault(n => n.Key == "Rules");
if (mapRulesNode != null) if (mapRulesNode != null)
{
if (rule is IBeforeUpdateActors before)
{ {
var resolvedActors = LoadMapYaml(modData.DefaultFileSystem, mapPackage, modData.Manifest.Rules, mapRulesNode.Value); var resolvedActors = LoadMapYaml(modData.DefaultFileSystem, mapPackage, modData.Manifest.Rules, mapRulesNode.Value);
manualSteps.AddRange(rule.BeforeUpdateActors(modData, resolvedActors)); manualSteps.AddRange(before.BeforeUpdateActors(modData, resolvedActors));
}
var mapRules = LoadInternalMapYaml(modData, mapPackage, mapRulesNode.Value, externalFilenames); var mapRules = LoadInternalMapYaml(modData, mapPackage, mapRulesNode.Value, externalFilenames);
manualSteps.AddRange(ApplyTopLevelTransform(modData, mapRules, rule.UpdateActorNode)); manualSteps.AddRange(ApplyTopLevelTransform(modData, mapRules, rule.UpdateActorNode));
@@ -124,9 +127,12 @@ namespace OpenRA.Mods.Common.UpdateRules
var mapWeaponsNode = yaml.Nodes.FirstOrDefault(n => n.Key == "Weapons"); var mapWeaponsNode = yaml.Nodes.FirstOrDefault(n => n.Key == "Weapons");
if (mapWeaponsNode != null) if (mapWeaponsNode != null)
{
if (rule is IBeforeUpdateWeapons before)
{ {
var resolvedWeapons = LoadMapYaml(modData.DefaultFileSystem, mapPackage, modData.Manifest.Weapons, mapWeaponsNode.Value); var resolvedWeapons = LoadMapYaml(modData.DefaultFileSystem, mapPackage, modData.Manifest.Weapons, mapWeaponsNode.Value);
manualSteps.AddRange(rule.BeforeUpdateWeapons(modData, resolvedWeapons)); manualSteps.AddRange(before.BeforeUpdateWeapons(modData, resolvedWeapons));
}
var mapWeapons = LoadInternalMapYaml(modData, mapPackage, mapWeaponsNode.Value, externalFilenames); var mapWeapons = LoadInternalMapYaml(modData, mapPackage, mapWeaponsNode.Value, externalFilenames);
manualSteps.AddRange(ApplyTopLevelTransform(modData, mapWeapons, rule.UpdateWeaponNode)); manualSteps.AddRange(ApplyTopLevelTransform(modData, mapWeapons, rule.UpdateWeaponNode));
@@ -135,9 +141,12 @@ namespace OpenRA.Mods.Common.UpdateRules
var mapSequencesNode = yaml.Nodes.FirstOrDefault(n => n.Key == "Sequences"); var mapSequencesNode = yaml.Nodes.FirstOrDefault(n => n.Key == "Sequences");
if (mapSequencesNode != null) if (mapSequencesNode != null)
{
if (rule is IBeforeUpdateSequences before)
{ {
var resolvedImages = LoadMapYaml(modData.DefaultFileSystem, mapPackage, modData.Manifest.Sequences, mapSequencesNode.Value); var resolvedImages = LoadMapYaml(modData.DefaultFileSystem, mapPackage, modData.Manifest.Sequences, mapSequencesNode.Value);
manualSteps.AddRange(rule.BeforeUpdateSequences(modData, resolvedImages)); manualSteps.AddRange(before.BeforeUpdateSequences(modData, resolvedImages));
}
var mapSequences = LoadInternalMapYaml(modData, mapPackage, mapSequencesNode.Value, externalFilenames); var mapSequences = LoadInternalMapYaml(modData, mapPackage, mapSequencesNode.Value, externalFilenames);
manualSteps.AddRange(ApplyTopLevelTransform(modData, mapSequences, rule.UpdateSequenceNode)); manualSteps.AddRange(ApplyTopLevelTransform(modData, mapSequences, rule.UpdateSequenceNode));
@@ -229,16 +238,28 @@ namespace OpenRA.Mods.Common.UpdateRules
manualSteps.AddRange(rule.BeforeUpdate(modData)); manualSteps.AddRange(rule.BeforeUpdate(modData));
if (rule is IBeforeUpdateActors beforeActors)
{
var resolvedActors = MiniYaml.Load(modData.DefaultFileSystem, modData.Manifest.Rules, null); var resolvedActors = MiniYaml.Load(modData.DefaultFileSystem, modData.Manifest.Rules, null);
manualSteps.AddRange(rule.BeforeUpdateActors(modData, resolvedActors)); manualSteps.AddRange(beforeActors.BeforeUpdateActors(modData, resolvedActors));
}
manualSteps.AddRange(ApplyTopLevelTransform(modData, modRules, rule.UpdateActorNode)); manualSteps.AddRange(ApplyTopLevelTransform(modData, modRules, rule.UpdateActorNode));
if (rule is IBeforeUpdateWeapons beforeWeapons)
{
var resolvedWeapons = MiniYaml.Load(modData.DefaultFileSystem, modData.Manifest.Weapons, null); var resolvedWeapons = MiniYaml.Load(modData.DefaultFileSystem, modData.Manifest.Weapons, null);
manualSteps.AddRange(rule.BeforeUpdateWeapons(modData, resolvedWeapons)); manualSteps.AddRange(beforeWeapons.BeforeUpdateWeapons(modData, resolvedWeapons));
}
manualSteps.AddRange(ApplyTopLevelTransform(modData, modWeapons, rule.UpdateWeaponNode)); manualSteps.AddRange(ApplyTopLevelTransform(modData, modWeapons, rule.UpdateWeaponNode));
var resolvedSequences = MiniYaml.Load(modData.DefaultFileSystem, modData.Manifest.Sequences, null); if (rule is IBeforeUpdateSequences beforeSequences)
manualSteps.AddRange(rule.BeforeUpdateSequences(modData, resolvedSequences)); {
var resolvedImages = MiniYaml.Load(modData.DefaultFileSystem, modData.Manifest.Sequences, null);
manualSteps.AddRange(beforeSequences.BeforeUpdateSequences(modData, resolvedImages));
}
manualSteps.AddRange(ApplyTopLevelTransform(modData, modSequences, rule.UpdateSequenceNode)); manualSteps.AddRange(ApplyTopLevelTransform(modData, modSequences, rule.UpdateSequenceNode));
manualSteps.AddRange(ApplyTopLevelTransform(modData, modTilesets, rule.UpdateTilesetNode)); manualSteps.AddRange(ApplyTopLevelTransform(modData, modTilesets, rule.UpdateTilesetNode));