diff --git a/OpenRA.Mods.Common/Activities/Resupply.cs b/OpenRA.Mods.Common/Activities/Resupply.cs index 22c6fb242f..bf8722aad6 100644 --- a/OpenRA.Mods.Common/Activities/Resupply.cs +++ b/OpenRA.Mods.Common/Activities/Resupply.cs @@ -28,7 +28,8 @@ namespace OpenRA.Mods.Common.Activities readonly RepairableNear repairableNear; readonly Rearmable rearmable; readonly INotifyResupply[] notifyResupplies; - readonly INotifyBeingResupplied[] notifyBeingResupplied; + readonly INotifyDockHost[] notifyDockHosts; + readonly INotifyDockClient[] notifyDockClients; readonly ICallForTransport[] transportCallers; readonly IMove move; readonly Aircraft aircraft; @@ -54,7 +55,8 @@ namespace OpenRA.Mods.Common.Activities repairableNear = self.TraitOrDefault(); rearmable = self.TraitOrDefault(); notifyResupplies = host.TraitsImplementing().ToArray(); - notifyBeingResupplied = self.TraitsImplementing().ToArray(); + notifyDockHosts = host.TraitsImplementing().ToArray(); + notifyDockClients = self.TraitsImplementing().ToArray(); transportCallers = self.TraitsImplementing().ToArray(); move = self.Trait(); aircraft = move as Aircraft; @@ -150,8 +152,11 @@ namespace OpenRA.Mods.Common.Activities foreach (var notifyResupply in notifyResupplies) notifyResupply.BeforeResupply(host.Actor, self, activeResupplyTypes); - foreach (var br in notifyBeingResupplied) - br.StartingResupply(self, host.Actor); + foreach (var nd in notifyDockClients) + nd.Docked(self, host.Actor); + + foreach (var nd in notifyDockHosts) + nd.Docked(host.Actor, self); } if (activeResupplyTypes.HasFlag(ResupplyType.Repair)) @@ -241,8 +246,11 @@ namespace OpenRA.Mods.Common.Activities QueueChild(move.MoveToTarget(self, host)); } - foreach (var br in notifyBeingResupplied) - br.StoppingResupply(self, isHostInvalid ? null : host.Actor); + foreach (var nd in notifyDockClients) + nd.Undocked(self, host.Actor); + + foreach (var nd in notifyDockHosts) + nd.Undocked(host.Actor, self); } void RepairTick(Actor self) diff --git a/OpenRA.Mods.Common/Traits/Cloak.cs b/OpenRA.Mods.Common/Traits/Cloak.cs index d90f44744a..93c27bb616 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, INotifyDockClient, INotifyBeingResupplied + INotifyAttack, ITick, IVisibilityModifier, IRadarColorModifier, INotifyCreated, INotifyDockClient { [Sync] int remainingTime; @@ -281,7 +281,8 @@ namespace OpenRA.Mods.Common.Traits void INotifyDockClient.Undocked(Actor self, Actor host) { - isDocking = false; + if (Info.UncloakOn.HasFlag(UncloakType.Dock)) + isDocking = false; } void INotifyUnload.Unloading(Actor self) @@ -301,20 +302,5 @@ namespace OpenRA.Mods.Common.Traits if (Info.UncloakOn.HasFlag(UncloakType.Infiltrate)) Uncloak(); } - - void INotifyBeingResupplied.StartingResupply(Actor self, Actor host) - { - if (Info.UncloakOn.HasFlag(UncloakType.Dock)) - { - isDocking = true; - Uncloak(); - } - } - - void INotifyBeingResupplied.StoppingResupply(Actor self, Actor host) - { - if (Info.UncloakOn.HasFlag(UncloakType.Dock)) - isDocking = false; - } } } diff --git a/OpenRA.Mods.Common/TraitsInterfaces.cs b/OpenRA.Mods.Common/TraitsInterfaces.cs index 135f1ea613..692343d4e5 100644 --- a/OpenRA.Mods.Common/TraitsInterfaces.cs +++ b/OpenRA.Mods.Common/TraitsInterfaces.cs @@ -140,13 +140,6 @@ namespace OpenRA.Mods.Common.Traits void ResupplyTick(Actor host, Actor target, ResupplyType types); } - [RequireExplicitImplementation] - public interface INotifyBeingResupplied - { - void StartingResupply(Actor self, Actor host); - void StoppingResupply(Actor self, Actor host); - } - [RequireExplicitImplementation] public interface INotifyTakeOff { void TakeOff(Actor self); } [RequireExplicitImplementation]