diff --git a/OpenRA.Game/Traits/DrawLineToTarget.cs b/OpenRA.Game/Traits/DrawLineToTarget.cs index be8861bbaf..ca3f407a2d 100644 --- a/OpenRA.Game/Traits/DrawLineToTarget.cs +++ b/OpenRA.Game/Traits/DrawLineToTarget.cs @@ -38,6 +38,12 @@ namespace OpenRA.Traits this.c = c; } + public void SetTargetSilently(Actor self, Target target, Color c) + { + this.target = target; + this.c = c; + } + public void Render (Actor self) { var force = Game.controller.GetModifiers().HasModifier(Modifiers.Alt); diff --git a/OpenRA.Game/Traits/Mobile.cs b/OpenRA.Game/Traits/Mobile.cs index fb4b1b1114..44fe25c709 100644 --- a/OpenRA.Game/Traits/Mobile.cs +++ b/OpenRA.Game/Traits/Mobile.cs @@ -286,6 +286,13 @@ namespace OpenRA.Traits if (moveTo.HasValue) { self.CancelActivity(); + if (self.Owner == self.World.LocalPlayer) + self.World.AddFrameEndTask(w => + { + var line = self.traits.GetOrDefault(); + if (line != null) + line.SetTargetSilently(self, Target.FromCell(moveTo.Value), Color.Green); + }); self.QueueActivity(new Move(moveTo.Value, 0)); } } diff --git a/OpenRA.Game/Traits/Production.cs b/OpenRA.Game/Traits/Production.cs index d8a7deebae..1c24094ce7 100755 --- a/OpenRA.Game/Traits/Production.cs +++ b/OpenRA.Game/Traits/Production.cs @@ -11,6 +11,7 @@ using System.Collections.Generic; using System.Linq; using OpenRA.GameRules; +using System.Drawing; namespace OpenRA.Traits { @@ -63,11 +64,28 @@ namespace OpenRA.Traits var mobile = newUnit.traits.GetOrDefault(); if (mobile != null) { + int2? target = null; if (pi.ExitOffset != null) - newUnit.QueueActivity(new Activities.Move(ExitLocation(self, producee).Value, 1)); + { + target = ExitLocation(self, producee).Value; + newUnit.QueueActivity(new Activities.Move(target.Value, 1)); + } if (rp != null) - newUnit.QueueActivity(new Activities.Move(rp.rallyPoint, 1)); + { + target = rp.rallyPoint; + newUnit.QueueActivity(new Activities.Move(target.Value, 1)); + } + + if (target != null && newUnit.Owner == self.World.LocalPlayer) + { + self.World.AddFrameEndTask(w => + { + var line = newUnit.traits.GetOrDefault(); + if (line != null) + line.SetTargetSilently(newUnit, Target.FromCell(target.Value), Color.Green); + }); + } } } diff --git a/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj b/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj index d5c599749b..43fda42138 100644 --- a/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj +++ b/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj @@ -49,6 +49,7 @@ + diff --git a/OpenRA.Mods.Cnc/ProductionAirdrop.cs b/OpenRA.Mods.Cnc/ProductionAirdrop.cs index 8c6457941a..4b4f3578dd 100644 --- a/OpenRA.Mods.Cnc/ProductionAirdrop.cs +++ b/OpenRA.Mods.Cnc/ProductionAirdrop.cs @@ -9,6 +9,7 @@ #endregion using System.Linq; +using System.Drawing; using OpenRA.GameRules; using OpenRA.Mods.RA; using OpenRA.Mods.RA.Activities; @@ -62,6 +63,12 @@ namespace OpenRA.Mods.Cnc actor.CancelActivity(); actor.QueueActivity(new Move(self.Location + exitOffset, self)); actor.QueueActivity(new Move(rp.rallyPoint, 0)); + if (actor.Owner == self.World.LocalPlayer) + { + var line = actor.traits.GetOrDefault(); + if (line != null) + line.SetTargetSilently(actor, Target.FromCell(rp.rallyPoint), Color.Green); + } foreach (var t in self.traits.WithInterface()) t.UnitProduced(self, actor); diff --git a/OpenRA.Mods.Cnc/TiberiumRefineryDockAction.cs b/OpenRA.Mods.Cnc/TiberiumRefineryDockAction.cs index 54dee4f418..daa8a6c2db 100644 --- a/OpenRA.Mods.Cnc/TiberiumRefineryDockAction.cs +++ b/OpenRA.Mods.Cnc/TiberiumRefineryDockAction.cs @@ -8,6 +8,7 @@ */ #endregion +using System.Drawing; using OpenRA.Mods.RA; using OpenRA.Mods.RA.Activities; using OpenRA.Mods.RA.Render; @@ -50,8 +51,17 @@ namespace OpenRA.Mods.Cnc harv.QueueActivity( new CallFunc( () => harvester.Visible = true, false ) ); harv.QueueActivity( new Drag(endDock, startDock, 12) ); harv.QueueActivity( new CallFunc( () => dockedHarv = null, false ) ); - if (harvester.LastHarvestedCell != int2.Zero) - harv.QueueActivity( new Move(harvester.LastHarvestedCell, 5) ); + if (harvester.LastHarvestedCell != int2.Zero) + { + harv.QueueActivity( new Move(harvester.LastHarvestedCell, 5) ); + if (harv.Owner == self.World.LocalPlayer) + self.World.AddFrameEndTask( w => + { + var line = harv.traits.GetOrDefault(); + if (line != null) + line.SetTargetSilently(harv, Target.FromCell(harvester.LastHarvestedCell), Color.Green); + }); + } } harv.QueueActivity( new Harvest() ); }) ); diff --git a/OpenRA.Mods.RA/Activities/UnloadCargo.cs b/OpenRA.Mods.RA/Activities/UnloadCargo.cs index c14f891bda..ec2b0d50bd 100644 --- a/OpenRA.Mods.RA/Activities/UnloadCargo.cs +++ b/OpenRA.Mods.RA/Activities/UnloadCargo.cs @@ -12,6 +12,7 @@ using System.Linq; using OpenRA.Mods.RA.Render; using OpenRA.Traits; using OpenRA.Traits.Activities; +using System.Drawing; namespace OpenRA.Mods.RA.Activities { @@ -71,6 +72,12 @@ namespace OpenRA.Mods.RA.Activities actor.traits.WithInterface().FirstOrDefault().SetPosition(actor, self.Location); actor.CancelActivity(); actor.QueueActivity(new Move(exitTile.Value, 0)); + if (actor.Owner == self.World.LocalPlayer) + { + var line = actor.traits.GetOrDefault(); + if (line != null) + line.SetTargetSilently(self, Target.FromCell(exitTile.Value), Color.Green); + } }); return this; diff --git a/OpenRA.Mods.RA/OreRefineryDockAction.cs b/OpenRA.Mods.RA/OreRefineryDockAction.cs index 69f9fd06ee..291a42f7b2 100644 --- a/OpenRA.Mods.RA/OreRefineryDockAction.cs +++ b/OpenRA.Mods.RA/OreRefineryDockAction.cs @@ -11,7 +11,8 @@ using OpenRA.Mods.RA.Activities; using OpenRA.Mods.RA.Render; using OpenRA.Traits; -using OpenRA.Traits.Activities; +using OpenRA.Traits.Activities; +using System.Drawing; namespace OpenRA.Mods.RA { @@ -39,8 +40,17 @@ namespace OpenRA.Mods.RA harvester.Deliver(harv, self); harv.QueueActivity( new CallFunc( () => dockedHarv = null, false ) ); - if (harvester.LastHarvestedCell != int2.Zero) - harv.QueueActivity( new Move(harvester.LastHarvestedCell, 5) ); + if (harvester.LastHarvestedCell != int2.Zero) + { + harv.QueueActivity( new Move(harvester.LastHarvestedCell, 5) ); + if (harv.Owner == self.World.LocalPlayer) + self.World.AddFrameEndTask( w => + { + var line = harv.traits.GetOrDefault(); + if (line != null) + line.SetTargetSilently(harv, Target.FromCell(harvester.LastHarvestedCell), Color.Green); + }); + } harv.QueueActivity( new Harvest() ); }); })); diff --git a/OpenRA.Mods.RA/RepairableNear.cs b/OpenRA.Mods.RA/RepairableNear.cs index b790f39aa4..b4466218de 100644 --- a/OpenRA.Mods.RA/RepairableNear.cs +++ b/OpenRA.Mods.RA/RepairableNear.cs @@ -12,6 +12,7 @@ using System.Linq; using OpenRA.Mods.RA.Activities; using OpenRA.Traits; using OpenRA.Traits.Activities; +using System.Drawing; namespace OpenRA.Mods.RA { @@ -47,6 +48,13 @@ namespace OpenRA.Mods.RA { self.CancelActivity(); self.QueueActivity(new Move(order.TargetActor, 1)); + if (self.Owner == self.World.LocalPlayer) + self.World.AddFrameEndTask( w => + { + var line = self.traits.GetOrDefault(); + if (line != null) + line.SetTargetSilently(self, Target.FromActor(order.TargetActor), Color.Green); + }); self.QueueActivity(new Repair(order.TargetActor)); } } diff --git a/OpenRA.Mods.RA/Spy.cs b/OpenRA.Mods.RA/Spy.cs index 01a753c544..3066715255 100644 --- a/OpenRA.Mods.RA/Spy.cs +++ b/OpenRA.Mods.RA/Spy.cs @@ -11,6 +11,7 @@ using OpenRA.Mods.RA.Activities; using OpenRA.Traits; using OpenRA.Traits.Activities; +using System.Drawing; namespace OpenRA.Mods.RA { @@ -39,6 +40,13 @@ namespace OpenRA.Mods.RA { self.CancelActivity(); self.QueueActivity(new Move(order.TargetActor, 1)); + if (self.Owner == self.World.LocalPlayer) + self.World.AddFrameEndTask( w => + { + var line = self.traits.GetOrDefault(); + if (line != null) + line.SetTargetSilently(self, Target.FromActor(order.TargetActor), Color.Green); + }); self.QueueActivity(new Infiltrate(order.TargetActor)); } }