Make yaml node resolving optional
This commit is contained in:
committed by
Matthias Mailänder
parent
d4e6815f64
commit
462a3ef3c0
@@ -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>();
|
||||||
|
|
||||||
|
|||||||
@@ -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>();
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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(),
|
||||||
})
|
})
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -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; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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));
|
||||||
|
|||||||
Reference in New Issue
Block a user