From 768265bbd2c20c12b48914a9ff20b0473abbffec Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sun, 27 May 2018 11:36:08 +0000 Subject: [PATCH] Unify TargetFlash handling around Targets. --- OpenRA.Game/Network/Order.cs | 2 +- OpenRA.Mods.Common/ActorExts.cs | 3 +-- .../Orders/RepairOrderGenerator.cs | 2 +- .../Traits/Render/DrawLineToTarget.cs | 18 ------------------ .../WorldInteractionControllerWidget.cs | 18 +++++++++++------- 5 files changed, 14 insertions(+), 29 deletions(-) diff --git a/OpenRA.Game/Network/Order.cs b/OpenRA.Game/Network/Order.cs index 18c9982836..609c3377b3 100644 --- a/OpenRA.Game/Network/Order.cs +++ b/OpenRA.Game/Network/Order.cs @@ -48,7 +48,7 @@ namespace OpenRA public bool IsImmediate; public bool SuppressVisualFeedback; - public Actor VisualFeedbackTarget; + public Target VisualFeedbackTarget; /// /// DEPRECATED: Use Target instead. diff --git a/OpenRA.Mods.Common/ActorExts.cs b/OpenRA.Mods.Common/ActorExts.cs index 4e36fa2a5b..829955ed0e 100644 --- a/OpenRA.Mods.Common/ActorExts.cs +++ b/OpenRA.Mods.Common/ActorExts.cs @@ -70,8 +70,7 @@ namespace OpenRA.Mods.Common var frozen = order.Target.FrozenActor; - // Flashes the frozen proxy - self.SetTargetLine(frozen, targetLine, true); + self.SetTargetLine(order.Target, targetLine, true); // Target is still alive - resolve the real order if (frozen.Actor != null && frozen.Actor.IsInWorld) diff --git a/OpenRA.Mods.Common/Orders/RepairOrderGenerator.cs b/OpenRA.Mods.Common/Orders/RepairOrderGenerator.cs index d1d2749415..ee06431c70 100644 --- a/OpenRA.Mods.Common/Orders/RepairOrderGenerator.cs +++ b/OpenRA.Mods.Common/Orders/RepairOrderGenerator.cs @@ -70,7 +70,7 @@ namespace OpenRA.Mods.Common.Orders if (repairBuilding == null) yield break; - yield return new Order(orderId, underCursor, Target.FromActor(repairBuilding), false) { VisualFeedbackTarget = underCursor }; + yield return new Order(orderId, underCursor, Target.FromActor(repairBuilding), false) { VisualFeedbackTarget = Target.FromActor(underCursor) }; } public void Tick(World world) diff --git a/OpenRA.Mods.Common/Traits/Render/DrawLineToTarget.cs b/OpenRA.Mods.Common/Traits/Render/DrawLineToTarget.cs index a034857d4f..614e22db29 100644 --- a/OpenRA.Mods.Common/Traits/Render/DrawLineToTarget.cs +++ b/OpenRA.Mods.Common/Traits/Render/DrawLineToTarget.cs @@ -121,23 +121,5 @@ namespace OpenRA.Mods.Common.Traits line.SetTarget(self, target, color, display); }); } - - public static void SetTargetLine(this Actor self, FrozenActor target, Color color, bool display) - { - if (self.Owner != self.World.LocalPlayer) - return; - - self.World.AddFrameEndTask(w => - { - if (self.Disposed) - return; - - target.Flash(); - - var line = self.TraitOrDefault(); - if (line != null) - line.SetTarget(self, Target.FromPos(target.CenterPosition), color, display); - }); - } } } \ No newline at end of file diff --git a/OpenRA.Mods.Common/Widgets/WorldInteractionControllerWidget.cs b/OpenRA.Mods.Common/Widgets/WorldInteractionControllerWidget.cs index 5e6fcc4354..7ccd8aa667 100644 --- a/OpenRA.Mods.Common/Widgets/WorldInteractionControllerWidget.cs +++ b/OpenRA.Mods.Common/Widgets/WorldInteractionControllerWidget.cs @@ -200,17 +200,21 @@ namespace OpenRA.Mods.Common.Widgets continue; if (!flashed && !o.SuppressVisualFeedback) - { - var visualTargetActor = o.VisualFeedbackTarget ?? o.TargetActor; - if (visualTargetActor != null) + { + var visualTarget = o.VisualFeedbackTarget.Type != TargetType.Invalid ? o.VisualFeedbackTarget : o.Target; + if (visualTarget.Type == TargetType.Actor) { - world.AddFrameEndTask(w => w.Add(new FlashTarget(visualTargetActor))); + world.AddFrameEndTask(w => w.Add(new FlashTarget(visualTarget.Actor))); flashed = true; } - else if (o.TargetLocation != CPos.Zero) + else if (visualTarget.Type == TargetType.FrozenActor) { - var pos = world.Map.CenterOfCell(cell); - world.AddFrameEndTask(w => w.Add(new SpriteEffect(pos, world, "moveflsh", "idle", "moveflash", true, true))); + visualTarget.FrozenActor.Flash(); + flashed = true; + } + else if (visualTarget.Type == TargetType.Terrain) + { + world.AddFrameEndTask(w => w.Add(new SpriteEffect(visualTarget.CenterPosition, world, "moveflsh", "idle", "moveflash", true, true))); flashed = true; } }