From 26a72fff5b1a75045908277aec975de22d9b05f9 Mon Sep 17 00:00:00 2001 From: Taryn Hill Date: Thu, 30 Apr 2015 22:32:26 -0500 Subject: [PATCH 1/3] Move Cursor field to SupportPower. --- .../Traits/SupportPowers/IonCannonPower.cs | 15 +++------- .../Traits/SupportPowers/NukePower.cs | 28 +++++++------------ .../Traits/SupportPowers/SupportPower.cs | 7 ++++- 3 files changed, 20 insertions(+), 30 deletions(-) diff --git a/OpenRA.Mods.Cnc/Traits/SupportPowers/IonCannonPower.cs b/OpenRA.Mods.Cnc/Traits/SupportPowers/IonCannonPower.cs index b7c9af5e59..0eedfc3af1 100644 --- a/OpenRA.Mods.Cnc/Traits/SupportPowers/IonCannonPower.cs +++ b/OpenRA.Mods.Cnc/Traits/SupportPowers/IonCannonPower.cs @@ -35,23 +35,17 @@ namespace OpenRA.Mods.Cnc.Traits [Desc("Apply the weapon impact this many ticks into the effect")] public readonly int WeaponDelay = 7; - public readonly string Cursor = "ioncannon"; public override object Create(ActorInitializer init) { return new IonCannonPower(init.Self, this); } } class IonCannonPower : SupportPower { - public IonCannonPower(Actor self, IonCannonPowerInfo info) : base(self, info) { } + readonly IonCannonPowerInfo info; - public override IOrderGenerator OrderGenerator(string order, SupportPowerManager manager) + public IonCannonPower(Actor self, IonCannonPowerInfo info) + : base(self, info) { - // Clear selection if using Left-Click Orders - if (Game.Settings.Game.UseClassicMouseStyle) - manager.Self.World.Selection.Clear(); - - Sound.PlayToPlayer(manager.Self.Owner, Info.SelectTargetSound); - var info = Info as IonCannonPowerInfo; - return new SelectGenericPowerTarget(order, manager, info.Cursor, MouseButton.Left); + this.info = info; } public override void Activate(Actor self, Order order, SupportPowerManager manager) @@ -60,7 +54,6 @@ namespace OpenRA.Mods.Cnc.Traits self.World.AddFrameEndTask(w => { - var info = Info as IonCannonPowerInfo; Sound.Play(Info.LaunchSound, self.World.Map.CenterOfCell(order.TargetLocation)); w.Add(new IonCannon(self.Owner, info.Weapon, w, order.TargetLocation, info.Effect, info.EffectPalette, info.WeaponDelay)); diff --git a/OpenRA.Mods.Common/Traits/SupportPowers/NukePower.cs b/OpenRA.Mods.Common/Traits/SupportPowers/NukePower.cs index 7c0d0cc6ce..63cd0042ba 100644 --- a/OpenRA.Mods.Common/Traits/SupportPowers/NukePower.cs +++ b/OpenRA.Mods.Common/Traits/SupportPowers/NukePower.cs @@ -45,26 +45,19 @@ namespace OpenRA.Mods.Common.Traits [Desc("Amount of time after detonation to remove the camera")] public readonly int CameraRemoveDelay = 25; - public readonly string Cursor = "nuke"; - public override object Create(ActorInitializer init) { return new NukePower(init.Self, this); } } class NukePower : SupportPower { + readonly NukePowerInfo info; IBodyOrientation body; public NukePower(Actor self, NukePowerInfo info) : base(self, info) { body = self.Trait(); - } - - public override IOrderGenerator OrderGenerator(string order, SupportPowerManager manager) - { - Sound.PlayToPlayer(manager.Self.Owner, Info.SelectTargetSound); - var info = Info as NukePowerInfo; - return new SelectGenericPowerTarget(order, manager, info.Cursor, MouseButton.Left); + this.info = info; } public override void Activate(Actor self, Order order, SupportPowerManager manager) @@ -76,31 +69,30 @@ namespace OpenRA.Mods.Common.Traits else Sound.Play(Info.IncomingSound); - var npi = Info as NukePowerInfo; var rb = self.Trait(); rb.PlayCustomAnim(self, "active"); var targetPosition = self.World.Map.CenterOfCell(order.TargetLocation); - var missile = new NukeLaunch(self.Owner, npi.MissileWeapon, - self.CenterPosition + body.LocalToWorld(npi.SpawnOffset), + var missile = new NukeLaunch(self.Owner, info.MissileWeapon, + self.CenterPosition + body.LocalToWorld(info.SpawnOffset), targetPosition, - npi.FlightVelocity, npi.FlightDelay, npi.SkipAscent); + info.FlightVelocity, info.FlightDelay, info.SkipAscent); self.World.AddFrameEndTask(w => w.Add(missile)); - if (npi.CameraActor != null) + if (info.CameraActor != null) { - var camera = self.World.CreateActor(false, npi.CameraActor, new TypeDictionary + var camera = self.World.CreateActor(false, info.CameraActor, new TypeDictionary { new LocationInit(order.TargetLocation), new OwnerInit(self.Owner), }); - camera.QueueActivity(new Wait(npi.CameraSpawnAdvance + npi.CameraRemoveDelay)); + camera.QueueActivity(new Wait(info.CameraSpawnAdvance + info.CameraRemoveDelay)); camera.QueueActivity(new RemoveSelf()); Action addCamera = () => self.World.AddFrameEndTask(w => w.Add(camera)); - self.World.AddFrameEndTask(w => w.Add(new DelayedAction(npi.FlightDelay - npi.CameraSpawnAdvance, addCamera))); + self.World.AddFrameEndTask(w => w.Add(new DelayedAction(info.FlightDelay - info.CameraSpawnAdvance, addCamera))); } if (Info.DisplayBeacon) @@ -122,7 +114,7 @@ namespace OpenRA.Mods.Common.Traits self.World.AddFrameEndTask(w => { w.Add(beacon); - w.Add(new DelayedAction(npi.FlightDelay - npi.BeaconRemoveAdvance, removeBeacon)); + w.Add(new DelayedAction(info.FlightDelay - info.BeaconRemoveAdvance, removeBeacon)); }); } } diff --git a/OpenRA.Mods.Common/Traits/SupportPowers/SupportPower.cs b/OpenRA.Mods.Common/Traits/SupportPowers/SupportPower.cs index a1fb516512..f7eef8729f 100644 --- a/OpenRA.Mods.Common/Traits/SupportPowers/SupportPower.cs +++ b/OpenRA.Mods.Common/Traits/SupportPowers/SupportPower.cs @@ -22,6 +22,9 @@ namespace OpenRA.Mods.Common.Traits public readonly bool AllowMultiple = false; public readonly bool OneShot = false; + [Desc("Cursor to display for using this support power.")] + public readonly string Cursor = "ability"; + [Desc("If set to true, the support power will be fully charged when it becomes available. " + "Normal rules apply for subsequent charges.")] public readonly bool StartFullyCharged = false; @@ -56,12 +59,14 @@ namespace OpenRA.Mods.Common.Traits public class SupportPower : UpgradableTrait { public readonly Actor Self; + readonly SupportPowerInfo info; protected RadarPing ping; public SupportPower(Actor self, SupportPowerInfo info) : base(info) { Self = self; + this.info = info; } public virtual void Charging(Actor self, string key) @@ -89,7 +94,7 @@ namespace OpenRA.Mods.Common.Traits public virtual IOrderGenerator OrderGenerator(string order, SupportPowerManager manager) { Sound.PlayToPlayer(manager.Self.Owner, Info.SelectTargetSound); - return new SelectGenericPowerTarget(order, manager, "ability", MouseButton.Left); + return new SelectGenericPowerTarget(order, manager, info.Cursor, MouseButton.Left); } } } From 17a16ac8e0566559e825092eb46f958f73a289d1 Mon Sep 17 00:00:00 2001 From: Taryn Hill Date: Fri, 1 May 2015 14:35:29 -0500 Subject: [PATCH 2/3] Restore correct SupportPower cursors in yaml. --- mods/cnc/rules/structures.yaml | 2 ++ mods/d2k/rules/structures.yaml | 1 + mods/ra/rules/structures.yaml | 1 + mods/ts/rules/nod-support.yaml | 1 + 4 files changed, 5 insertions(+) diff --git a/mods/cnc/rules/structures.yaml b/mods/cnc/rules/structures.yaml index 413d247921..976285795f 100644 --- a/mods/cnc/rules/structures.yaml +++ b/mods/cnc/rules/structures.yaml @@ -546,6 +546,7 @@ EYE: IonCannonPower: Prerequisites: ~techlevel.superweapons Icon: ioncannon + Cursor: ioncannon ChargeTime: 180 Description: Ion Cannon LongDesc: Initiate an Ion Cannon strike.\nApplies instant damage to a small area. @@ -588,6 +589,7 @@ TMPL: NukePower: Prerequisites: ~techlevel.superweapons Icon: abomb + Cursor: nuke ChargeTime: 300 Description: Nuclear Strike LongDesc: Launch a tactical nuke.\nApplies heavy damage over a large area. diff --git a/mods/d2k/rules/structures.yaml b/mods/d2k/rules/structures.yaml index 89af14eb61..230fc5d859 100644 --- a/mods/d2k/rules/structures.yaml +++ b/mods/d2k/rules/structures.yaml @@ -807,6 +807,7 @@ palace: Prerequisite: palace.nuke Race: harkonnen NukePower: + Cursor: nuke Icon: deathhand Prerequisites: ~techlevel.superweapons, ~palace.nuke ChargeTime: 300 diff --git a/mods/ra/rules/structures.yaml b/mods/ra/rules/structures.yaml index 354c4e46ac..a9917f57c2 100644 --- a/mods/ra/rules/structures.yaml +++ b/mods/ra/rules/structures.yaml @@ -20,6 +20,7 @@ MSLO: RevealsShroud: Range: 5c0 NukePower: + Cursor: nuke Icon: abomb ChargeTime: 540 Description: Atom Bomb diff --git a/mods/ts/rules/nod-support.yaml b/mods/ts/rules/nod-support.yaml index 93445c9d71..3d699dc15f 100644 --- a/mods/ts/rules/nod-support.yaml +++ b/mods/ts/rules/nod-support.yaml @@ -282,6 +282,7 @@ NAMISL: DisabledOverlay: SupportPowerChargeBar: NukePower: + Cursor: nuke Icon: clustermissile ChargeTime: 540 Description: Cluster Missile From 4f222acf610674b581d90aa14f6549c4cf28d268 Mon Sep 17 00:00:00 2001 From: Taryn Hill Date: Fri, 1 May 2015 14:35:45 -0500 Subject: [PATCH 3/3] Upgrade rule for moving Cursor to SupportPower. --- OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs b/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs index 6ec27b3bee..e6f442919f 100644 --- a/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs +++ b/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs @@ -1460,6 +1460,18 @@ namespace OpenRA.Mods.Common.UtilityCommands } } + if (engineVersion < 20150526) + { + var isNukePower = node.Key == "NukePower"; + var isIonCannonPower = node.Key == "IonCannonPower"; + + if ((isNukePower || isIonCannonPower) && !node.Value.Nodes.Any(n => n.Key == "Cursor")) + { + var cursor = isIonCannonPower ? "ioncannon" : "nuke"; + node.Value.Nodes.Add(new MiniYamlNode("Cursor", cursor)); + } + } + UpgradeWeaponRules(engineVersion, ref node.Value.Nodes, node, depth + 1); } }