diff --git a/OpenRA.Mods.RA/SupportPowers/AirstrikePower.cs b/OpenRA.Mods.RA/SupportPowers/AirstrikePower.cs index 01fe5c4e24..496e536e4c 100644 --- a/OpenRA.Mods.RA/SupportPowers/AirstrikePower.cs +++ b/OpenRA.Mods.RA/SupportPowers/AirstrikePower.cs @@ -13,6 +13,7 @@ using System.Collections.Generic; using System.Linq; using OpenRA.Mods.RA.Activities; using OpenRA.Mods.RA.Air; +using OpenRA.Mods.RA.Effects; using OpenRA.Primitives; using OpenRA.Traits; @@ -54,6 +55,20 @@ namespace OpenRA.Mods.RA { base.Activate(self, order, manager); + Beacon beacon = null; + if (Info.DisplayBeacon) + { + beacon = new Beacon( + order.Player, + order.TargetLocation.CenterPosition, + -1, + Info.BeaconPalettePrefix, + Info.BeaconPoster, + Info.BeaconPosterPalette); + + self.World.Add(beacon); + } + var info = Info as AirstrikePowerInfo; var attackFacing = Util.QuantizeFacing(self.World.SharedRandom.Next(256), info.QuantizedFacings) * (256 / info.QuantizedFacings); var attackRotation = WRot.FromFacing(attackFacing); diff --git a/OpenRA.Mods.RA/SupportPowers/NukePower.cs b/OpenRA.Mods.RA/SupportPowers/NukePower.cs index 399fddd4ca..b4f997ec1d 100755 --- a/OpenRA.Mods.RA/SupportPowers/NukePower.cs +++ b/OpenRA.Mods.RA/SupportPowers/NukePower.cs @@ -68,6 +68,20 @@ namespace OpenRA.Mods.RA { base.Activate(self, order, manager); + Beacon beacon = null; + if (Info.DisplayBeacon) + { + beacon = new Beacon( + order.Player, + order.TargetLocation.CenterPosition, + -1, + Info.BeaconPalettePrefix, + Info.BeaconPoster, + Info.BeaconPosterPalette); + + self.World.Add(beacon); + } + if (self.Owner.IsAlliedWith(self.World.RenderPlayer)) Sound.Play(Info.LaunchSound); else diff --git a/OpenRA.Mods.RA/SupportPowers/SupportPower.cs b/OpenRA.Mods.RA/SupportPowers/SupportPower.cs index bf1d9067a2..27862436a1 100755 --- a/OpenRA.Mods.RA/SupportPowers/SupportPower.cs +++ b/OpenRA.Mods.RA/SupportPowers/SupportPower.cs @@ -31,11 +31,12 @@ namespace OpenRA.Mods.RA public readonly bool DisplayTimer = false; + [Desc("Beacons are only supported on the Airstrike and Nuke powers")] public readonly bool DisplayBeacon = false; - public readonly int BeaconDuration = 10 * 25; public readonly string BeaconPalettePrefix = "player"; public readonly string BeaconPoster = null; public readonly string BeaconPosterPalette = "chrome"; + public readonly bool DisplayRadarPing = false; public readonly int RadarPingDuration = 5 * 25; @@ -49,7 +50,6 @@ namespace OpenRA.Mods.RA { public readonly Actor self; public readonly SupportPowerInfo Info; - protected Beacon beacon; protected RadarPing ping; public SupportPower(Actor self, SupportPowerInfo info) @@ -70,25 +70,14 @@ namespace OpenRA.Mods.RA public virtual void Activate(Actor self, Order order, SupportPowerManager manager) { - if (Info.DisplayBeacon) - { - beacon = new Beacon( - order.Player, - order.TargetLocation.CenterPosition, - Info.BeaconDuration, - Info.BeaconPalettePrefix, - Info.BeaconPoster, - Info.BeaconPosterPalette); - - self.World.Add(beacon); - } - if (Info.DisplayRadarPing && manager.RadarPings != null) + { ping = manager.RadarPings.Value.Add( () => order.Player.IsAlliedWith(self.World.RenderPlayer), order.TargetLocation.CenterPosition, order.Player.Color.RGB, Info.RadarPingDuration); + } } public virtual IOrderGenerator OrderGenerator(string order, SupportPowerManager manager)