Upgrade rule for CreateEffectWarhead ImpactTypes -> Targets

This commit is contained in:
reaperrr
2017-06-24 17:36:33 +02:00
committed by abcdefg30
parent 5cd8acada4
commit 65920a883f

View File

@@ -924,6 +924,54 @@ namespace OpenRA.Mods.Common.UtilityCommands
}
}
// Valid-/InvalidImpactTypes were removed from CreateEffectWarhead, which uses Valid-/InvalidTargets instead now
if (engineVersion < 20170625)
{
if (node.Key.StartsWith("Warhead", StringComparison.Ordinal) && node.Value.Value == "CreateEffect")
{
var validImpactTypes = node.Value.Nodes.FirstOrDefault(n => n.Key == "ValidImpactTypes");
var invalidImpactTypes = node.Value.Nodes.FirstOrDefault(n => n.Key == "InvalidImpactTypes");
var validTargetsNode = node.Value.Nodes.FirstOrDefault(n => n.Key == "ValidTargets");
if (validImpactTypes != null && validTargetsNode == null)
{
Console.WriteLine("CreateEffectWarhead now uses Valid-/InvalidTargets instead of Valid-/InvalidImpactTypes.");
Console.WriteLine("Please check whether you need to make manual adjustments.");
var validTargets = new List<string>();
if (validImpactTypes.Value.Value.Contains("Ground"))
validTargets.Add("Ground");
if (validImpactTypes.Value.Value.Contains("Water"))
validTargets.Add("Water");
if (validImpactTypes.Value.Value.Contains("Air"))
validTargets.Add("Air");
// 'validTargets' can be 0 here if the only valid ImpactType(s) were None, TargetHit or TargetTerrain.
// In that case we remove it and let the modder fix it manually.
if (validTargets.Count > 0)
{
validImpactTypes.Value.Value = validTargets.JoinWith(", ");
RenameNodeKey(validImpactTypes, "ValidTargets");
}
else
node.Value.Nodes.Remove(validImpactTypes);
}
else if (validTargetsNode == null)
{
// 'Air' is not part of the internal warhead ValidTargets default, but was part of the ValidImpactTypes default.
node.Value.Nodes.Add(new MiniYamlNode("ValidTargets", "Ground, Water, Air"));
}
if (invalidImpactTypes != null)
{
Console.WriteLine("CreateEffectWarhead now uses Valid-/InvalidTargets instead of Valid-/InvalidImpactTypes.");
Console.WriteLine("Please check whether you need to make manual adjustments.");
// It's too complicated to get all possible combinations right, so we just remove it and let the modder fix it manually
node.Value.Nodes.Remove(invalidImpactTypes);
}
}
}
UpgradeWeaponRules(modData, engineVersion, ref node.Value.Nodes, node, depth + 1);
}
}