diff --git a/OpenRA.Mods.Cnc/Activities/VoxelHarvesterDockSequence.cs b/OpenRA.Mods.Cnc/Activities/VoxelHarvesterDockSequence.cs index 858352276c..072646da4f 100644 --- a/OpenRA.Mods.Cnc/Activities/VoxelHarvesterDockSequence.cs +++ b/OpenRA.Mods.Cnc/Activities/VoxelHarvesterDockSequence.cs @@ -11,6 +11,7 @@ using OpenRA.Mods.Cnc.Traits.Render; using OpenRA.Mods.Common.Activities; +using OpenRA.Mods.Common.Traits; namespace OpenRA.Mods.Cnc.Activities { @@ -29,6 +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()) + nd.Docked(Refinery, self); if (spriteOverlay != null && !spriteOverlay.Visible) { @@ -57,12 +62,26 @@ namespace OpenRA.Mods.Cnc.Activities dockingState = DockingState.Complete; body.Docked = false; spriteOverlay.Visible = false; + + foreach (var trait in self.TraitsImplementing()) + trait.Undocked(); + + if (Refinery.IsInWorld && !Refinery.IsDead) + foreach (var nd in Refinery.TraitsImplementing()) + nd.Undocked(Refinery, self); }); } else { dockingState = DockingState.Complete; body.Docked = false; + + foreach (var trait in self.TraitsImplementing()) + trait.Undocked(); + + if (Refinery.IsInWorld && !Refinery.IsDead) + foreach (var nd in Refinery.TraitsImplementing()) + nd.Undocked(Refinery, self); } } } diff --git a/OpenRA.Mods.Common/Activities/HarvesterDockSequence.cs b/OpenRA.Mods.Common/Activities/HarvesterDockSequence.cs index eda650ebbe..bbda40ac8d 100644 --- a/OpenRA.Mods.Common/Activities/HarvesterDockSequence.cs +++ b/OpenRA.Mods.Common/Activities/HarvesterDockSequence.cs @@ -70,12 +70,7 @@ namespace OpenRA.Mods.Common.Activities case DockingState.Dock: if (!IsCanceling && Refinery.IsInWorld && !Refinery.IsDead) - { - foreach (var nd in Refinery.TraitsImplementing()) - nd.Docked(Refinery, self); - OnStateDock(self); - } else dockingState = DockingState.Undock; @@ -92,10 +87,6 @@ namespace OpenRA.Mods.Common.Activities return false; case DockingState.Complete: - if (Refinery.IsInWorld && !Refinery.IsDead) - foreach (var nd in Refinery.TraitsImplementing()) - nd.Undocked(Refinery, self); - Harv.LastLinkedProc = Harv.LinkedProc; Harv.LinkProc(self, null); if (IsDragRequired) diff --git a/OpenRA.Mods.Common/Activities/SpriteHarvesterDockSequence.cs b/OpenRA.Mods.Common/Activities/SpriteHarvesterDockSequence.cs index fe56aa7d19..afc5bc89ce 100644 --- a/OpenRA.Mods.Common/Activities/SpriteHarvesterDockSequence.cs +++ b/OpenRA.Mods.Common/Activities/SpriteHarvesterDockSequence.cs @@ -31,6 +31,8 @@ namespace OpenRA.Mods.Common.Activities { foreach (var trait in self.TraitsImplementing()) trait.Docked(); + foreach (var nd in Refinery.TraitsImplementing()) + nd.Docked(Refinery, self); wsb.PlayCustomAnimation(self, wda.DockSequence, () => wsb.PlayCustomAnimationRepeating(self, wda.DockLoopSequence)); dockAnimPlayed = true; @@ -53,6 +55,10 @@ namespace OpenRA.Mods.Common.Activities dockingState = DockingState.Complete; foreach (var trait in self.TraitsImplementing()) trait.Undocked(); + + if (Refinery.IsInWorld && !Refinery.IsDead) + foreach (var nd in Refinery.TraitsImplementing()) + nd.Undocked(Refinery, self); }); } }