From 60cd12874e8b0204933732c49d9aef623ec1f11f Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sat, 3 Dec 2016 15:21:59 +0000 Subject: [PATCH] Convert Aircraft to conditions. --- OpenRA.Mods.Common/Traits/Air/Aircraft.cs | 33 ++++++++++--------- .../UtilityCommands/UpgradeRules.cs | 9 +++++ mods/cnc/rules/aircraft.yaml | 4 +-- mods/cnc/rules/defaults.yaml | 6 ++-- mods/d2k/rules/aircraft.yaml | 2 +- mods/ra/rules/defaults.yaml | 12 +++---- mods/ts/rules/aircraft.yaml | 4 +-- mods/ts/rules/defaults.yaml | 8 ++--- 8 files changed, 44 insertions(+), 34 deletions(-) diff --git a/OpenRA.Mods.Common/Traits/Air/Aircraft.cs b/OpenRA.Mods.Common/Traits/Air/Aircraft.cs index c43946e7f8..8b19fe40df 100644 --- a/OpenRA.Mods.Common/Traits/Air/Aircraft.cs +++ b/OpenRA.Mods.Common/Traits/Air/Aircraft.cs @@ -53,12 +53,12 @@ namespace OpenRA.Mods.Common.Traits [VoiceReference] public readonly string Voice = "Action"; [UpgradeGrantedReference] - [Desc("The upgrades to grant to self while airborne.")] - public readonly string[] AirborneUpgrades = { }; + [Desc("The condition to grant to self while airborne.")] + public readonly string AirborneCondition = null; [UpgradeGrantedReference] - [Desc("The upgrades to grant to self while at cruise altitude.")] - public readonly string[] CruisingUpgrades = { }; + [Desc("The condition to grant to self while at cruise altitude.")] + public readonly string CruisingCondition = null; [Desc("Can the actor hover in place mid-air? If not, then the actor will have to remain in motion (circle around).")] public readonly bool CanHover = false; @@ -119,6 +119,8 @@ namespace OpenRA.Mods.Common.Traits bool airborne; bool cruising; bool firstTick = true; + int airborneToken = UpgradeManager.InvalidConditionToken; + int cruisingToken = UpgradeManager.InvalidConditionToken; bool isMoving; bool isMovingVertically; @@ -656,20 +658,20 @@ namespace OpenRA.Mods.Common.Traits { if (airborne) return; + airborne = true; - if (um != null) - foreach (var u in Info.AirborneUpgrades) - um.GrantUpgrade(self, u, this); + if (um != null && !string.IsNullOrEmpty(Info.AirborneCondition) && airborneToken == UpgradeManager.InvalidConditionToken) + airborneToken = um.GrantCondition(self, Info.AirborneCondition); } void OnAirborneAltitudeLeft() { if (!airborne) return; + airborne = false; - if (um != null) - foreach (var u in Info.AirborneUpgrades) - um.RevokeUpgrade(self, u, this); + if (um != null && airborneToken != UpgradeManager.InvalidConditionToken) + airborneToken = um.RevokeCondition(self, airborneToken); } #endregion @@ -680,10 +682,10 @@ namespace OpenRA.Mods.Common.Traits { if (cruising) return; + cruising = true; - if (um != null) - foreach (var u in Info.CruisingUpgrades) - um.GrantUpgrade(self, u, this); + if (um != null && !string.IsNullOrEmpty(Info.CruisingCondition) && cruisingToken == UpgradeManager.InvalidConditionToken) + cruisingToken = um.GrantCondition(self, Info.CruisingCondition); } void OnCruisingAltitudeLeft() @@ -691,9 +693,8 @@ namespace OpenRA.Mods.Common.Traits if (!cruising) return; cruising = false; - if (um != null) - foreach (var u in Info.CruisingUpgrades) - um.RevokeUpgrade(self, u, this); + if (um != null && cruisingToken != UpgradeManager.InvalidConditionToken) + cruisingToken = um.RevokeCondition(self, cruisingToken); } #endregion diff --git a/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs b/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs index 739f454fff..bd8edfa240 100644 --- a/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs +++ b/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs @@ -586,6 +586,15 @@ namespace OpenRA.Mods.Common.UtilityCommands } } + if (engineVersion < 20161213) + { + if (node.Key == "Aircraft") + { + ConvertUpgradesToCondition(parent, node, "AirborneUpgrades", "AirborneCondition"); + ConvertUpgradesToCondition(parent, node, "CruisingUpgrades", "CruisingCondition"); + } + } + UpgradeActorRules(modData, engineVersion, ref node.Value.Nodes, node, depth + 1); } diff --git a/mods/cnc/rules/aircraft.yaml b/mods/cnc/rules/aircraft.yaml index 484a3fb1f6..9513645366 100644 --- a/mods/cnc/rules/aircraft.yaml +++ b/mods/cnc/rules/aircraft.yaml @@ -167,7 +167,7 @@ C17: TurnSpeed: 5 Speed: 326 Repulsable: False - AirborneUpgrades: airborne + AirborneCondition: airborne MaximumPitch: 36 Health: HP: 25 @@ -206,7 +206,7 @@ A10: TurnSpeed: 4 Speed: 373 Repulsable: False - AirborneUpgrades: airborne + AirborneCondition: airborne Health: HP: 150 Armor: diff --git a/mods/cnc/rules/defaults.yaml b/mods/cnc/rules/defaults.yaml index f202f1c81b..e7a42283b4 100644 --- a/mods/cnc/rules/defaults.yaml +++ b/mods/cnc/rules/defaults.yaml @@ -202,8 +202,8 @@ Aircraft: RepairBuildings: hpad LandWhenIdle: false - AirborneUpgrades: airborne - CruisingUpgrades: cruising + AirborneCondition: airborne + CruisingCondition: cruising CanHover: True HiddenUnderFog: Type: CenterPosition @@ -839,7 +839,7 @@ Offset: 43, 128, 0 ZOffset: -129 Aircraft: - AirborneUpgrades: airborne + AirborneCondition: airborne CanHover: True FallsToEarth: Spins: True diff --git a/mods/d2k/rules/aircraft.yaml b/mods/d2k/rules/aircraft.yaml index 9d94195832..ab18638171 100644 --- a/mods/d2k/rules/aircraft.yaml +++ b/mods/d2k/rules/aircraft.yaml @@ -16,7 +16,7 @@ carryall.reinforce: LandableTerrainTypes: Sand, Rock, Transition, Spice, SpiceSand, Dune Repulsable: False LandWhenIdle: False - AirborneUpgrades: airborne + AirborneCondition: airborne CanHover: True Targetable@GROUND: TargetTypes: Ground, Vehicle diff --git a/mods/ra/rules/defaults.yaml b/mods/ra/rules/defaults.yaml index 13b5c8d31e..daa2ce47a3 100644 --- a/mods/ra/rules/defaults.yaml +++ b/mods/ra/rules/defaults.yaml @@ -425,8 +425,8 @@ Aircraft: RepairBuildings: fix RearmBuildings: afld - AirborneUpgrades: airborne - CruisingUpgrades: cruising + AirborneCondition: airborne + CruisingCondition: cruising Targetable@GROUND: TargetTypes: Ground, Repair, Vehicle RequiresCondition: !airborne @@ -796,8 +796,8 @@ Tooltip: GenericName: Destroyed Plane Aircraft: - AirborneUpgrades: airborne - CruisingUpgrades: cruising + AirborneCondition: airborne + CruisingCondition: cruising FallsToEarth: Spins: False Moves: True @@ -811,8 +811,8 @@ Tooltip: GenericName: Destroyed Helicopter Aircraft: - AirborneUpgrades: airborne - CruisingUpgrades: cruising + AirborneCondition: airborne + CruisingCondition: cruising CanHover: True FallsToEarth: BodyOrientation: diff --git a/mods/ts/rules/aircraft.yaml b/mods/ts/rules/aircraft.yaml index baf4bc07a0..bb2cdeea07 100644 --- a/mods/ts/rules/aircraft.yaml +++ b/mods/ts/rules/aircraft.yaml @@ -121,7 +121,7 @@ ORCAB: MaximumPitch: 120 TurnSpeed: 3 Speed: 96 - AirborneUpgrades: airborne + AirborneCondition: airborne MoveIntoShroud: false TakeoffSound: orcaup1.aud LandingSound: orcadwn1.aud @@ -243,7 +243,7 @@ SCRIN: MaximumPitch: 90 TurnSpeed: 3 Speed: 168 - AirborneUpgrades: airborne + AirborneCondition: airborne MoveIntoShroud: false TakeoffSound: dropup1.aud LandingSound: dropdwn1.aud diff --git a/mods/ts/rules/defaults.yaml b/mods/ts/rules/defaults.yaml index fbea23e652..311bc01e03 100644 --- a/mods/ts/rules/defaults.yaml +++ b/mods/ts/rules/defaults.yaml @@ -569,8 +569,8 @@ SelectionDecorations: Palette: pips Aircraft: - AirborneUpgrades: airborne - CruisingUpgrades: cruising + AirborneCondition: airborne + CruisingCondition: cruising RepairBuildings: gadept RearmBuildings: gahpad, nahpad LandWhenIdle: false @@ -615,8 +615,8 @@ QuantizedFacings: 0 CameraPitch: 90 Aircraft: - AirborneUpgrades: airborne - CruisingUpgrades: cruising + AirborneCondition: airborne + CruisingCondition: cruising Health: HP: 280 Armor: