diff --git a/OpenRA.Mods.Cnc/Activities/Infiltrate.cs b/OpenRA.Mods.Cnc/Activities/Infiltrate.cs index 2ffbf76cd7..38c068e9a9 100644 --- a/OpenRA.Mods.Cnc/Activities/Infiltrate.cs +++ b/OpenRA.Mods.Cnc/Activities/Infiltrate.cs @@ -9,6 +9,7 @@ */ #endregion +using System.Drawing; using System.Linq; using OpenRA.Activities; using OpenRA.Mods.Cnc.Traits; @@ -25,7 +26,7 @@ namespace OpenRA.Mods.Cnc.Activities readonly INotifyInfiltration[] notifiers; public Infiltrate(Actor self, Actor target, Infiltrates infiltrate) - : base(self, target, infiltrate.Info.EnterBehaviour) + : base(self, target, infiltrate.Info.EnterBehaviour, targetLineColor: Color.Red) { this.target = target; infiltrates = infiltrate; diff --git a/OpenRA.Mods.Cnc/Activities/LeapAttack.cs b/OpenRA.Mods.Cnc/Activities/LeapAttack.cs index 6dc2792707..52537cc21e 100644 --- a/OpenRA.Mods.Cnc/Activities/LeapAttack.cs +++ b/OpenRA.Mods.Cnc/Activities/LeapAttack.cs @@ -10,6 +10,7 @@ #endregion using System; +using System.Drawing; using System.Linq; using OpenRA.Activities; using OpenRA.Mods.Cnc.Traits; @@ -73,7 +74,7 @@ namespace OpenRA.Mods.Cnc.Activities if (!allowMovement) return NextActivity; - QueueChild(new MoveWithinRange(self, target, minRange, maxRange)); + QueueChild(mobile.MoveWithinRange(target, minRange, maxRange, targetLineColor: Color.Red)); return this; } diff --git a/OpenRA.Mods.Cnc/Traits/MadTank.cs b/OpenRA.Mods.Cnc/Traits/MadTank.cs index 7ea83827d7..1574b4c58e 100644 --- a/OpenRA.Mods.Cnc/Traits/MadTank.cs +++ b/OpenRA.Mods.Cnc/Traits/MadTank.cs @@ -205,7 +205,7 @@ namespace OpenRA.Mods.Cnc.Traits self.CancelActivity(); self.SetTargetLine(target, Color.Red); - self.QueueActivity(new MoveAdjacentTo(self, target)); + self.QueueActivity(new MoveAdjacentTo(self, target, targetLineColor: Color.Red)); self.QueueActivity(new CallFunc(StartDetonationSequence)); } else if (order.OrderString == "Detonate") diff --git a/OpenRA.Mods.Cnc/Traits/TDGunboat.cs b/OpenRA.Mods.Cnc/Traits/TDGunboat.cs index 1127661512..35153139f9 100644 --- a/OpenRA.Mods.Cnc/Traits/TDGunboat.cs +++ b/OpenRA.Mods.Cnc/Traits/TDGunboat.cs @@ -10,6 +10,7 @@ #endregion using System.Collections.Generic; +using System.Drawing; using System.Linq; using OpenRA.Activities; using OpenRA.Mods.Common; @@ -181,11 +182,11 @@ namespace OpenRA.Mods.Cnc.Traits public Activity MoveTo(CPos cell, int nearEnough) { return null; } public Activity MoveTo(CPos cell, Actor ignoreActor) { return null; } - public Activity MoveWithinRange(Target target, WDist range) { return null; } - public Activity MoveWithinRange(Target target, WDist minRange, WDist maxRange) { return null; } - public Activity MoveFollow(Actor self, Target target, WDist minRange, WDist maxRange) { return null; } + public Activity MoveWithinRange(Target target, WDist range, Color? targetLineColor = null) { return null; } + public Activity MoveWithinRange(Target target, WDist minRange, WDist maxRange, Color? targetLineColor = null) { return null; } + public Activity MoveFollow(Actor self, Target target, WDist minRange, WDist maxRange, Color? targetLineColor = null) { return null; } public Activity MoveIntoWorld(Actor self, CPos cell, SubCell subCell = SubCell.Any) { return null; } - public Activity MoveToTarget(Actor self, Target target) { return null; } + public Activity MoveToTarget(Actor self, Target target, Color? targetLineColor = null) { return null; } public Activity MoveIntoTarget(Actor self, Target target) { return null; } public Activity VisualMove(Actor self, WPos fromPos, WPos toPos) { return null; } diff --git a/OpenRA.Mods.Common/Activities/Air/Fly.cs b/OpenRA.Mods.Common/Activities/Air/Fly.cs index b1dd7bc1a2..32bfd71ff2 100644 --- a/OpenRA.Mods.Common/Activities/Air/Fly.cs +++ b/OpenRA.Mods.Common/Activities/Air/Fly.cs @@ -10,6 +10,7 @@ #endregion using System.Collections.Generic; +using System.Drawing; using OpenRA.Activities; using OpenRA.Mods.Common.Traits; using OpenRA.Traits; @@ -24,13 +25,13 @@ namespace OpenRA.Mods.Common.Activities readonly WDist minRange; bool soundPlayed; - public Fly(Actor self, Target t) + public Fly(Actor self, Target t, Color? targetLineColor = null) { aircraft = self.Trait(); target = t; } - public Fly(Actor self, Target t, WDist minRange, WDist maxRange) + public Fly(Actor self, Target t, WDist minRange, WDist maxRange, Color? targetLineColor = null) : this(self, t) { this.maxRange = maxRange; diff --git a/OpenRA.Mods.Common/Activities/Air/FlyFollow.cs b/OpenRA.Mods.Common/Activities/Air/FlyFollow.cs index af987ce8a9..ec10e1c9d0 100644 --- a/OpenRA.Mods.Common/Activities/Air/FlyFollow.cs +++ b/OpenRA.Mods.Common/Activities/Air/FlyFollow.cs @@ -9,6 +9,7 @@ */ #endregion +using System.Drawing; using OpenRA.Activities; using OpenRA.Mods.Common.Traits; using OpenRA.Traits; @@ -17,17 +18,19 @@ namespace OpenRA.Mods.Common.Activities { public class FlyFollow : Activity { + readonly Aircraft aircraft; + readonly WDist minRange; + readonly WDist maxRange; + readonly Color? targetLineColor; Target target; - Aircraft aircraft; - WDist minRange; - WDist maxRange; - public FlyFollow(Actor self, Target target, WDist minRange, WDist maxRange) + public FlyFollow(Actor self, Target target, WDist minRange, WDist maxRange, Color? targetLineColor = null) { this.target = target; aircraft = self.Trait(); this.minRange = minRange; this.maxRange = maxRange; + this.targetLineColor = targetLineColor; } public override Activity Tick(Actor self) @@ -48,7 +51,7 @@ namespace OpenRA.Mods.Common.Activities return this; } - return ActivityUtils.SequenceActivities(new Fly(self, target, minRange, maxRange), this); + return ActivityUtils.SequenceActivities(new Fly(self, target, minRange, maxRange, targetLineColor: targetLineColor), this); } } } diff --git a/OpenRA.Mods.Common/Activities/Air/HeliFly.cs b/OpenRA.Mods.Common/Activities/Air/HeliFly.cs index 161fdbc446..be8dc80474 100644 --- a/OpenRA.Mods.Common/Activities/Air/HeliFly.cs +++ b/OpenRA.Mods.Common/Activities/Air/HeliFly.cs @@ -10,6 +10,7 @@ #endregion using System.Collections.Generic; +using System.Drawing; using OpenRA.Activities; using OpenRA.Mods.Common.Traits; using OpenRA.Traits; @@ -24,13 +25,13 @@ namespace OpenRA.Mods.Common.Activities readonly WDist minRange; bool soundPlayed; - public HeliFly(Actor self, Target t) + public HeliFly(Actor self, Target t, Color? targetLineColor = null) { aircraft = self.Trait(); target = t; } - public HeliFly(Actor self, Target t, WDist minRange, WDist maxRange) + public HeliFly(Actor self, Target t, WDist minRange, WDist maxRange, Color? targetLineColor = null) : this(self, t) { this.maxRange = maxRange; diff --git a/OpenRA.Mods.Common/Activities/Air/HeliReturnToBase.cs b/OpenRA.Mods.Common/Activities/Air/HeliReturnToBase.cs index 828ea21d43..08f3055c94 100644 --- a/OpenRA.Mods.Common/Activities/Air/HeliReturnToBase.cs +++ b/OpenRA.Mods.Common/Activities/Air/HeliReturnToBase.cs @@ -10,6 +10,7 @@ #endregion using System.Collections.Generic; +using System.Drawing; using System.Linq; using OpenRA.Activities; using OpenRA.Mods.Common.Traits; @@ -89,7 +90,9 @@ namespace OpenRA.Mods.Common.Activities var target = Target.FromPos(nearestResupplier.CenterPosition + randomPosition); - return ActivityUtils.SequenceActivities(new HeliFly(self, target, WDist.Zero, aircraft.Info.WaitDistanceFromResupplyBase), this); + return ActivityUtils.SequenceActivities( + new HeliFly(self, target, WDist.Zero, aircraft.Info.WaitDistanceFromResupplyBase, targetLineColor: Color.Green), + this); } return this; diff --git a/OpenRA.Mods.Common/Activities/Air/ReturnToBase.cs b/OpenRA.Mods.Common/Activities/Air/ReturnToBase.cs index 8c56090394..a78c0b2d52 100644 --- a/OpenRA.Mods.Common/Activities/Air/ReturnToBase.cs +++ b/OpenRA.Mods.Common/Activities/Air/ReturnToBase.cs @@ -11,6 +11,7 @@ using System; using System.Collections.Generic; +using System.Drawing; using System.Linq; using OpenRA.Activities; using OpenRA.Mods.Common.Traits; @@ -140,7 +141,7 @@ namespace OpenRA.Mods.Common.Activities if (nearestResupplier != null) return ActivityUtils.SequenceActivities( - new Fly(self, Target.FromActor(nearestResupplier), WDist.Zero, aircraft.Info.WaitDistanceFromResupplyBase), + new Fly(self, Target.FromActor(nearestResupplier), WDist.Zero, aircraft.Info.WaitDistanceFromResupplyBase, targetLineColor: Color.Green), new FlyCircle(self, aircraft.Info.NumberOfTicksToVerifyAvailableAirport), this); else diff --git a/OpenRA.Mods.Common/Activities/Attack.cs b/OpenRA.Mods.Common/Activities/Attack.cs index 8b66217fec..f8d51f35eb 100644 --- a/OpenRA.Mods.Common/Activities/Attack.cs +++ b/OpenRA.Mods.Common/Activities/Attack.cs @@ -10,6 +10,7 @@ #endregion using System; +using System.Drawing; using System.Linq; using OpenRA.Activities; using OpenRA.Mods.Common.Traits; @@ -104,7 +105,7 @@ namespace OpenRA.Mods.Common.Activities var sightRange = rs != null ? rs.Range : WDist.FromCells(2); attackStatus |= AttackStatus.NeedsToMove; - moveActivity = ActivityUtils.SequenceActivities(move.MoveWithinRange(target, sightRange), this); + moveActivity = ActivityUtils.SequenceActivities(move.MoveWithinRange(target, sightRange, targetLineColor: Color.Red), this); return AttackStatus.NeedsToMove; } @@ -128,7 +129,7 @@ namespace OpenRA.Mods.Common.Activities return AttackStatus.UnableToAttack; attackStatus |= AttackStatus.NeedsToMove; - moveActivity = ActivityUtils.SequenceActivities(move.MoveWithinRange(target, minRange, maxRange), this); + moveActivity = ActivityUtils.SequenceActivities(move.MoveWithinRange(target, minRange, maxRange, targetLineColor: Color.Red), this); return AttackStatus.NeedsToMove; } diff --git a/OpenRA.Mods.Common/Activities/CaptureActor.cs b/OpenRA.Mods.Common/Activities/CaptureActor.cs index 68800460b1..2274992772 100644 --- a/OpenRA.Mods.Common/Activities/CaptureActor.cs +++ b/OpenRA.Mods.Common/Activities/CaptureActor.cs @@ -9,6 +9,7 @@ */ #endregion +using System.Drawing; using OpenRA.Activities; using OpenRA.Mods.Common.Traits; using OpenRA.Traits; @@ -22,7 +23,7 @@ namespace OpenRA.Mods.Common.Activities readonly CaptureManager manager; public CaptureActor(Actor self, Actor target) - : base(self, target, EnterBehaviour.Exit) + : base(self, target, EnterBehaviour.Exit, targetLineColor: Color.Red) { actor = target; manager = self.Trait(); diff --git a/OpenRA.Mods.Common/Activities/Demolish.cs b/OpenRA.Mods.Common/Activities/Demolish.cs index bbfe4ffa21..adadf48be0 100644 --- a/OpenRA.Mods.Common/Activities/Demolish.cs +++ b/OpenRA.Mods.Common/Activities/Demolish.cs @@ -9,6 +9,7 @@ */ #endregion +using System.Drawing; using System.Linq; using OpenRA.Mods.Common.Effects; using OpenRA.Mods.Common.Traits; @@ -27,7 +28,7 @@ namespace OpenRA.Mods.Common.Activities public Demolish(Actor self, Actor target, EnterBehaviour enterBehaviour, int delay, int flashes, int flashesDelay, int flashInterval) - : base(self, target, enterBehaviour) + : base(self, target, enterBehaviour, targetLineColor: Color.Red) { this.target = target; demolishables = target.TraitsImplementing().ToArray(); diff --git a/OpenRA.Mods.Common/Activities/DonateCash.cs b/OpenRA.Mods.Common/Activities/DonateCash.cs index 2206e45c05..aacfdb07b9 100644 --- a/OpenRA.Mods.Common/Activities/DonateCash.cs +++ b/OpenRA.Mods.Common/Activities/DonateCash.cs @@ -9,6 +9,7 @@ */ #endregion +using System.Drawing; using OpenRA.Mods.Common.Effects; using OpenRA.Mods.Common.Traits; @@ -21,7 +22,7 @@ namespace OpenRA.Mods.Common.Activities readonly int experience; public DonateCash(Actor self, Actor target, int payload, int playerExperience) - : base(self, target, EnterBehaviour.Dispose) + : base(self, target, EnterBehaviour.Dispose, targetLineColor: Color.Yellow) { this.target = target; this.payload = payload; diff --git a/OpenRA.Mods.Common/Activities/DonateExperience.cs b/OpenRA.Mods.Common/Activities/DonateExperience.cs index 47f6bf779a..cc692bed67 100644 --- a/OpenRA.Mods.Common/Activities/DonateExperience.cs +++ b/OpenRA.Mods.Common/Activities/DonateExperience.cs @@ -9,6 +9,7 @@ */ #endregion +using System.Drawing; using OpenRA.Activities; using OpenRA.Mods.Common.Traits; @@ -22,7 +23,7 @@ namespace OpenRA.Mods.Common.Activities readonly int playerExperience; public DonateExperience(Actor self, Actor target, int level, int playerExperience, GainsExperience targetGainsExperience) - : base(self, target, EnterBehaviour.Dispose) + : base(self, target, EnterBehaviour.Dispose, targetLineColor: Color.Yellow) { this.target = target; this.level = level; diff --git a/OpenRA.Mods.Common/Activities/Enter.cs b/OpenRA.Mods.Common/Activities/Enter.cs index f458dfde9c..eb86996c94 100644 --- a/OpenRA.Mods.Common/Activities/Enter.cs +++ b/OpenRA.Mods.Common/Activities/Enter.cs @@ -10,6 +10,7 @@ #endregion using System; +using System.Drawing; using System.Linq; using OpenRA.Activities; using OpenRA.Mods.Common.Traits; @@ -28,6 +29,7 @@ namespace OpenRA.Mods.Common.Activities readonly int maxTries = 0; readonly EnterBehaviour enterBehaviour; readonly bool repathWhileMoving; + readonly Color? targetLineColor; public Target Target { get { return target; } } Target target; @@ -37,13 +39,15 @@ namespace OpenRA.Mods.Common.Activities Activity inner; bool firstApproach = true; - protected Enter(Actor self, Actor target, EnterBehaviour enterBehaviour, int maxTries = 1, bool repathWhileMoving = true) + protected Enter(Actor self, Actor target, EnterBehaviour enterBehaviour, int maxTries = 1, + bool repathWhileMoving = true, Color? targetLineColor = null) { move = self.Trait(); this.target = Target.FromActor(target); this.maxTries = maxTries; this.enterBehaviour = enterBehaviour; this.repathWhileMoving = repathWhileMoving; + this.targetLineColor = targetLineColor; } // CanEnter(target) should to be true; otherwise, Enter may abort. @@ -183,7 +187,7 @@ namespace OpenRA.Mods.Common.Activities case ReserveStatus.TooFar: { var moveTarget = repathWhileMoving ? target : Target.FromPos(target.Positions.PositionClosestTo(self.CenterPosition)); - inner = move.MoveToTarget(self, moveTarget); // Approach + inner = move.MoveToTarget(self, moveTarget, targetLineColor: targetLineColor); // Approach return EnterState.ApproachingOrEntering; } diff --git a/OpenRA.Mods.Common/Activities/EnterTransport.cs b/OpenRA.Mods.Common/Activities/EnterTransport.cs index 868b598e90..e688739c09 100644 --- a/OpenRA.Mods.Common/Activities/EnterTransport.cs +++ b/OpenRA.Mods.Common/Activities/EnterTransport.cs @@ -10,6 +10,7 @@ #endregion using System; +using System.Drawing; using OpenRA.Mods.Common.Traits; using OpenRA.Traits; @@ -23,7 +24,7 @@ namespace OpenRA.Mods.Common.Activities Cargo cargo; public EnterTransport(Actor self, Actor transport, int maxTries = 0, bool repathWhileMoving = true) - : base(self, transport, EnterBehaviour.Exit, maxTries, repathWhileMoving) + : base(self, transport, EnterBehaviour.Exit, maxTries, repathWhileMoving, Color.Green) { this.transport = transport; this.maxTries = maxTries; diff --git a/OpenRA.Mods.Common/Activities/Move/Follow.cs b/OpenRA.Mods.Common/Activities/Move/Follow.cs index 26c811c7d1..ad44e74f6b 100644 --- a/OpenRA.Mods.Common/Activities/Move/Follow.cs +++ b/OpenRA.Mods.Common/Activities/Move/Follow.cs @@ -9,6 +9,7 @@ */ #endregion +using System.Drawing; using OpenRA.Activities; using OpenRA.Mods.Common.Traits; using OpenRA.Traits; @@ -21,12 +22,14 @@ namespace OpenRA.Mods.Common.Activities readonly WDist minRange; readonly WDist maxRange; readonly IMove move; + readonly Color? targetLineColor; - public Follow(Actor self, Target target, WDist minRange, WDist maxRange) + public Follow(Actor self, Target target, WDist minRange, WDist maxRange, Color? targetLineColor = null) { this.target = target; this.minRange = minRange; this.maxRange = maxRange; + this.targetLineColor = targetLineColor; move = self.Trait(); } @@ -37,7 +40,7 @@ namespace OpenRA.Mods.Common.Activities return NextActivity; var cachedPosition = target.CenterPosition; - var path = move.MoveWithinRange(target, minRange, maxRange); + var path = move.MoveWithinRange(target, minRange, maxRange, targetLineColor: targetLineColor); // We are already in range, so wait until the target moves before doing anything if (target.IsInRange(self.CenterPosition, maxRange) && !target.IsInRange(self.CenterPosition, minRange)) diff --git a/OpenRA.Mods.Common/Activities/Move/MoveAdjacentTo.cs b/OpenRA.Mods.Common/Activities/Move/MoveAdjacentTo.cs index d0632ac34d..3cecaaa76d 100644 --- a/OpenRA.Mods.Common/Activities/Move/MoveAdjacentTo.cs +++ b/OpenRA.Mods.Common/Activities/Move/MoveAdjacentTo.cs @@ -48,7 +48,7 @@ namespace OpenRA.Mods.Common.Activities Activity inner; bool repath; - public MoveAdjacentTo(Actor self, Target target) + public MoveAdjacentTo(Actor self, Target target, Color? targetLineColor = null) { Target = target; diff --git a/OpenRA.Mods.Common/Activities/Move/MoveWithinRange.cs b/OpenRA.Mods.Common/Activities/Move/MoveWithinRange.cs index f68a1e5af8..39351c7b5a 100644 --- a/OpenRA.Mods.Common/Activities/Move/MoveWithinRange.cs +++ b/OpenRA.Mods.Common/Activities/Move/MoveWithinRange.cs @@ -10,6 +10,7 @@ #endregion using System.Collections.Generic; +using System.Drawing; using System.Linq; using OpenRA.Traits; @@ -20,8 +21,8 @@ namespace OpenRA.Mods.Common.Activities readonly WDist maxRange; readonly WDist minRange; - public MoveWithinRange(Actor self, Target target, WDist minRange, WDist maxRange) - : base(self, target) + public MoveWithinRange(Actor self, Target target, WDist minRange, WDist maxRange, Color? targetLineColor = null) + : base(self, target, targetLineColor) { this.minRange = minRange; this.maxRange = maxRange; diff --git a/OpenRA.Mods.Common/Activities/PickupUnit.cs b/OpenRA.Mods.Common/Activities/PickupUnit.cs index a709c89d30..f807afcb4f 100644 --- a/OpenRA.Mods.Common/Activities/PickupUnit.cs +++ b/OpenRA.Mods.Common/Activities/PickupUnit.cs @@ -9,6 +9,7 @@ */ #endregion +using System.Drawing; using OpenRA.Activities; using OpenRA.Mods.Common.Traits; using OpenRA.Traits; @@ -72,7 +73,8 @@ namespace OpenRA.Mods.Common.Activities switch (state) { case PickupState.Intercept: - innerActivity = movement.MoveWithinRange(Target.FromActor(cargo), WDist.FromCells(4)); + innerActivity = movement.MoveWithinRange(Target.FromActor(cargo), WDist.FromCells(4), + targetLineColor: Color.Yellow); state = PickupState.LockCarryable; return this; diff --git a/OpenRA.Mods.Common/Activities/RepairBridge.cs b/OpenRA.Mods.Common/Activities/RepairBridge.cs index 5df1df11c0..93d7e0c340 100644 --- a/OpenRA.Mods.Common/Activities/RepairBridge.cs +++ b/OpenRA.Mods.Common/Activities/RepairBridge.cs @@ -9,6 +9,7 @@ */ #endregion +using System.Drawing; using OpenRA.Mods.Common.Traits; using OpenRA.Traits; @@ -22,7 +23,7 @@ namespace OpenRA.Mods.Common.Activities readonly string notification; public RepairBridge(Actor self, Actor target, EnterBehaviour enterBehaviour, string notification) - : base(self, target, enterBehaviour) + : base(self, target, enterBehaviour, targetLineColor: Color.Yellow) { this.target = target; legacyHut = target.TraitOrDefault(); diff --git a/OpenRA.Mods.Common/Activities/RepairBuilding.cs b/OpenRA.Mods.Common/Activities/RepairBuilding.cs index fb64e88bdd..a5b6e3dde1 100644 --- a/OpenRA.Mods.Common/Activities/RepairBuilding.cs +++ b/OpenRA.Mods.Common/Activities/RepairBuilding.cs @@ -9,6 +9,7 @@ */ #endregion +using System.Drawing; using OpenRA.Traits; namespace OpenRA.Mods.Common.Activities @@ -20,7 +21,7 @@ namespace OpenRA.Mods.Common.Activities readonly Stance validStances; public RepairBuilding(Actor self, Actor target, EnterBehaviour enterBehaviour, Stance validStances) - : base(self, target, enterBehaviour) + : base(self, target, enterBehaviour, targetLineColor: Color.Yellow) { this.target = target; this.validStances = validStances; diff --git a/OpenRA.Mods.Common/ActorExts.cs b/OpenRA.Mods.Common/ActorExts.cs index 1f1c393a99..b681a62a04 100644 --- a/OpenRA.Mods.Common/ActorExts.cs +++ b/OpenRA.Mods.Common/ActorExts.cs @@ -62,7 +62,7 @@ namespace OpenRA.Mods.Common /// /// DEPRECATED: Write code that can handle FrozenActors correctly instead. /// - public static Target ResolveFrozenActorOrder(this Actor self, Order order, Color targetLine) + public static Target ResolveFrozenActorOrder(this Actor self, Order order, Color targetLineColor) { // Not targeting a frozen actor if (order.Target.Type != TargetType.FrozenActor) @@ -70,7 +70,7 @@ namespace OpenRA.Mods.Common var frozen = order.Target.FrozenActor; - self.SetTargetLine(order.Target, targetLine, true); + self.SetTargetLine(order.Target, targetLineColor, true); // Target is still alive - resolve the real order if (frozen.Actor != null && frozen.Actor.IsInWorld) @@ -89,7 +89,8 @@ namespace OpenRA.Mods.Common .Append(WDist.FromCells(2)) .Max(); - self.QueueActivity(move.MoveWithinRange(Target.FromPos(frozen.CenterPosition), range)); + self.QueueActivity(move.MoveWithinRange(Target.FromPos(frozen.CenterPosition), range, + targetLineColor: targetLineColor)); } return Target.Invalid; diff --git a/OpenRA.Mods.Common/Traits/Air/Aircraft.cs b/OpenRA.Mods.Common/Traits/Air/Aircraft.cs index a2f56bdf5d..2a8ed1a5ea 100644 --- a/OpenRA.Mods.Common/Traits/Air/Aircraft.cs +++ b/OpenRA.Mods.Common/Traits/Air/Aircraft.cs @@ -605,28 +605,28 @@ namespace OpenRA.Mods.Common.Traits return new HeliFly(self, Target.FromCell(self.World, cell)); } - public Activity MoveWithinRange(Target target, WDist range) + public Activity MoveWithinRange(Target target, WDist range, Color? targetLineColor = null) { if (!Info.CanHover) - return new Fly(self, target, WDist.Zero, range); + return new Fly(self, target, WDist.Zero, range, targetLineColor); - return new HeliFly(self, target, WDist.Zero, range); + return new HeliFly(self, target, WDist.Zero, range, targetLineColor); } - public Activity MoveWithinRange(Target target, WDist minRange, WDist maxRange) + public Activity MoveWithinRange(Target target, WDist minRange, WDist maxRange, Color? targetLineColor = null) { if (!Info.CanHover) - return new Fly(self, target, minRange, maxRange); + return new Fly(self, target, minRange, maxRange, targetLineColor); - return new HeliFly(self, target, minRange, maxRange); + return new HeliFly(self, target, minRange, maxRange, targetLineColor); } - public Activity MoveFollow(Actor self, Target target, WDist minRange, WDist maxRange) + public Activity MoveFollow(Actor self, Target target, WDist minRange, WDist maxRange, Color? targetLineColor = null) { if (!Info.CanHover) - return new FlyFollow(self, target, minRange, maxRange); + return new FlyFollow(self, target, minRange, maxRange, targetLineColor); - return new Follow(self, target, minRange, maxRange); + return new Follow(self, target, minRange, maxRange, targetLineColor); } public Activity MoveIntoWorld(Actor self, CPos cell, SubCell subCell = SubCell.Any) @@ -637,12 +637,12 @@ namespace OpenRA.Mods.Common.Traits return new HeliFly(self, Target.FromCell(self.World, cell, subCell)); } - public Activity MoveToTarget(Actor self, Target target) + public Activity MoveToTarget(Actor self, Target target, Color? targetLineColor = null) { if (!Info.CanHover) - return new Fly(self, target, WDist.FromCells(3), WDist.FromCells(5)); + return new Fly(self, target, WDist.FromCells(3), WDist.FromCells(5), targetLineColor); - return ActivityUtils.SequenceActivities(new HeliFly(self, target), new Turn(self, Info.InitialFacing)); + return ActivityUtils.SequenceActivities(new HeliFly(self, target, targetLineColor), new Turn(self, Info.InitialFacing)); } public Activity MoveIntoTarget(Actor self, Target target) diff --git a/OpenRA.Mods.Common/Traits/Attack/AttackFollow.cs b/OpenRA.Mods.Common/Traits/Attack/AttackFollow.cs index d4ffa20ba9..c5315f49fc 100644 --- a/OpenRA.Mods.Common/Traits/Attack/AttackFollow.cs +++ b/OpenRA.Mods.Common/Traits/Attack/AttackFollow.cs @@ -10,6 +10,7 @@ #endregion using System; +using System.Drawing; using System.Linq; using OpenRA.Activities; using OpenRA.Mods.Common.Activities; @@ -122,7 +123,10 @@ namespace OpenRA.Mods.Common.Traits hasTicked = true; if (move != null) - return ActivityUtils.SequenceActivities(move.MoveFollow(self, target, weapon.Weapon.MinRange, maxRange), this); + return ActivityUtils.SequenceActivities( + move.MoveFollow(self, target, weapon.Weapon.MinRange, maxRange, targetLineColor: Color.Red), + this); + if (target.IsInRange(self.CenterPosition, weapon.MaxRange()) && !target.IsInRange(self.CenterPosition, weapon.Weapon.MinRange)) return this; diff --git a/OpenRA.Mods.Common/Traits/Attack/AttackSuicides.cs b/OpenRA.Mods.Common/Traits/Attack/AttackSuicides.cs index 64e005be1d..795ad75939 100644 --- a/OpenRA.Mods.Common/Traits/Attack/AttackSuicides.cs +++ b/OpenRA.Mods.Common/Traits/Attack/AttackSuicides.cs @@ -87,7 +87,7 @@ namespace OpenRA.Mods.Common.Traits self.SetTargetLine(target, Color.Red); - self.QueueActivity(move.MoveToTarget(self, target)); + self.QueueActivity(move.MoveToTarget(self, target, targetLineColor: Color.Red)); self.QueueActivity(new CallFunc(() => self.Kill(self, Info.DamageTypes))); } diff --git a/OpenRA.Mods.Common/Traits/Guard.cs b/OpenRA.Mods.Common/Traits/Guard.cs index 87f92fbb02..d132d727c4 100644 --- a/OpenRA.Mods.Common/Traits/Guard.cs +++ b/OpenRA.Mods.Common/Traits/Guard.cs @@ -55,7 +55,7 @@ namespace OpenRA.Mods.Common.Traits self.SetTargetLine(target, Color.Yellow); var range = target.Actor.Info.TraitInfo().Range; - self.QueueActivity(new AttackMoveActivity(self, move.MoveFollow(self, target, WDist.Zero, range))); + self.QueueActivity(new AttackMoveActivity(self, move.MoveFollow(self, target, WDist.Zero, range, targetLineColor: Color.Yellow))); } public string VoicePhraseForOrder(Actor self, Order order) diff --git a/OpenRA.Mods.Common/Traits/Mobile.cs b/OpenRA.Mods.Common/Traits/Mobile.cs index ef03a7810a..5ae57c273f 100644 --- a/OpenRA.Mods.Common/Traits/Mobile.cs +++ b/OpenRA.Mods.Common/Traits/Mobile.cs @@ -457,11 +457,30 @@ namespace OpenRA.Mods.Common.Traits #region IMove - public Activity MoveTo(CPos cell, int nearEnough) { return new Move(self, cell, WDist.FromCells(nearEnough)); } - public Activity MoveTo(CPos cell, Actor ignoreActor) { return new Move(self, cell, WDist.Zero, ignoreActor); } - public Activity MoveWithinRange(Target target, WDist range) { return new MoveWithinRange(self, target, WDist.Zero, range); } - public Activity MoveWithinRange(Target target, WDist minRange, WDist maxRange) { return new MoveWithinRange(self, target, minRange, maxRange); } - public Activity MoveFollow(Actor self, Target target, WDist minRange, WDist maxRange) { return new Follow(self, target, minRange, maxRange); } + public Activity MoveTo(CPos cell, int nearEnough) + { + return new Move(self, cell, WDist.FromCells(nearEnough)); + } + + public Activity MoveTo(CPos cell, Actor ignoreActor) + { + return new Move(self, cell, WDist.Zero, ignoreActor); + } + + public Activity MoveWithinRange(Target target, WDist range, Color? targetLineColor = null) + { + return new MoveWithinRange(self, target, WDist.Zero, range, targetLineColor); + } + + public Activity MoveWithinRange(Target target, WDist minRange, WDist maxRange, Color? targetLineColor = null) + { + return new MoveWithinRange(self, target, minRange, maxRange, targetLineColor); + } + + public Activity MoveFollow(Actor self, Target target, WDist minRange, WDist maxRange, Color? targetLineColor = null) + { + return new Follow(self, target, minRange, maxRange, targetLineColor); + } public Activity MoveIntoWorld(Actor self, CPos cell, SubCell subCell = SubCell.Any) { @@ -481,12 +500,12 @@ namespace OpenRA.Mods.Common.Traits return VisualMove(self, pos, self.World.Map.CenterOfSubCell(cell, subCell), cell); } - public Activity MoveToTarget(Actor self, Target target) + public Activity MoveToTarget(Actor self, Target target, Color? targetLineColor = null) { if (target.Type == TargetType.Invalid) return null; - return new MoveAdjacentTo(self, target); + return new MoveAdjacentTo(self, target, targetLineColor); } public Activity MoveIntoTarget(Actor self, Target target) diff --git a/OpenRA.Mods.Common/Traits/Repairable.cs b/OpenRA.Mods.Common/Traits/Repairable.cs index 349b2e2e06..e5a1fc14ce 100644 --- a/OpenRA.Mods.Common/Traits/Repairable.cs +++ b/OpenRA.Mods.Common/Traits/Repairable.cs @@ -112,8 +112,12 @@ namespace OpenRA.Mods.Common.Traits self.CancelActivity(); self.SetTargetLine(order.Target, Color.Green); - self.QueueActivity(new WaitForTransport(self, ActivityUtils.SequenceActivities(movement.MoveToTarget(self, order.Target), - new CallFunc(() => AfterReachActivities(self, order, movement))))); + + var activities = ActivityUtils.SequenceActivities( + movement.MoveToTarget(self, order.Target, targetLineColor: Color.Green), + new CallFunc(() => AfterReachActivities(self, order, movement))); + + self.QueueActivity(new WaitForTransport(self, activities)); TryCallTransport(self, order.Target, new CallFunc(() => AfterReachActivities(self, order, movement))); } diff --git a/OpenRA.Mods.Common/Traits/RepairableNear.cs b/OpenRA.Mods.Common/Traits/RepairableNear.cs index d6b4dabc4b..48df61c907 100644 --- a/OpenRA.Mods.Common/Traits/RepairableNear.cs +++ b/OpenRA.Mods.Common/Traits/RepairableNear.cs @@ -85,7 +85,7 @@ namespace OpenRA.Mods.Common.Traits if (!order.Queued) self.CancelActivity(); - self.QueueActivity(movement.MoveWithinRange(order.Target, info.CloseEnough)); + self.QueueActivity(movement.MoveWithinRange(order.Target, info.CloseEnough, targetLineColor: Color.Green)); self.QueueActivity(new Repair(self, order.Target.Actor, info.CloseEnough)); self.SetTargetLine(order.Target, Color.Green, false); diff --git a/OpenRA.Mods.Common/TraitsInterfaces.cs b/OpenRA.Mods.Common/TraitsInterfaces.cs index c77e7dd3cf..e043e2b1b8 100644 --- a/OpenRA.Mods.Common/TraitsInterfaces.cs +++ b/OpenRA.Mods.Common/TraitsInterfaces.cs @@ -397,11 +397,11 @@ namespace OpenRA.Mods.Common.Traits { Activity MoveTo(CPos cell, int nearEnough); Activity MoveTo(CPos cell, Actor ignoreActor); - Activity MoveWithinRange(Target target, WDist range); - Activity MoveWithinRange(Target target, WDist minRange, WDist maxRange); - Activity MoveFollow(Actor self, Target target, WDist minRange, WDist maxRange); + Activity MoveWithinRange(Target target, WDist range, Color? targetLineColor = null); + Activity MoveWithinRange(Target target, WDist minRange, WDist maxRange, Color? targetLineColor = null); + Activity MoveFollow(Actor self, Target target, WDist minRange, WDist maxRange, Color? targetLineColor = null); Activity MoveIntoWorld(Actor self, CPos cell, SubCell subCell = SubCell.Any); - Activity MoveToTarget(Actor self, Target target); + Activity MoveToTarget(Actor self, Target target, Color? targetLineColor = null); Activity MoveIntoTarget(Actor self, Target target); Activity VisualMove(Actor self, WPos fromPos, WPos toPos); int EstimatedMoveDuration(Actor self, WPos fromPos, WPos toPos); diff --git a/OpenRA.Mods.D2k/Traits/Sandworm.cs b/OpenRA.Mods.D2k/Traits/Sandworm.cs index b29677b19a..b476dcd6eb 100644 --- a/OpenRA.Mods.D2k/Traits/Sandworm.cs +++ b/OpenRA.Mods.D2k/Traits/Sandworm.cs @@ -10,6 +10,7 @@ #endregion using System; +using System.Drawing; using System.Linq; using OpenRA.Mods.Common.Traits; using OpenRA.Traits; @@ -66,7 +67,7 @@ namespace OpenRA.Mods.D2k.Traits if (IsMovingTowardTarget) return; - self.QueueActivity(mobile.MoveWithinRange(Target.FromCell(self.World, targetCell, SubCell.Any), WDist.FromCells(1))); + self.QueueActivity(mobile.MoveWithinRange(Target.FromCell(self.World, targetCell, SubCell.Any), WDist.FromCells(1), targetLineColor: Color.Red)); } void ITick.Tick(Actor self)