diff --git a/OpenRa.Game/Effects/FlashTarget.cs b/OpenRa.Game/Effects/FlashTarget.cs new file mode 100644 index 0000000000..21e0fe8c85 --- /dev/null +++ b/OpenRa.Game/Effects/FlashTarget.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using OpenRa.Game.Traits; +using OpenRa.Game.Graphics; + +namespace OpenRa.Game.Effects +{ + class FlashTarget : IEffect + { + Actor target; + int remainingTicks = 4; + + public FlashTarget(Actor target) + { + this.target = target; + foreach (var e in Game.world.Effects.OfType().Where(a => a.target == target).ToArray()) + Game.world.Remove(e); + } + + public void Tick() + { + if (--remainingTicks == 0) + Game.world.AddFrameEndTask(w => w.Remove(this)); + } + + public IEnumerable Render() + { + if (remainingTicks % 2 == 0) + foreach (var r in target.Render()) + yield return r.WithPalette(PaletteType.Highlight); + } + } +} diff --git a/OpenRa.Game/OpenRa.Game.csproj b/OpenRa.Game/OpenRa.Game.csproj index 939be98dbc..112d4802ea 100644 --- a/OpenRa.Game/OpenRa.Game.csproj +++ b/OpenRa.Game/OpenRa.Game.csproj @@ -82,6 +82,7 @@ + diff --git a/OpenRa.Game/Traits/AttackBase.cs b/OpenRa.Game/Traits/AttackBase.cs index ebb76cbb6d..d3b713aa66 100644 --- a/OpenRa.Game/Traits/AttackBase.cs +++ b/OpenRa.Game/Traits/AttackBase.cs @@ -155,6 +155,9 @@ namespace OpenRa.Game.Traits { self.CancelActivity(); QueueAttack(self, order); + + if (self.Owner == Game.LocalPlayer) + Game.world.AddFrameEndTask(w => w.Add(new FlashTarget(order.TargetActor))); } else target = null;