diff --git a/OpenRA.Mods.Common/Traits/SupportPowers/GrantUpgradePower.cs b/OpenRA.Mods.Common/Traits/SupportPowers/GrantUpgradePower.cs index 368074de39..49b8ad1d21 100644 --- a/OpenRA.Mods.Common/Traits/SupportPowers/GrantUpgradePower.cs +++ b/OpenRA.Mods.Common/Traits/SupportPowers/GrantUpgradePower.cs @@ -46,10 +46,10 @@ namespace OpenRA.Mods.Common.Traits this.info = info; } - public override IOrderGenerator OrderGenerator(string order, SupportPowerManager manager) + public override void SelectTarget(Actor self, string order, SupportPowerManager manager) { Game.Sound.PlayToPlayer(manager.Self.Owner, Info.SelectTargetSound); - return new SelectTarget(Self.World, order, manager, this); + self.World.OrderGenerator = new SelectUpgradeTarget(Self.World, order, manager, this); } public override void Activate(Actor self, Order order, SupportPowerManager manager) @@ -101,7 +101,7 @@ namespace OpenRA.Mods.Common.Traits }); } - class SelectTarget : IOrderGenerator + class SelectUpgradeTarget : IOrderGenerator { readonly GrantUpgradePower power; readonly int range; @@ -109,7 +109,7 @@ namespace OpenRA.Mods.Common.Traits readonly SupportPowerManager manager; readonly string order; - public SelectTarget(World world, string order, SupportPowerManager manager, GrantUpgradePower power) + public SelectUpgradeTarget(World world, string order, SupportPowerManager manager, GrantUpgradePower power) { // Clear selection if using Left-Click Orders if (Game.Settings.Game.UseClassicMouseStyle) diff --git a/OpenRA.Mods.Common/Traits/SupportPowers/SupportPower.cs b/OpenRA.Mods.Common/Traits/SupportPowers/SupportPower.cs index d05c1959d8..2fa461bb18 100644 --- a/OpenRA.Mods.Common/Traits/SupportPowers/SupportPower.cs +++ b/OpenRA.Mods.Common/Traits/SupportPowers/SupportPower.cs @@ -81,6 +81,12 @@ namespace OpenRA.Mods.Common.Traits Game.Sound.PlayToPlayer(self.Owner, Info.EndChargeSound); } + public virtual void SelectTarget(Actor self, string order, SupportPowerManager manager) + { + Game.Sound.PlayToPlayer(manager.Self.Owner, Info.SelectTargetSound); + self.World.OrderGenerator = new SelectGenericPowerTarget(order, manager, info.Cursor, MouseButton.Left); + } + public virtual void Activate(Actor self, Order order, SupportPowerManager manager) { if (Info.DisplayRadarPing && manager.RadarPings != null) @@ -92,11 +98,5 @@ namespace OpenRA.Mods.Common.Traits Info.RadarPingDuration); } } - - public virtual IOrderGenerator OrderGenerator(string order, SupportPowerManager manager) - { - Game.Sound.PlayToPlayer(manager.Self.Owner, Info.SelectTargetSound); - return new SelectGenericPowerTarget(order, manager, info.Cursor, MouseButton.Left); - } } } diff --git a/OpenRA.Mods.Common/Traits/SupportPowers/SupportPowerManager.cs b/OpenRA.Mods.Common/Traits/SupportPowers/SupportPowerManager.cs index 908ae81489..eeb32378f8 100644 --- a/OpenRA.Mods.Common/Traits/SupportPowers/SupportPowerManager.cs +++ b/OpenRA.Mods.Common/Traits/SupportPowers/SupportPowerManager.cs @@ -222,7 +222,11 @@ namespace OpenRA.Mods.Common.Traits if (!Ready) return; - manager.Self.World.OrderGenerator = Instances.First().OrderGenerator(key, manager); + var power = Instances.FirstOrDefault(); + if (power == null) + return; + + power.SelectTarget(power.Self, key, manager); } public void Activate(Order order) diff --git a/OpenRA.Mods.RA/Traits/SupportPowers/ChronoshiftPower.cs b/OpenRA.Mods.RA/Traits/SupportPowers/ChronoshiftPower.cs index a9ebfd1328..de66933d82 100644 --- a/OpenRA.Mods.RA/Traits/SupportPowers/ChronoshiftPower.cs +++ b/OpenRA.Mods.RA/Traits/SupportPowers/ChronoshiftPower.cs @@ -35,10 +35,10 @@ namespace OpenRA.Mods.RA.Traits { public ChronoshiftPower(Actor self, ChronoshiftPowerInfo info) : base(self, info) { } - public override IOrderGenerator OrderGenerator(string order, SupportPowerManager manager) + public override void SelectTarget(Actor self, string order, SupportPowerManager manager) { Game.Sound.PlayToPlayer(manager.Self.Owner, Info.SelectTargetSound); - return new SelectTarget(Self.World, order, manager, this); + self.World.OrderGenerator = new SelectChronoshiftTarget(Self.World, order, manager, this); } public override void Activate(Actor self, Order order, SupportPowerManager manager) @@ -94,7 +94,7 @@ namespace OpenRA.Mods.RA.Traits return true; } - class SelectTarget : IOrderGenerator + class SelectChronoshiftTarget : IOrderGenerator { readonly ChronoshiftPower power; readonly int range; @@ -102,7 +102,7 @@ namespace OpenRA.Mods.RA.Traits readonly SupportPowerManager manager; readonly string order; - public SelectTarget(World world, string order, SupportPowerManager manager, ChronoshiftPower power) + public SelectChronoshiftTarget(World world, string order, SupportPowerManager manager, ChronoshiftPower power) { // Clear selection if using Left-Click Orders if (Game.Settings.Game.UseClassicMouseStyle)