From a6cd770dcf191a5b187a2ee6cb0309a94f2cbfd9 Mon Sep 17 00:00:00 2001 From: atlimit8 Date: Thu, 16 Jul 2015 00:33:25 -0500 Subject: [PATCH] Remove TargetableSubmarine --- .../UtilityCommands/UpgradeRules.cs | 39 ++++++++++++++++++ OpenRA.Mods.RA/OpenRA.Mods.RA.csproj | 1 - OpenRA.Mods.RA/Traits/TargetableSubmarine.cs | 41 ------------------- mods/ra/rules/ships.yaml | 22 +++++++--- 4 files changed, 55 insertions(+), 48 deletions(-) delete mode 100644 OpenRA.Mods.RA/Traits/TargetableSubmarine.cs diff --git a/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs b/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs index 3d7b71b5d4..49e62850c5 100644 --- a/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs +++ b/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs @@ -1974,6 +1974,45 @@ namespace OpenRA.Mods.Common.UtilityCommands else if (node.Key == "-TargetableUnit" || node.Key == "-TargetableBuilding") node.Key = "-Targetable"; } + else if (depth == 0) + { + // Split TargetableSubmarine into two Targetable traits + var targetableSubmarine = node.Value.Nodes.FirstOrDefault(n => n.Key == "TargetableSubmarine"); + if (targetableSubmarine != null) + { + node.Value.Nodes.RemoveAll(n => n.Key == "-Targetable"); + targetableSubmarine.Key = "Targetable"; + targetableSubmarine.Value.Nodes.Add(new MiniYamlNode("UpgradeTypes", "underwater")); + targetableSubmarine.Value.Nodes.Add(new MiniYamlNode("UpgradeMaxEnabledLevel", "0")); + var cloakedTargetTypes = targetableSubmarine.Value.Nodes.FirstOrDefault(n => n.Key == "CloakedTargetTypes"); + if (cloakedTargetTypes != null) + { + targetableSubmarine.Value.Nodes.Remove(cloakedTargetTypes); + cloakedTargetTypes.Key = "TargetTypes"; + } + else + cloakedTargetTypes = new MiniYamlNode("TargetTypes", ""); + node.Value.Nodes.Add(new MiniYamlNode("Targetable@UNDERWATER", "", new List { + cloakedTargetTypes, + new MiniYamlNode("UpgradeTypes", "underwater"), + new MiniYamlNode("UpgradeMinEnabledLevel", "1") + })); + } + + // Add `WhileCloakedUpgrades: underwater` to Cloak trait if `CloakTypes: Underwater` + var cloak = node.Value.Nodes.FirstOrDefault(n => (n.Key == "Cloak" || n.Key.StartsWith("Cloak@")) + && n.Value.Nodes.Any(p => p.Key == "CloakTypes" && p.Value.Value == "Underwater")); + if (cloak != null) + cloak.Value.Nodes.Add(new MiniYamlNode("WhileCloakedUpgrades", "underwater")); + + // Remove split traits if TargetableSubmarine was removed + var untargetableSubmarine = node.Value.Nodes.FirstOrDefault(n => n.Key == "-TargetableSubmarine"); + if (untargetableSubmarine != null) + { + untargetableSubmarine.Key = "-Targetable"; + node.Value.Nodes.Add(new MiniYamlNode("-Targetable@UNDERWATER", "")); + } + } } UpgradeActorRules(engineVersion, ref node.Value.Nodes, node, depth + 1); diff --git a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj index 37f7fb9e3f..d023e3e648 100644 --- a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj +++ b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj @@ -112,7 +112,6 @@ - diff --git a/OpenRA.Mods.RA/Traits/TargetableSubmarine.cs b/OpenRA.Mods.RA/Traits/TargetableSubmarine.cs deleted file mode 100644 index 941caaa9fa..0000000000 --- a/OpenRA.Mods.RA/Traits/TargetableSubmarine.cs +++ /dev/null @@ -1,41 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2015 The OpenRA Developers (see AUTHORS) - * This file is part of OpenRA, which is free software. It is made - * available to you under the terms of the GNU General Public License - * as published by the Free Software Foundation. For more information, - * see COPYING. - */ -#endregion - -using OpenRA.Mods.Common.Traits; -using OpenRA.Traits; - -namespace OpenRA.Mods.RA.Traits -{ - public class TargetableSubmarineInfo : TargetableInfo, Requires - { - public readonly string[] CloakedTargetTypes = { }; - - public override object Create(ActorInitializer init) { return new TargetableSubmarine(init.Self, this); } - } - - public class TargetableSubmarine : Targetable - { - readonly TargetableSubmarineInfo info; - - public TargetableSubmarine(Actor self, TargetableSubmarineInfo info) - : base(self, info) - { - this.info = info; - } - - public override string[] TargetTypes - { - get - { - return cloak.Cloaked ? info.CloakedTargetTypes : info.TargetTypes; - } - } - } -} diff --git a/mods/ra/rules/ships.yaml b/mods/ra/rules/ships.yaml index 1ae7d98ce6..52dd8c4666 100644 --- a/mods/ra/rules/ships.yaml +++ b/mods/ra/rules/ships.yaml @@ -19,16 +19,21 @@ SS: Speed: 71 RevealsShroud: Range: 6c0 - -Targetable: - TargetableSubmarine: + Targetable: TargetTypes: Ground, Water, Repair - CloakedTargetTypes: Underwater, Repair + UpgradeTypes: underwater + UpgradeMaxEnabledLevel: 0 + Targetable@UNDERWATER: + TargetTypes: Underwater, Repair + UpgradeTypes: underwater + UpgradeMinEnabledLevel: 1 Cloak: CloakTypes: Underwater InitialDelay: 0 CloakDelay: 50 CloakSound: subshow1.aud UncloakSound: subshow1.aud + WhileCloakedUpgrades: underwater Armament: Weapon: TorpTube LocalOffset: 0,-171,0, 0,171,0 @@ -68,16 +73,21 @@ MSUB: Speed: 42 RevealsShroud: Range: 6c0 - -Targetable: - TargetableSubmarine: + Targetable: TargetTypes: Ground, Water, Repair - CloakedTargetTypes: Underwater, Repair + UpgradeTypes: underwater + UpgradeMaxEnabledLevel: 0 + Targetable@UNDERWATER: + TargetTypes: Underwater, Repair + UpgradeTypes: underwater + UpgradeMinEnabledLevel: 1 Cloak: CloakTypes: Underwater InitialDelay: 0 CloakDelay: 100 CloakSound: subshow1.aud UncloakSound: subshow1.aud + WhileCloakedUpgrades: underwater Armament: Weapon: SubMissile LocalOffset: 0,-171,0, 0,171,0