From 47804e5fab668dca19d2115aae920ae58a638363 Mon Sep 17 00:00:00 2001 From: atlimit8 Date: Sat, 18 Feb 2017 12:41:49 -0600 Subject: [PATCH] Improve Upgrader for Upgrades => Condition expressions --- .../UtilityCommands/UpgradeRules.cs | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs b/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs index 2a53959552..450c009eae 100644 --- a/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs +++ b/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs @@ -149,14 +149,31 @@ namespace OpenRA.Mods.Common.UtilityCommands upgradeMaxAcceptedLevel = FieldLoader.GetValue("", maxAcceptedNode.Value.Value); var processed = false; - if (upgradeTypes.Length == 1 && upgradeMinEnabledLevel == 0 && upgradeMaxEnabledLevel == 0 && upgradeMaxAcceptedLevel == 1) + if (upgradeMinEnabledLevel == 0 && upgradeMaxEnabledLevel == 0 && upgradeMaxAcceptedLevel == 1) { - node.Value.Nodes.Add(new MiniYamlNode("RequiresCondition", "!" + upgradeTypes.First())); + node.Value.Nodes.Add(new MiniYamlNode("RequiresCondition", upgradeTypes.Select(u => "!" + u).JoinWith(" && "))); processed = true; } - else if (upgradeTypes.Length == 1 && upgradeMinEnabledLevel == 1 && upgradeMaxEnabledLevel == int.MaxValue && upgradeMaxAcceptedLevel == 1) + else if (upgradeMinEnabledLevel == 1 && upgradeMaxEnabledLevel == int.MaxValue && upgradeMaxAcceptedLevel == 1) { - node.Value.Nodes.Add(new MiniYamlNode("RequiresCondition", upgradeTypes.First())); + node.Value.Nodes.Add(new MiniYamlNode("RequiresCondition", upgradeTypes.JoinWith(" || "))); + processed = true; + } + else if (upgradeMinEnabledLevel == 0 && upgradeMaxEnabledLevel < int.MaxValue) + { + node.Value.Nodes.Add(new MiniYamlNode("RequiresCondition", upgradeTypes.JoinWith(" + ") + " <= " + upgradeMaxEnabledLevel)); + processed = true; + } + else if (upgradeMaxEnabledLevel == int.MaxValue && upgradeMinEnabledLevel > 1) + { + node.Value.Nodes.Add(new MiniYamlNode("RequiresCondition", upgradeTypes.JoinWith(" + ") + " >= " + upgradeMinEnabledLevel)); + processed = true; + } + else if (upgradeMaxEnabledLevel < int.MaxValue && upgradeMinEnabledLevel > 0) + { + var lowerBound = upgradeMinEnabledLevel + " <= " + upgradeTypes.JoinWith(" + "); + var upperBound = upgradeTypes.JoinWith(" + ") + " <= " + upgradeMaxEnabledLevel; + node.Value.Nodes.Add(new MiniYamlNode("RequiresCondition", lowerBound + " && " + upperBound)); processed = true; }