Merge pull request #7324 from reaperrr/limitedammo2

Refactored LimitedAmmo to AmmoPool
This commit is contained in:
Pavel Penev
2015-03-26 15:59:56 -07:00
24 changed files with 392 additions and 255 deletions

View File

@@ -774,6 +774,61 @@ namespace OpenRA.Mods.Common.UtilityCommands
node.Key = "StandSequences";
}
if (engineVersion < 20150323)
{
// Moved Reloads functionality to LimitedAmmo and refactored the latter into AmmoPool
if (depth == 0)
{
var actorTraits = node.Value.Nodes;
var limitedAmmo = actorTraits.FirstOrDefault(l => l.Key == "LimitedAmmo");
var reloads = actorTraits.FirstOrDefault(r => r.Key == "Reloads");
if (reloads != null)
{
var reloadsFields = reloads.Value.Nodes;
var limitedAmmoFields = limitedAmmo.Value.Nodes;
var count = reloadsFields.FirstOrDefault(c => c.Key == "Count");
var period = reloadsFields.FirstOrDefault(p => p.Key == "Period");
var resets = reloadsFields.FirstOrDefault(res => res.Key == "ResetOnFire");
var reloadsCount = count != null ? FieldLoader.GetValue<int>("Count", count.Value.Value) : -1;
var reloadsPeriod = period != null ? FieldLoader.GetValue<int>("Period", period.Value.Value) : 50;
var reloadsResetOnFire = resets != null ? FieldLoader.GetValue<bool>("ResetOnFire", resets.Value.Value) : false;
limitedAmmoFields.Add(new MiniYamlNode("SelfReloads", "true"));
limitedAmmoFields.Add(new MiniYamlNode("ReloadCount", reloadsCount.ToString()));
limitedAmmoFields.Add(new MiniYamlNode("SelfReloadTicks", reloadsPeriod.ToString()));
limitedAmmoFields.Add(new MiniYamlNode("ResetOnFire", reloadsResetOnFire.ToString()));
node.Value.Nodes.RemoveAll(n => n.Key == "Reloads");
node.Value.Nodes.RemoveAll(n => n.Key == "-Reloads");
}
}
// Moved RearmSound from Minelayer to LimitedAmmo/AmmoPool
if (depth == 0)
{
var actorTraits = node.Value.Nodes;
var limitedAmmo = actorTraits.FirstOrDefault(la => la.Key == "LimitedAmmo");
var minelayer = actorTraits.FirstOrDefault(ml => ml.Key == "Minelayer");
if (minelayer != null)
{
var minelayerFields = minelayer.Value.Nodes;
var limitedAmmoFields = limitedAmmo.Value.Nodes;
var rearmSound = minelayerFields.FirstOrDefault(rs => rs.Key == "RearmSound");
var minelayerRearmSound = rearmSound != null ? FieldLoader.GetValue<string>("RearmSound", rearmSound.Value.Value) : "minelay1.aud";
limitedAmmoFields.Add(new MiniYamlNode("RearmSound", minelayerRearmSound.ToString()));
minelayerFields.Remove(rearmSound);
}
}
// Rename LimitedAmmo to AmmoPool
if (node.Key == "LimitedAmmo")
node.Key = "AmmoPool";
}
UpgradeActorRules(engineVersion, ref node.Value.Nodes, node, depth + 1);
}
}