diff --git a/OpenRA.Mods.Common/Activities/FindAndDeliverResources.cs b/OpenRA.Mods.Common/Activities/FindAndDeliverResources.cs index 1347dff54e..0ed51925f7 100644 --- a/OpenRA.Mods.Common/Activities/FindAndDeliverResources.cs +++ b/OpenRA.Mods.Common/Activities/FindAndDeliverResources.cs @@ -24,6 +24,7 @@ namespace OpenRA.Mods.Common.Activities readonly HarvesterInfo harvInfo; readonly Mobile mobile; readonly ResourceClaimLayer claimLayer; + readonly DockClientManager dockClient; readonly MoveCooldownHelper moveCooldownHelper; CPos? orderLocation; CPos? lastHarvestedCell; @@ -37,6 +38,8 @@ namespace OpenRA.Mods.Common.Activities { harv = self.Trait(); harvInfo = self.Info.TraitInfo(); + dockClient = self.Trait(); + mobile = self.Trait(); claimLayer = self.World.WorldActor.Trait(); moveCooldownHelper = new MoveCooldownHelper(self.World, mobile) { RetryIfDestinationBlocked = true }; @@ -56,7 +59,7 @@ namespace OpenRA.Mods.Common.Activities // We have to make sure the actual "harvest" order is not skipped if a third order is queued, // so we keep deliveredLoad false. if (harv.IsFull) - QueueChild(new MoveToDock(self)); + QueueChild(new MoveToDock(self, dockLineColor: dockClient.DockLineColor)); } } @@ -83,7 +86,7 @@ namespace OpenRA.Mods.Common.Activities if (harv.DockClientManager.ReservedHost != null) return false; - QueueChild(new MoveToDock(self)); + QueueChild(new MoveToDock(self, dockLineColor: dockClient.DockLineColor)); hasDeliveredLoad = true; } diff --git a/OpenRA.Mods.Common/Activities/MoveToDock.cs b/OpenRA.Mods.Common/Activities/MoveToDock.cs index ecbe8e402a..4fafe57848 100644 --- a/OpenRA.Mods.Common/Activities/MoveToDock.cs +++ b/OpenRA.Mods.Common/Activities/MoveToDock.cs @@ -13,6 +13,7 @@ using System.Collections.Generic; using System.Linq; using OpenRA.Activities; using OpenRA.Mods.Common.Traits; +using OpenRA.Primitives; using OpenRA.Traits; namespace OpenRA.Mods.Common.Activities @@ -23,18 +24,20 @@ namespace OpenRA.Mods.Common.Activities Actor dockHostActor; IDockHost dockHost; readonly INotifyDockClientMoving[] notifyDockClientMoving; + readonly Color? dockLineColor; readonly MoveCooldownHelper moveCooldownHelper; readonly bool forceEnter; readonly bool ignoreOccupancy; public MoveToDock(Actor self, Actor dockHostActor = null, IDockHost dockHost = null, - bool forceEnter = false, bool ignoreOccupancy = false) + bool forceEnter = false, bool ignoreOccupancy = false, Color? dockLineColor = null) { dockClient = self.Trait(); this.dockHostActor = dockHostActor; this.dockHost = dockHost; this.forceEnter = forceEnter; this.ignoreOccupancy = ignoreOccupancy; + this.dockLineColor = dockLineColor; notifyDockClientMoving = self.TraitsImplementing().ToArray(); moveCooldownHelper = new MoveCooldownHelper(self.World, self.Trait() as Mobile) { RetryIfDestinationBlocked = true }; } @@ -119,12 +122,15 @@ namespace OpenRA.Mods.Common.Activities public override IEnumerable TargetLineNodes(Actor self) { + if (!dockLineColor.HasValue) + yield break; + if (dockHostActor != null) - yield return new TargetLineNode(Target.FromActor(dockHostActor), dockClient.DockLineColor); + yield return new TargetLineNode(Target.FromActor(dockHostActor), dockLineColor.Value); else { if (dockClient.ReservedHostActor != null) - yield return new TargetLineNode(Target.FromActor(dockClient.ReservedHostActor), dockClient.DockLineColor); + yield return new TargetLineNode(Target.FromActor(dockClient.ReservedHostActor), dockLineColor.Value); } } } diff --git a/OpenRA.Mods.Common/Traits/DockClientManager.cs b/OpenRA.Mods.Common/Traits/DockClientManager.cs index 01c316d09a..da0f701330 100644 --- a/OpenRA.Mods.Common/Traits/DockClientManager.cs +++ b/OpenRA.Mods.Common/Traits/DockClientManager.cs @@ -182,7 +182,8 @@ namespace OpenRA.Mods.Common.Traits target.Actor, null, order.OrderString == "ForceDock", - true)); + true, + DockLineColor)); self.ShowTargetLines(); }