diff --git a/OpenRA.Game/Activities/Activity.cs b/OpenRA.Game/Activities/Activity.cs index 97b7708c1e..45fbf91f38 100644 --- a/OpenRA.Game/Activities/Activity.cs +++ b/OpenRA.Game/Activities/Activity.cs @@ -201,7 +201,7 @@ namespace OpenRA.Activities /// protected virtual void OnLastRun(Actor self) { } - public virtual bool Cancel(Actor self) + public virtual bool Cancel(Actor self, bool keepQueue = false) { if (!IsInterruptible) return false; @@ -209,9 +209,11 @@ namespace OpenRA.Activities if (ChildActivity != null && !ChildActivity.Cancel(self)) return false; - State = ActivityState.Canceled; - NextActivity = null; + if (!keepQueue) + NextActivity = null; + ChildActivity = null; + State = ActivityState.Canceled; return true; } diff --git a/OpenRA.Mods.Common/Activities/DeliverUnit.cs b/OpenRA.Mods.Common/Activities/DeliverUnit.cs index 97b4b24d06..ba38ec32c5 100644 --- a/OpenRA.Mods.Common/Activities/DeliverUnit.cs +++ b/OpenRA.Mods.Common/Activities/DeliverUnit.cs @@ -207,7 +207,7 @@ namespace OpenRA.Mods.Common.Activities }); } - public override bool Cancel(Actor self) + public override bool Cancel(Actor self, bool keepQueue = false) { if (!IsCanceled && innerActivity != null && !innerActivity.Cancel(self)) return false; diff --git a/OpenRA.Mods.Common/Activities/Enter.cs b/OpenRA.Mods.Common/Activities/Enter.cs index 5a095e757b..34894fe5c9 100644 --- a/OpenRA.Mods.Common/Activities/Enter.cs +++ b/OpenRA.Mods.Common/Activities/Enter.cs @@ -112,7 +112,7 @@ namespace OpenRA.Mods.Common.Activities inner.Cancel(self); } - public override bool Cancel(Actor self) + public override bool Cancel(Actor self, bool keepQueue = false) { AbortOrExit(self); if (nextState < EnterState.Exiting) diff --git a/OpenRA.Mods.Common/Activities/HarvesterDockSequence.cs b/OpenRA.Mods.Common/Activities/HarvesterDockSequence.cs index 5a7e61e8d4..183fcd1ea5 100644 --- a/OpenRA.Mods.Common/Activities/HarvesterDockSequence.cs +++ b/OpenRA.Mods.Common/Activities/HarvesterDockSequence.cs @@ -81,7 +81,7 @@ namespace OpenRA.Mods.Common.Activities throw new InvalidOperationException("Invalid harvester dock state"); } - public override bool Cancel(Actor self) + public override bool Cancel(Actor self, bool keepQueue = false) { dockingState = DockingState.Undock; return base.Cancel(self); diff --git a/OpenRA.Mods.Common/Activities/Move/AttackMoveActivity.cs b/OpenRA.Mods.Common/Activities/Move/AttackMoveActivity.cs index 4a34348177..6e8c29b9e5 100644 --- a/OpenRA.Mods.Common/Activities/Move/AttackMoveActivity.cs +++ b/OpenRA.Mods.Common/Activities/Move/AttackMoveActivity.cs @@ -46,12 +46,12 @@ namespace OpenRA.Mods.Common.Activities return this; } - public override bool Cancel(Actor self) + public override bool Cancel(Actor self, bool keepQueue = false) { if (!IsCanceled && inner != null && !inner.Cancel(self)) return false; - return base.Cancel(self); + return base.Cancel(self, keepQueue); } public override IEnumerable GetTargets(Actor self) diff --git a/OpenRA.Mods.Common/Activities/Move/Move.cs b/OpenRA.Mods.Common/Activities/Move/Move.cs index eebf40fae8..6d728670c5 100644 --- a/OpenRA.Mods.Common/Activities/Move/Move.cs +++ b/OpenRA.Mods.Common/Activities/Move/Move.cs @@ -334,9 +334,9 @@ namespace OpenRA.Mods.Common.Activities } } - public override bool Cancel(Actor self) + public override bool Cancel(Actor self, bool keepQueue = false) { - Move.Cancel(self); + Move.Cancel(self, keepQueue); return base.Cancel(self); } diff --git a/OpenRA.Mods.Common/Activities/Move/MoveAdjacentTo.cs b/OpenRA.Mods.Common/Activities/Move/MoveAdjacentTo.cs index e2c9a81215..3c6028119f 100644 --- a/OpenRA.Mods.Common/Activities/Move/MoveAdjacentTo.cs +++ b/OpenRA.Mods.Common/Activities/Move/MoveAdjacentTo.cs @@ -161,7 +161,7 @@ namespace OpenRA.Mods.Common.Activities return Target.None; } - public override bool Cancel(Actor self) + public override bool Cancel(Actor self, bool keepQueue = false) { if (!IsCanceled && inner != null && !inner.Cancel(self)) return false; diff --git a/OpenRA.Mods.Common/Activities/PickupUnit.cs b/OpenRA.Mods.Common/Activities/PickupUnit.cs index c27d840e57..ec98f8a55d 100644 --- a/OpenRA.Mods.Common/Activities/PickupUnit.cs +++ b/OpenRA.Mods.Common/Activities/PickupUnit.cs @@ -157,12 +157,12 @@ namespace OpenRA.Mods.Common.Activities }); } - public override bool Cancel(Actor self) + public override bool Cancel(Actor self, bool keepQueue = false) { if (!IsCanceled && innerActivity != null && !innerActivity.Cancel(self)) return false; - return base.Cancel(self); + return base.Cancel(self, keepQueue); } } } diff --git a/OpenRA.Mods.Common/Activities/Wait.cs b/OpenRA.Mods.Common/Activities/Wait.cs index f9f11697b2..66e3f68d07 100644 --- a/OpenRA.Mods.Common/Activities/Wait.cs +++ b/OpenRA.Mods.Common/Activities/Wait.cs @@ -30,9 +30,9 @@ namespace OpenRA.Mods.Common.Activities return (remainingTicks-- == 0) ? NextActivity : this; } - public override bool Cancel(Actor self) + public override bool Cancel(Actor self, bool keepQueue = false) { - if (!base.Cancel(self)) + if (!base.Cancel(self, keepQueue)) return false; remainingTicks = 0; @@ -56,9 +56,9 @@ namespace OpenRA.Mods.Common.Activities return (f == null || f()) ? NextActivity : this; } - public override bool Cancel(Actor self) + public override bool Cancel(Actor self, bool keepQueue = false) { - if (!base.Cancel(self)) + if (!base.Cancel(self, keepQueue)) return false; f = null; diff --git a/OpenRA.Mods.Common/Activities/WaitForTransport.cs b/OpenRA.Mods.Common/Activities/WaitForTransport.cs index 6c5d30e716..0ecd037397 100644 --- a/OpenRA.Mods.Common/Activities/WaitForTransport.cs +++ b/OpenRA.Mods.Common/Activities/WaitForTransport.cs @@ -41,12 +41,12 @@ namespace OpenRA.Mods.Common.Activities return this; } - public override bool Cancel(Actor self) + public override bool Cancel(Actor self, bool keepQueue = false) { if (!IsCanceled && inner != null && !inner.Cancel(self)) return false; - return base.Cancel(self); + return base.Cancel(self, keepQueue); } } } diff --git a/OpenRA.Mods.Common/Scripting/CallLuaFunc.cs b/OpenRA.Mods.Common/Scripting/CallLuaFunc.cs index 272aa4a20e..660c8503e8 100644 --- a/OpenRA.Mods.Common/Scripting/CallLuaFunc.cs +++ b/OpenRA.Mods.Common/Scripting/CallLuaFunc.cs @@ -43,9 +43,9 @@ namespace OpenRA.Mods.Common.Activities return NextActivity; } - public override bool Cancel(Actor self) + public override bool Cancel(Actor self, bool keepQueue = false) { - if (!base.Cancel(self)) + if (!base.Cancel(self, keepQueue)) return false; Dispose();