diff --git a/OpenRA.Mods.Common/Activities/HarvestResource.cs b/OpenRA.Mods.Common/Activities/HarvestResource.cs index e80312be2f..92f1fb34af 100644 --- a/OpenRA.Mods.Common/Activities/HarvestResource.cs +++ b/OpenRA.Mods.Common/Activities/HarvestResource.cs @@ -27,7 +27,7 @@ namespace OpenRA.Mods.Common.Activities readonly BodyOrientation body; readonly IMove move; readonly CPos targetCell; - readonly INotifyHarvesterAction[] notifyHarvesterActions; + readonly INotifyHarvestAction[] notifyHarvestActions; public HarvestResource(Actor self, CPos targetCell) { @@ -39,7 +39,7 @@ namespace OpenRA.Mods.Common.Activities claimLayer = self.World.WorldActor.Trait(); resourceLayer = self.World.WorldActor.Trait(); this.targetCell = targetCell; - notifyHarvesterActions = self.TraitsImplementing().ToArray(); + notifyHarvestActions = self.TraitsImplementing().ToArray(); } protected override void OnFirstRun(Actor self) @@ -61,7 +61,7 @@ namespace OpenRA.Mods.Common.Activities // Move towards the target cell if (self.Location != targetCell) { - foreach (var n in notifyHarvesterActions) + foreach (var n in notifyHarvestActions) n.MovingToResources(self, targetCell); QueueChild(move.MoveTo(targetCell, 0)); @@ -89,7 +89,7 @@ namespace OpenRA.Mods.Common.Activities harv.AcceptResource(self, resource.Type); - foreach (var t in notifyHarvesterActions) + foreach (var t in notifyHarvestActions) t.Harvested(self, resource.Type); QueueChild(new Wait(harvInfo.BaleLoadDelay)); @@ -103,7 +103,7 @@ namespace OpenRA.Mods.Common.Activities public override void Cancel(Actor self, bool keepQueue = false) { - foreach (var n in notifyHarvesterActions) + foreach (var n in notifyHarvestActions) n.MovementCancelled(self); base.Cancel(self, keepQueue); diff --git a/OpenRA.Mods.Common/Activities/MoveToDock.cs b/OpenRA.Mods.Common/Activities/MoveToDock.cs index 8f07a7743c..46621adc80 100644 --- a/OpenRA.Mods.Common/Activities/MoveToDock.cs +++ b/OpenRA.Mods.Common/Activities/MoveToDock.cs @@ -22,14 +22,14 @@ namespace OpenRA.Mods.Common.Activities readonly DockClientManager dockClient; Actor dockHostActor; IDockHost dockHost; - readonly INotifyHarvesterAction[] notifyHarvesterActions; + readonly INotifyDockClientMoving[] notifyDockClientMoving; public MoveToDock(Actor self, Actor dockHostActor = null, IDockHost dockHost = null) { dockClient = self.Trait(); this.dockHostActor = dockHostActor; this.dockHost = dockHost; - notifyHarvesterActions = self.TraitsImplementing().ToArray(); + notifyDockClientMoving = self.TraitsImplementing().ToArray(); } public override bool Tick(Actor self) @@ -64,8 +64,8 @@ namespace OpenRA.Mods.Common.Activities { if (dockHost.QueueMoveActivity(this, dockHostActor, self, dockClient)) { - foreach (var n in notifyHarvesterActions) - n.MovingToRefinery(self, dockHostActor); + foreach (var ndcm in notifyDockClientMoving) + ndcm.MovingToDock(self, dockHostActor, dockHost); return false; } @@ -84,8 +84,8 @@ namespace OpenRA.Mods.Common.Activities public override void Cancel(Actor self, bool keepQueue = false) { dockClient.UnreserveHost(); - foreach (var n in notifyHarvesterActions) - n.MovementCancelled(self); + foreach (var ndcm in notifyDockClientMoving) + ndcm.MovementCancelled(self); base.Cancel(self, keepQueue); } diff --git a/OpenRA.Mods.Common/Traits/CarryableHarvester.cs b/OpenRA.Mods.Common/Traits/CarryableHarvester.cs index 3b80bc02ca..571365a417 100644 --- a/OpenRA.Mods.Common/Traits/CarryableHarvester.cs +++ b/OpenRA.Mods.Common/Traits/CarryableHarvester.cs @@ -19,7 +19,7 @@ namespace OpenRA.Mods.Common.Traits public override object Create(ActorInitializer init) { return new CarryableHarvester(); } } - public class CarryableHarvester : INotifyCreated, INotifyHarvesterAction + public class CarryableHarvester : INotifyCreated, INotifyHarvestAction, INotifyDockClientMoving { ICallForTransport[] transports; @@ -28,25 +28,30 @@ namespace OpenRA.Mods.Common.Traits transports = self.TraitsImplementing().ToArray(); } - void INotifyHarvesterAction.MovingToResources(Actor self, CPos targetCell) + void INotifyHarvestAction.MovingToResources(Actor self, CPos targetCell) { foreach (var t in transports) t.RequestTransport(self, targetCell); } - void INotifyHarvesterAction.MovingToRefinery(Actor self, Actor refineryActor) - { - var dock = refineryActor.Trait(); - foreach (var t in transports) - t.RequestTransport(self, self.World.Map.CellContaining(dock.DockPosition)); - } - - void INotifyHarvesterAction.MovementCancelled(Actor self) + void INotifyHarvestAction.MovementCancelled(Actor self) { foreach (var t in transports) t.MovementCancelled(self); } - void INotifyHarvesterAction.Harvested(Actor self, string resourceType) { } + void INotifyDockClientMoving.MovingToDock(Actor self, Actor hostActor, IDockHost host) + { + foreach (var t in transports) + t.RequestTransport(self, self.World.Map.CellContaining(host.DockPosition)); + } + + void INotifyDockClientMoving.MovementCancelled(Actor self) + { + foreach (var t in transports) + t.MovementCancelled(self); + } + + void INotifyHarvestAction.Harvested(Actor self, string resourceType) { } } } diff --git a/OpenRA.Mods.Common/Traits/Render/WithHarvestAnimation.cs b/OpenRA.Mods.Common/Traits/Render/WithHarvestAnimation.cs index d6bcda6065..6c52434b16 100644 --- a/OpenRA.Mods.Common/Traits/Render/WithHarvestAnimation.cs +++ b/OpenRA.Mods.Common/Traits/Render/WithHarvestAnimation.cs @@ -26,7 +26,7 @@ namespace OpenRA.Mods.Common.Traits.Render public override object Create(ActorInitializer init) { return new WithHarvestAnimation(init, this); } } - public class WithHarvestAnimation : INotifyHarvesterAction + public class WithHarvestAnimation : INotifyHarvestAction { public readonly WithHarvestAnimationInfo Info; readonly WithSpriteBody wsb; @@ -37,15 +37,14 @@ namespace OpenRA.Mods.Common.Traits.Render wsb = init.Self.TraitsImplementing().Single(w => w.Info.Name == Info.Body); } - void INotifyHarvesterAction.Harvested(Actor self, string resourceType) + void INotifyHarvestAction.Harvested(Actor self, string resourceType) { var sequence = wsb.NormalizeSequence(self, Info.HarvestSequence); if (wsb.DefaultAnimation.HasSequence(sequence) && wsb.DefaultAnimation.CurrentSequence.Name != sequence) wsb.PlayCustomAnimation(self, sequence); } - void INotifyHarvesterAction.MovingToResources(Actor self, CPos targetCell) { } - void INotifyHarvesterAction.MovingToRefinery(Actor self, Actor refineryActor) { } - void INotifyHarvesterAction.MovementCancelled(Actor self) { } + void INotifyHarvestAction.MovingToResources(Actor self, CPos targetCell) { } + void INotifyHarvestAction.MovementCancelled(Actor self) { } } } diff --git a/OpenRA.Mods.Common/Traits/Render/WithHarvestOverlay.cs b/OpenRA.Mods.Common/Traits/Render/WithHarvestOverlay.cs index d2e014761e..5942030eb5 100644 --- a/OpenRA.Mods.Common/Traits/Render/WithHarvestOverlay.cs +++ b/OpenRA.Mods.Common/Traits/Render/WithHarvestOverlay.cs @@ -30,7 +30,7 @@ namespace OpenRA.Mods.Common.Traits.Render public override object Create(ActorInitializer init) { return new WithHarvestOverlay(init.Self, this); } } - sealed class WithHarvestOverlay : INotifyHarvesterAction + sealed class WithHarvestOverlay : INotifyHarvestAction { readonly WithHarvestOverlayInfo info; readonly Animation anim; @@ -54,7 +54,7 @@ namespace OpenRA.Mods.Common.Traits.Render p => ZOffsetFromCenter(self, p, 0)), info.Palette); } - void INotifyHarvesterAction.Harvested(Actor self, string resourceType) + void INotifyHarvestAction.Harvested(Actor self, string resourceType) { if (visible) return; @@ -63,9 +63,8 @@ namespace OpenRA.Mods.Common.Traits.Render anim.PlayThen(info.Sequence, () => visible = false); } - void INotifyHarvesterAction.MovingToResources(Actor self, CPos targetCell) { } - void INotifyHarvesterAction.MovingToRefinery(Actor self, Actor targetRefinery) { } - void INotifyHarvesterAction.MovementCancelled(Actor self) { } + void INotifyHarvestAction.MovingToResources(Actor self, CPos targetCell) { } + void INotifyHarvestAction.MovementCancelled(Actor self) { } public static int ZOffsetFromCenter(Actor self, WPos pos, int offset) { diff --git a/OpenRA.Mods.Common/TraitsInterfaces.cs b/OpenRA.Mods.Common/TraitsInterfaces.cs index 7407d2cc78..f352636ec0 100644 --- a/OpenRA.Mods.Common/TraitsInterfaces.cs +++ b/OpenRA.Mods.Common/TraitsInterfaces.cs @@ -170,6 +170,13 @@ namespace OpenRA.Mods.Common.Traits [RequireExplicitImplementation] public interface INotifyDockClient { void Docked(Actor self, Actor host); void Undocked(Actor self, Actor host); } + [RequireExplicitImplementation] + public interface INotifyDockClientMoving + { + void MovingToDock(Actor self, Actor hostActor, IDockHost host); + void MovementCancelled(Actor self); + } + [RequireExplicitImplementation] public interface INotifyResourceAccepted { void OnResourceAccepted(Actor self, Actor refinery, string resourceType, int count, int value); } public interface INotifyParachute { void OnParachute(Actor self); void OnLanded(Actor self); } @@ -202,12 +209,11 @@ namespace OpenRA.Mods.Common.Traits [RequireExplicitImplementation] public interface INotifyExitedCargo { void OnExitedCargo(Actor self, Actor cargo); } - public interface INotifyHarvesterAction + public interface INotifyHarvestAction { - void MovingToResources(Actor self, CPos targetCell); - void MovingToRefinery(Actor self, Actor refineryActor); - void MovementCancelled(Actor self); void Harvested(Actor self, string resourceType); + void MovingToResources(Actor self, CPos targetCell); + void MovementCancelled(Actor self); } public interface IDockClientInfo : ITraitInfoInterface { }