diff --git a/OpenRA.Mods.Cnc/Activities/VoxelHarvesterDockSequence.cs b/OpenRA.Mods.Cnc/Activities/VoxelHarvesterDockSequence.cs index 7d5ef88a27..44c2454eaa 100644 --- a/OpenRA.Mods.Cnc/Activities/VoxelHarvesterDockSequence.cs +++ b/OpenRA.Mods.Cnc/Activities/VoxelHarvesterDockSequence.cs @@ -30,9 +30,10 @@ namespace OpenRA.Mods.Cnc.Activities public override void OnStateDock(Actor self) { body.Docked = true; - foreach (var trait in self.TraitsImplementing()) - trait.Docked(); - foreach (var nd in Refinery.TraitsImplementing()) + foreach (var nd in self.TraitsImplementing()) + nd.Docked(self, Refinery); + + foreach (var nd in Refinery.TraitsImplementing()) nd.Docked(Refinery, self); if (spriteOverlay != null && !spriteOverlay.Visible) @@ -63,11 +64,11 @@ namespace OpenRA.Mods.Cnc.Activities body.Docked = false; spriteOverlay.Visible = false; - foreach (var trait in self.TraitsImplementing()) - trait.Undocked(); + foreach (var nd in self.TraitsImplementing()) + nd.Undocked(self, Refinery); if (Refinery.IsInWorld && !Refinery.IsDead) - foreach (var nd in Refinery.TraitsImplementing()) + foreach (var nd in Refinery.TraitsImplementing()) nd.Undocked(Refinery, self); }); } @@ -76,11 +77,11 @@ namespace OpenRA.Mods.Cnc.Activities dockingState = DockingState.Complete; body.Docked = false; - foreach (var trait in self.TraitsImplementing()) - trait.Undocked(); + foreach (var nd in self.TraitsImplementing()) + nd.Undocked(self, Refinery); if (Refinery.IsInWorld && !Refinery.IsDead) - foreach (var nd in Refinery.TraitsImplementing()) + foreach (var nd in Refinery.TraitsImplementing()) nd.Undocked(Refinery, self); } } diff --git a/OpenRA.Mods.Common/Activities/SpriteHarvesterDockSequence.cs b/OpenRA.Mods.Common/Activities/SpriteHarvesterDockSequence.cs index 12821bee2c..e2d224dfe9 100644 --- a/OpenRA.Mods.Common/Activities/SpriteHarvesterDockSequence.cs +++ b/OpenRA.Mods.Common/Activities/SpriteHarvesterDockSequence.cs @@ -29,10 +29,10 @@ namespace OpenRA.Mods.Common.Activities public override void OnStateDock(Actor self) { - foreach (var trait in self.TraitsImplementing()) - trait.Docked(); + foreach (var nd in self.TraitsImplementing()) + nd.Docked(self, Refinery); - foreach (var nd in Refinery.TraitsImplementing()) + foreach (var nd in Refinery.TraitsImplementing()) nd.Docked(Refinery, self); if (wda != null) @@ -62,11 +62,11 @@ namespace OpenRA.Mods.Common.Activities void NotifyUndock(Actor self) { dockingState = DockingState.Complete; - foreach (var trait in self.TraitsImplementing()) - trait.Undocked(); + foreach (var nd in self.TraitsImplementing()) + nd.Undocked(self, Refinery); if (Refinery.IsInWorld && !Refinery.IsDead) - foreach (var nd in Refinery.TraitsImplementing()) + foreach (var nd in Refinery.TraitsImplementing()) nd.Undocked(Refinery, self); } } diff --git a/OpenRA.Mods.Common/Traits/CarryableHarvester.cs b/OpenRA.Mods.Common/Traits/CarryableHarvester.cs index 7824ff7676..3c51f7c166 100644 --- a/OpenRA.Mods.Common/Traits/CarryableHarvester.cs +++ b/OpenRA.Mods.Common/Traits/CarryableHarvester.cs @@ -49,7 +49,5 @@ namespace OpenRA.Mods.Common.Traits } void INotifyHarvesterAction.Harvested(Actor self, string resourceType) { } - void INotifyHarvesterAction.Docked() { } - void INotifyHarvesterAction.Undocked() { } } } diff --git a/OpenRA.Mods.Common/Traits/Cloak.cs b/OpenRA.Mods.Common/Traits/Cloak.cs index b2fe29e421..d90f44744a 100644 --- a/OpenRA.Mods.Common/Traits/Cloak.cs +++ b/OpenRA.Mods.Common/Traits/Cloak.cs @@ -92,7 +92,7 @@ namespace OpenRA.Mods.Common.Traits } public class Cloak : PausableConditionalTrait, IRenderModifier, INotifyDamage, INotifyUnload, INotifyDemolition, INotifyInfiltration, - INotifyAttack, ITick, IVisibilityModifier, IRadarColorModifier, INotifyCreated, INotifyHarvesterAction, INotifyBeingResupplied + INotifyAttack, ITick, IVisibilityModifier, IRadarColorModifier, INotifyCreated, INotifyDockClient, INotifyBeingResupplied { [Sync] int remainingTime; @@ -270,15 +270,7 @@ namespace OpenRA.Mods.Common.Traits return color; } - void INotifyHarvesterAction.MovingToResources(Actor self, CPos targetCell) { } - - void INotifyHarvesterAction.MovingToRefinery(Actor self, Actor refineryActor) { } - - void INotifyHarvesterAction.MovementCancelled(Actor self) { } - - void INotifyHarvesterAction.Harvested(Actor self, string resourceType) { } - - void INotifyHarvesterAction.Docked() + void INotifyDockClient.Docked(Actor self, Actor host) { if (Info.UncloakOn.HasFlag(UncloakType.Dock)) { @@ -287,7 +279,7 @@ namespace OpenRA.Mods.Common.Traits } } - void INotifyHarvesterAction.Undocked() + void INotifyDockClient.Undocked(Actor self, Actor host) { isDocking = false; } diff --git a/OpenRA.Mods.Common/Traits/Render/WithDockedOverlay.cs b/OpenRA.Mods.Common/Traits/Render/WithDockedOverlay.cs index 3b6add68fb..21ca92d516 100644 --- a/OpenRA.Mods.Common/Traits/Render/WithDockedOverlay.cs +++ b/OpenRA.Mods.Common/Traits/Render/WithDockedOverlay.cs @@ -34,7 +34,7 @@ namespace OpenRA.Mods.Common.Traits.Render public override object Create(ActorInitializer init) { return new WithDockedOverlay(init.Self, this); } } - public class WithDockedOverlay : PausableConditionalTrait, INotifyDocking + public class WithDockedOverlay : PausableConditionalTrait, INotifyDockHost { readonly AnimationWithOffset anim; bool docked; @@ -61,7 +61,7 @@ namespace OpenRA.Mods.Common.Traits.Render anim.Animation.PlayThen(Info.Sequence, PlayDockingOverlay); } - void INotifyDocking.Docked(Actor self, Actor harvester) { docked = true; PlayDockingOverlay(); } - void INotifyDocking.Undocked(Actor self, Actor harvester) { docked = false; } + void INotifyDockHost.Docked(Actor self, Actor client) { docked = true; PlayDockingOverlay(); } + void INotifyDockHost.Undocked(Actor self, Actor client) { docked = false; } } } diff --git a/OpenRA.Mods.Common/Traits/Render/WithHarvestAnimation.cs b/OpenRA.Mods.Common/Traits/Render/WithHarvestAnimation.cs index 296fc42fcc..d6bcda6065 100644 --- a/OpenRA.Mods.Common/Traits/Render/WithHarvestAnimation.cs +++ b/OpenRA.Mods.Common/Traits/Render/WithHarvestAnimation.cs @@ -44,8 +44,6 @@ namespace OpenRA.Mods.Common.Traits.Render wsb.PlayCustomAnimation(self, sequence); } - void INotifyHarvesterAction.Docked() { } - void INotifyHarvesterAction.Undocked() { } void INotifyHarvesterAction.MovingToResources(Actor self, CPos targetCell) { } void INotifyHarvesterAction.MovingToRefinery(Actor self, Actor refineryActor) { } void INotifyHarvesterAction.MovementCancelled(Actor self) { } diff --git a/OpenRA.Mods.Common/Traits/Render/WithHarvestOverlay.cs b/OpenRA.Mods.Common/Traits/Render/WithHarvestOverlay.cs index 02cb6bae6a..4808ab30b1 100644 --- a/OpenRA.Mods.Common/Traits/Render/WithHarvestOverlay.cs +++ b/OpenRA.Mods.Common/Traits/Render/WithHarvestOverlay.cs @@ -66,8 +66,6 @@ namespace OpenRA.Mods.Common.Traits.Render void INotifyHarvesterAction.MovingToResources(Actor self, CPos targetCell) { } void INotifyHarvesterAction.MovingToRefinery(Actor self, Actor targetRefinery) { } void INotifyHarvesterAction.MovementCancelled(Actor self) { } - void INotifyHarvesterAction.Docked() { } - void INotifyHarvesterAction.Undocked() { } 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 74d557caa5..135f1ea613 100644 --- a/OpenRA.Mods.Common/TraitsInterfaces.cs +++ b/OpenRA.Mods.Common/TraitsInterfaces.cs @@ -162,7 +162,11 @@ namespace OpenRA.Mods.Common.Traits public interface INotifyProduction { void UnitProduced(Actor self, Actor other, CPos exit); } public interface INotifyOtherProduction { void UnitProducedByOther(Actor self, Actor producer, Actor produced, string productionType, TypeDictionary init); } public interface INotifyDelivery { void IncomingDelivery(Actor self); void Delivered(Actor self); } - public interface INotifyDocking { void Docked(Actor self, Actor harvester); void Undocked(Actor self, Actor harvester); } + + [RequireExplicitImplementation] + public interface INotifyDockHost { void Docked(Actor self, Actor client); void Undocked(Actor self, Actor client); } + [RequireExplicitImplementation] + public interface INotifyDockClient { void Docked(Actor self, Actor host); void Undocked(Actor self, Actor host); } [RequireExplicitImplementation] public interface INotifyResourceAccepted { void OnResourceAccepted(Actor self, Actor refinery, string resourceType, int count, int value); } @@ -202,8 +206,6 @@ namespace OpenRA.Mods.Common.Traits void MovingToRefinery(Actor self, Actor refineryActor); void MovementCancelled(Actor self); void Harvested(Actor self, string resourceType); - void Docked(); - void Undocked(); } [RequireExplicitImplementation]