diff --git a/OpenRA.Mods.Cnc/Activities/VoxelHarvesterDockSequence.cs b/OpenRA.Mods.Cnc/Activities/VoxelHarvesterDockSequence.cs index fc66b05d51..421cb3b9ea 100644 --- a/OpenRA.Mods.Cnc/Activities/VoxelHarvesterDockSequence.cs +++ b/OpenRA.Mods.Cnc/Activities/VoxelHarvesterDockSequence.cs @@ -45,10 +45,12 @@ namespace OpenRA.Mods.Cnc.Activities public override void OnStateUndock(Actor self) { - dockingState = DockingState.Wait; - - if (spriteOverlay != null && !spriteOverlay.Visible) + // If body.Docked wasn't set, we didn't actually dock and have to skip the undock overlay + if (!body.Docked) + dockingState = DockingState.Complete; + else if (spriteOverlay != null && !spriteOverlay.Visible) { + dockingState = DockingState.Wait; spriteOverlay.Visible = true; spriteOverlay.WithOffset.Animation.PlayBackwardsThen(spriteOverlay.Info.Sequence, () => { diff --git a/OpenRA.Mods.Common/Activities/SpriteHarvesterDockSequence.cs b/OpenRA.Mods.Common/Activities/SpriteHarvesterDockSequence.cs index a231f94616..fe56aa7d19 100644 --- a/OpenRA.Mods.Common/Activities/SpriteHarvesterDockSequence.cs +++ b/OpenRA.Mods.Common/Activities/SpriteHarvesterDockSequence.cs @@ -18,6 +18,7 @@ namespace OpenRA.Mods.Common.Activities { readonly WithSpriteBody wsb; readonly WithDockingAnimationInfo wda; + protected bool dockAnimPlayed; public SpriteHarvesterDockSequence(Actor self, Actor refinery, WAngle dockAngle, bool isDragRequired, WVec dragOffset, int dragLength) : base(self, refinery, dockAngle, isDragRequired, dragOffset, dragLength) @@ -32,11 +33,20 @@ namespace OpenRA.Mods.Common.Activities trait.Docked(); wsb.PlayCustomAnimation(self, wda.DockSequence, () => wsb.PlayCustomAnimationRepeating(self, wda.DockLoopSequence)); + dockAnimPlayed = true; dockingState = DockingState.Loop; } public override void OnStateUndock(Actor self) { + // If dock animation hasn't played, we didn't actually dock and have to skip the undock anim and notification + if (!dockAnimPlayed) + { + dockingState = DockingState.Complete; + return; + } + + dockingState = DockingState.Wait; wsb.PlayCustomAnimationBackwards(self, wda.DockSequence, () => { @@ -44,7 +54,6 @@ namespace OpenRA.Mods.Common.Activities foreach (var trait in self.TraitsImplementing()) trait.Undocked(); }); - dockingState = DockingState.Wait; } } }