diff --git a/OpenRA.Game/Effects/MoveFlash.cs b/OpenRA.Game/Effects/MoveFlash.cs deleted file mode 100755 index 1f457c199b..0000000000 --- a/OpenRA.Game/Effects/MoveFlash.cs +++ /dev/null @@ -1,46 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2010 The OpenRA Developers (see AUTHORS) - * This file is part of OpenRA, which is free software. It is made - * available to you under the terms of the GNU General Public License - * as published by the Free Software Foundation. For more information, - * see LICENSE. - */ -#endregion - -using System.Collections.Generic; -using OpenRA.Graphics; -using OpenRA.Traits; - -namespace OpenRA.Effects -{ - public class MoveFlash : IEffect - { - Animation anim = new Animation("moveflsh"); - float2 pos; - - - public MoveFlash( World world, int2 cell ) - { - this.pos = Game.CellSize * (cell + new float2(0.5f, 0.5f)); - anim.PlayThen( "idle", - () => world.AddFrameEndTask( - w => w.Remove( this ) ) ); - } - - public MoveFlash( World world, float2 pos ) - { - this.pos = pos; - anim.PlayThen( "idle", - () => world.AddFrameEndTask( - w => w.Remove( this ) ) ); - } - - public void Tick( World world ) { anim.Tick(); } - - public IEnumerable Render() - { - yield return new Renderable(anim.Image, pos - .5f * anim.Image.size, "shadow", (int)pos.Y); - } - } -} diff --git a/OpenRA.Game/OpenRA.Game.csproj b/OpenRA.Game/OpenRA.Game.csproj index c2762c1f3d..120b90da51 100755 --- a/OpenRA.Game/OpenRA.Game.csproj +++ b/OpenRA.Game/OpenRA.Game.csproj @@ -87,7 +87,6 @@ - diff --git a/OpenRA.Game/Traits/DrawLineToTarget.cs b/OpenRA.Game/Traits/DrawLineToTarget.cs index 6a2892c494..dee9cf7cef 100644 --- a/OpenRA.Game/Traits/DrawLineToTarget.cs +++ b/OpenRA.Game/Traits/DrawLineToTarget.cs @@ -9,7 +9,8 @@ #endregion using System.Drawing; -using OpenRA.Graphics; +using OpenRA.Graphics; +using OpenRA.Effects; namespace OpenRA.Traits { @@ -69,6 +70,34 @@ namespace OpenRA.Traits Game.Renderer.LineRenderer.DrawLine(p + new float2(1, -1), p + new float2(-1, -1), c, c); } } + } + + public static class LineTargetExts + { + public static void SetTargetLine(this Actor self, Target target, Color color) + { + self.SetTargetLine(target, color, true); + } + + public static void SetTargetLine(this Actor self, Target target, Color color, bool display) + { + if (self.Owner != self.World.LocalPlayer) + return; + + self.World.AddFrameEndTask(w => + { + if (self.Destroyed) return; + if (target.IsActor && display) + w.Add(new FlashTarget(target.Actor)); + + var line = self.TraitOrDefault(); + if (line != null) + if (display) + line.SetTarget(self, target, color); + else + line.SetTargetSilently(self, target, color); + }); + } } } diff --git a/OpenRA.Mods.Cnc/TiberiumRefineryDockAction.cs b/OpenRA.Mods.Cnc/TiberiumRefineryDockAction.cs index 8a044d422d..750a12edff 100644 --- a/OpenRA.Mods.Cnc/TiberiumRefineryDockAction.cs +++ b/OpenRA.Mods.Cnc/TiberiumRefineryDockAction.cs @@ -56,14 +56,7 @@ namespace OpenRA.Mods.Cnc if (harvester.LastHarvestedCell != int2.Zero) { harv.QueueActivity( mobile.MoveTo(harvester.LastHarvestedCell, 5) ); - if (harv.Owner == self.World.LocalPlayer) - self.World.AddFrameEndTask( w => - { - if (harv.Destroyed) return; - var line = harv.TraitOrDefault(); - if (line != null) - line.SetTargetSilently(harv, Target.FromCell(harvester.LastHarvestedCell), Color.Green); - }); + harv.SetTargetLine(Target.FromCell(harvester.LastHarvestedCell), Color.Red, false); } } harv.QueueActivity( new Harvest() ); diff --git a/OpenRA.Mods.RA/Activities/UnloadCargo.cs b/OpenRA.Mods.RA/Activities/UnloadCargo.cs index 3b883286b6..4e5d928e7c 100644 --- a/OpenRA.Mods.RA/Activities/UnloadCargo.cs +++ b/OpenRA.Mods.RA/Activities/UnloadCargo.cs @@ -73,12 +73,7 @@ namespace OpenRA.Mods.RA.Activities mobile.SetPosition(actor, self.Location); actor.CancelActivity(); actor.QueueActivity(mobile.MoveTo(exitTile.Value, 0)); - if (actor.Owner == self.World.LocalPlayer) - { - var line = actor.TraitOrDefault(); - if (line != null) - line.SetTargetSilently(self, Target.FromCell(exitTile.Value), Color.Green); - } + actor.SetTargetLine(Target.FromCell(exitTile.Value), Color.Green, false); }); return this; diff --git a/OpenRA.Mods.RA/Air/Helicopter.cs b/OpenRA.Mods.RA/Air/Helicopter.cs index ffc4f910bc..ae5b77aa21 100755 --- a/OpenRA.Mods.RA/Air/Helicopter.cs +++ b/OpenRA.Mods.RA/Air/Helicopter.cs @@ -78,17 +78,8 @@ namespace OpenRA.Mods.RA.Air if (order.OrderString == "Move") { var target = order.TargetLocation.Clamp(self.World.Map.Bounds); - - if (self.Owner == self.World.LocalPlayer) - self.World.AddFrameEndTask(w => - { - if (self.Destroyed) return; - w.Add(new MoveFlash(self.World, order.TargetLocation)); - var line = self.TraitOrDefault(); - if (line != null) - line.SetTarget(self, Target.FromCell(target), Color.Green); - }); + self.SetTargetLine(Target.FromCell(target), Color.Green); self.CancelActivity(); self.QueueActivity(new HeliFly(Util.CenterOfCell(target))); @@ -109,15 +100,7 @@ namespace OpenRA.Mods.RA.Air var exit = order.TargetActor.Info.Traits.WithInterface().FirstOrDefault(); var offset = exit != null ? exit.SpawnOffset : int2.Zero; - if (self.Owner == self.World.LocalPlayer) - self.World.AddFrameEndTask(w => - { - if (self.Destroyed) return; - w.Add(new FlashTarget(order.TargetActor)); - var line = self.TraitOrDefault(); - if (line != null) - line.SetTarget(self, Target.FromActor(order.TargetActor), Color.Green); - }); + self.SetTargetLine(Target.FromActor(order.TargetActor), Color.Green); self.CancelActivity(); self.QueueActivity(new HeliFly(order.TargetActor.Trait().PxPosition + offset)); diff --git a/OpenRA.Mods.RA/Air/Plane.cs b/OpenRA.Mods.RA/Air/Plane.cs index 0ab2ba694f..467f0c17de 100755 --- a/OpenRA.Mods.RA/Air/Plane.cs +++ b/OpenRA.Mods.RA/Air/Plane.cs @@ -92,16 +92,7 @@ namespace OpenRA.Mods.RA.Air UnReserve(); var target = order.TargetLocation.Clamp(self.World.Map.Bounds); - if (self.Owner == self.World.LocalPlayer) - self.World.AddFrameEndTask(w => - { - if (self.Destroyed) return; - w.Add(new MoveFlash(self.World, order.TargetLocation)); - var line = self.TraitOrDefault(); - if (line != null) - line.SetTarget(self, Target.FromCell(target), Color.Green); - }); - + self.SetTargetLine(Target.FromCell(target), Color.Green); self.CancelActivity(); self.QueueActivity(Fly.ToCell(target)); } @@ -113,16 +104,7 @@ namespace OpenRA.Mods.RA.Air UnReserve(); var info = self.Info.Traits.Get(); - - if (self.Owner == self.World.LocalPlayer) - self.World.AddFrameEndTask(w => - { - if (self.Destroyed) return; - w.Add(new FlashTarget(order.TargetActor)); - var line = self.TraitOrDefault(); - if (line != null) - line.SetTarget(self, Target.FromActor(order.TargetActor), Color.Green); - }); + self.SetTargetLine(Target.FromOrder(order), Color.Green); self.CancelActivity(); self.QueueActivity(new ReturnToBase(self, order.TargetActor)); diff --git a/OpenRA.Mods.RA/AttackBase.cs b/OpenRA.Mods.RA/AttackBase.cs index 14023923a8..e37e5002a4 100644 --- a/OpenRA.Mods.RA/AttackBase.cs +++ b/OpenRA.Mods.RA/AttackBase.cs @@ -177,18 +177,7 @@ namespace OpenRA.Mods.RA { if( !target.IsValid ) return; self.QueueActivity(queued, GetAttackActivity(self, target, allowMove)); - - if (self.Owner == self.World.LocalPlayer) - self.World.AddFrameEndTask(w => - { - if (self.Destroyed) return; - if (target.IsActor) - w.Add(new FlashTarget(target.Actor)); - - var line = self.TraitOrDefault(); - if (line != null) - line.SetTarget(self, target, Color.Red); - }); + self.SetTargetLine(target, Color.Red); } public void ScanAndAttack(Actor self, bool allowMovement, bool holdStill) diff --git a/OpenRA.Mods.RA/AttackMove.cs b/OpenRA.Mods.RA/AttackMove.cs index adbb82026c..02c4b1b3f1 100644 --- a/OpenRA.Mods.RA/AttackMove.cs +++ b/OpenRA.Mods.RA/AttackMove.cs @@ -52,19 +52,8 @@ namespace OpenRA.Mods.RA AttackMoving = true; TargetLocation = order.TargetLocation; } - - if (self.Owner == self.World.LocalPlayer) - self.World.AddFrameEndTask(w => - { - if (self.Destroyed) return; - if (order.TargetActor != null) - w.Add(new FlashTarget(order.TargetActor)); - - var line = self.TraitOrDefault(); - if (line != null) - if (order.TargetActor != null) line.SetTarget(self, Target.FromOrder(order), Color.Red); - else line.SetTarget(self, Target.FromOrder(order), Color.Red); - }); + + self.SetTargetLine(Target.FromOrder(order), Color.Red); } else { diff --git a/OpenRA.Mods.RA/C4Demolition.cs b/OpenRA.Mods.RA/C4Demolition.cs index ee27be0069..92e5b1d6ce 100644 --- a/OpenRA.Mods.RA/C4Demolition.cs +++ b/OpenRA.Mods.RA/C4Demolition.cs @@ -43,15 +43,7 @@ namespace OpenRA.Mods.RA { if (order.OrderString == "C4") { - if (self.Owner == self.World.LocalPlayer) - self.World.AddFrameEndTask(w => - { - if (self.Destroyed) return; - w.Add(new FlashTarget(order.TargetActor)); - var line = self.TraitOrDefault(); - if (line != null) - line.SetTarget(self, Target.FromOrder(order), Color.Red); - }); + self.SetTargetLine(Target.FromOrder(order), Color.Red); var mobile = self.Trait(); self.CancelActivity(); diff --git a/OpenRA.Mods.RA/ChronoshiftDeploy.cs b/OpenRA.Mods.RA/ChronoshiftDeploy.cs index 931a5baefa..a9b33d15a1 100644 --- a/OpenRA.Mods.RA/ChronoshiftDeploy.cs +++ b/OpenRA.Mods.RA/ChronoshiftDeploy.cs @@ -55,7 +55,6 @@ namespace OpenRA.Mods.RA if (self.Owner == self.World.LocalPlayer) { self.World.CancelInputMode(); - self.World.AddFrameEndTask(w => w.Add(new MoveFlash(self.World, order.TargetLocation))); } self.CancelActivity(); diff --git a/OpenRA.Mods.RA/EngineerCapture.cs b/OpenRA.Mods.RA/EngineerCapture.cs index 7b2edfc1d4..0ef5d55628 100644 --- a/OpenRA.Mods.RA/EngineerCapture.cs +++ b/OpenRA.Mods.RA/EngineerCapture.cs @@ -47,16 +47,8 @@ namespace OpenRA.Mods.RA { if (order.OrderString == "CaptureBuilding") { - if (self.Owner == self.World.LocalPlayer) - self.World.AddFrameEndTask(w => - { - if (self.Destroyed) return; - w.Add(new FlashTarget(order.TargetActor)); - var line = self.TraitOrDefault(); - if (line != null) - line.SetTarget(self, Target.FromOrder(order), Color.Red); - }); - + self.SetTargetLine(Target.FromOrder(order), Color.Red); + self.CancelActivity(); self.QueueActivity(new Enter(order.TargetActor)); //self.QueueActivity(new Move(order.TargetActor.Location, order.TargetActor)); diff --git a/OpenRA.Mods.RA/EngineerRepair.cs b/OpenRA.Mods.RA/EngineerRepair.cs index 280c2d6a7d..b28ef926c4 100644 --- a/OpenRA.Mods.RA/EngineerRepair.cs +++ b/OpenRA.Mods.RA/EngineerRepair.cs @@ -46,16 +46,8 @@ namespace OpenRA.Mods.RA if (order.OrderString == "EngineerRepair" && order.TargetActor.GetDamageState() > DamageState.Undamaged) { - if (self.Owner == self.World.LocalPlayer) - self.World.AddFrameEndTask(w => - { - if (self.Destroyed) return; - w.Add(new FlashTarget(order.TargetActor)); - var line = self.TraitOrDefault(); - if (line != null) - line.SetTarget(self, Target.FromOrder(order), Color.Yellow); - }); - + self.SetTargetLine(Target.FromOrder(order), Color.Yellow); + self.CancelActivity(); self.QueueActivity(new Enter(order.TargetActor)); //self.QueueActivity(new Move(order.TargetActor.Location, order.TargetActor)); diff --git a/OpenRA.Mods.RA/Harvester.cs b/OpenRA.Mods.RA/Harvester.cs index ab0d776844..8c7e0a8371 100644 --- a/OpenRA.Mods.RA/Harvester.cs +++ b/OpenRA.Mods.RA/Harvester.cs @@ -123,15 +123,7 @@ namespace OpenRA.Mods.RA { if (order.OrderString == "Harvest") { - if (self.Owner == self.World.LocalPlayer) - self.World.AddFrameEndTask(w => - { - if (self.Destroyed) return; - w.Add(new MoveFlash(self.World, order.TargetLocation)); - var line = self.TraitOrDefault(); - if (line != null) - line.SetTarget(self, Target.FromOrder(order), Color.Red); - }); + self.SetTargetLine(Target.FromOrder(order), Color.Red); var mobile = self.Trait(); self.CancelActivity(); @@ -151,16 +143,8 @@ namespace OpenRA.Mods.RA if (IsEmpty) return; - if (self.Owner == self.World.LocalPlayer) - self.World.AddFrameEndTask(w => - { - if (self.Destroyed) return; - w.Add(new FlashTarget(order.TargetActor)); - var line = self.TraitOrDefault(); - if (line != null) - line.SetTarget(self, Target.FromOrder(order), Color.Green); - }); - + self.SetTargetLine(Target.FromOrder(order), Color.Green); + self.CancelActivity(); self.QueueActivity(new DeliverResources()); } diff --git a/OpenRA.Mods.RA/Move/Mobile.cs b/OpenRA.Mods.RA/Move/Mobile.cs index a199fc53c0..61ba72f68c 100755 --- a/OpenRA.Mods.RA/Move/Mobile.cs +++ b/OpenRA.Mods.RA/Move/Mobile.cs @@ -192,17 +192,7 @@ namespace OpenRA.Mods.RA.Move qa.Insert(new Move(currentLocation, 8)); - if (self.Owner == self.World.LocalPlayer) - self.World.AddFrameEndTask( - w => - { - if (self.Destroyed) return; - w.Add(new MoveFlash(self.World, targetLocation)); - var line = self.TraitOrDefault(); - if (line != null) - line.SetTarget(self, Target.FromCell(currentLocation), - Color.Green); - }); + self.SetTargetLine(Target.FromCell(currentLocation), Color.Green); }); self.QueueActivity(queued ? ph : ph.Run(self)); @@ -352,14 +342,7 @@ namespace OpenRA.Mods.RA.Move if (moveTo.HasValue) { self.CancelActivity(); - if (self.Owner == self.World.LocalPlayer) - self.World.AddFrameEndTask(w => - { - if (self.Destroyed) return; - var line = self.TraitOrDefault(); - if (line != null) - line.SetTargetSilently(self, Target.FromCell(moveTo.Value), Color.Green); - }); + self.SetTargetLine(Target.FromCell(moveTo.Value), Color.Green, false); self.QueueActivity(new Move(moveTo.Value, 0)); Log.Write("debug", "OnNudge #{0} from {1} to {2}", diff --git a/OpenRA.Mods.RA/OreRefineryDockAction.cs b/OpenRA.Mods.RA/OreRefineryDockAction.cs index 1abd6fc795..aec268a308 100644 --- a/OpenRA.Mods.RA/OreRefineryDockAction.cs +++ b/OpenRA.Mods.RA/OreRefineryDockAction.cs @@ -44,14 +44,7 @@ namespace OpenRA.Mods.RA { var mobile = harv.Trait(); harv.QueueActivity( mobile.MoveTo(harvester.LastHarvestedCell, 5) ); - if (harv.Owner == self.World.LocalPlayer) - self.World.AddFrameEndTask( w => - { - if (harv.Destroyed) return; - var line = harv.TraitOrDefault(); - if (line != null) - line.SetTargetSilently(harv, Target.FromCell(harvester.LastHarvestedCell), Color.Green); - }); + harv.SetTargetLine(Target.FromCell(harvester.LastHarvestedCell), Color.Red, false); } harv.QueueActivity( new Harvest() ); }); diff --git a/OpenRA.Mods.RA/Passenger.cs b/OpenRA.Mods.RA/Passenger.cs index 11507841e0..cfd83bffad 100644 --- a/OpenRA.Mods.RA/Passenger.cs +++ b/OpenRA.Mods.RA/Passenger.cs @@ -78,16 +78,8 @@ namespace OpenRA.Mods.RA if (!CanEnter(order.TargetActor)) return; if (!IsCorrectCargoType(order.TargetActor)) return; - if (self.Owner == self.World.LocalPlayer) - self.World.AddFrameEndTask(w => - { - if (self.Destroyed) return; - w.Add(new FlashTarget(order.TargetActor)); - var line = self.TraitOrDefault(); - if (line != null) - line.SetTarget(self, Target.FromOrder(order), Color.Green); - }); - + self.SetTargetLine(Target.FromOrder(order), Color.Green); + var mobile = self.Trait(); self.CancelActivity(); self.QueueActivity(mobile.MoveTo(order.TargetActor.Location, 1)); diff --git a/OpenRA.Mods.RA/Production.cs b/OpenRA.Mods.RA/Production.cs index 7fa16bc9ec..7f2bb53723 100755 --- a/OpenRA.Mods.RA/Production.cs +++ b/OpenRA.Mods.RA/Production.cs @@ -76,16 +76,7 @@ namespace OpenRA.Mods.RA newUnit.QueueActivity(mobile.MoveTo(target, 1)); } - if (newUnit.Owner == self.World.LocalPlayer) - { - self.World.AddFrameEndTask(w => - { - var line = newUnit.TraitOrDefault(); - if (line != null) - line.SetTargetSilently(newUnit, Target.FromCell(target), Color.Green); - }); - } - + newUnit.SetTargetLine(Target.FromCell(target), Color.Green, false); foreach (var t in self.TraitsImplementing()) t.UnitProduced(self, newUnit, exit); diff --git a/OpenRA.Mods.RA/Repairable.cs b/OpenRA.Mods.RA/Repairable.cs index 3a61afa328..7c3eddcc08 100644 --- a/OpenRA.Mods.RA/Repairable.cs +++ b/OpenRA.Mods.RA/Repairable.cs @@ -75,25 +75,19 @@ namespace OpenRA.Mods.RA var mobile = self.Trait(); var rp = order.TargetActor.TraitOrDefault(); - - if (self.Owner == self.World.LocalPlayer) - self.World.AddFrameEndTask(w => - { - if (self.Destroyed) return; - w.Add(new FlashTarget(order.TargetActor)); - var line = self.TraitOrDefault(); - if (line != null) - line.SetTarget(self, Target.FromOrder(order), Color.Green); - }); - + self.SetTargetLine(Target.FromOrder(order), Color.Green); + self.CancelActivity(); self.QueueActivity(mobile.MoveTo(Traits.Util.CellContaining(order.TargetActor.CenterLocation), order.TargetActor)); self.QueueActivity(new Rearm()); self.QueueActivity(new Repair(order.TargetActor)); if (rp != null) - self.QueueActivity(new CallFunc( - () => self.QueueActivity(mobile.MoveTo(rp.rallyPoint, order.TargetActor)))); + self.QueueActivity(new CallFunc(() => + { + self.SetTargetLine(Target.FromCell(rp.rallyPoint), Color.Green); + self.QueueActivity(mobile.MoveTo(rp.rallyPoint, order.TargetActor)); + })); } } } diff --git a/OpenRA.Mods.RA/RepairableNear.cs b/OpenRA.Mods.RA/RepairableNear.cs index 4fab2f03ad..87561de37b 100644 --- a/OpenRA.Mods.RA/RepairableNear.cs +++ b/OpenRA.Mods.RA/RepairableNear.cs @@ -67,14 +67,7 @@ namespace OpenRA.Mods.RA var mobile = self.Trait(); self.CancelActivity(); self.QueueActivity(mobile.MoveWithinRange(order.TargetActor, 1)); - if (self.Owner == self.World.LocalPlayer) - self.World.AddFrameEndTask( w => - { - if (self.Destroyed) return; - var line = self.TraitOrDefault(); - if (line != null) - line.SetTargetSilently(self, Target.FromActor(order.TargetActor), Color.Green); - }); + self.SetTargetLine(Target.FromOrder(order), Color.Green, false); self.QueueActivity(new Repair(order.TargetActor)); } } diff --git a/OpenRA.Mods.RA/Spy.cs b/OpenRA.Mods.RA/Spy.cs index a1bc50c552..dcc7a64b9a 100644 --- a/OpenRA.Mods.RA/Spy.cs +++ b/OpenRA.Mods.RA/Spy.cs @@ -40,14 +40,7 @@ namespace OpenRA.Mods.RA { self.CancelActivity(); self.QueueActivity(new MoveAdjacentTo(order.TargetActor)); - if (self.Owner == self.World.LocalPlayer) - self.World.AddFrameEndTask( w => - { - if (self.Destroyed) return; - var line = self.TraitOrDefault(); - if (line != null) - line.SetTargetSilently(self, Target.FromActor(order.TargetActor), Color.Green); - }); + self.SetTargetLine(Target.FromOrder(order), Color.Red); self.QueueActivity(new Infiltrate(order.TargetActor)); } }