diff --git a/OpenRA.Game/Traits/Activities/CancelableActivity.cs b/OpenRA.Game/Traits/Activities/CancelableActivity.cs index 0f6f3ce8f4..d2d4139084 100755 --- a/OpenRA.Game/Traits/Activities/CancelableActivity.cs +++ b/OpenRA.Game/Traits/Activities/CancelableActivity.cs @@ -5,24 +5,17 @@ using System.Text; namespace OpenRA.Traits.Activities { - public class Activity + public abstract class Activity { public Activity NextActivity { get; set; } protected bool IsCanceled { get; private set; } - public virtual Activity Tick( Actor self ) - { - return this; - } - protected virtual bool OnCancel( Actor self ) { return true; } + public abstract Activity Tick( Actor self ); public virtual void Cancel( Actor self ) { - IsCanceled = OnCancel( self ); - if( IsCanceled ) - NextActivity = null; - else if (NextActivity != null) - NextActivity.Cancel( self ); + IsCanceled = true; + NextActivity = null; } public virtual void Queue( Activity activity ) diff --git a/OpenRA.Mods.Cnc/Activities/HarvesterDockSequence.cs b/OpenRA.Mods.Cnc/Activities/HarvesterDockSequence.cs index 7c4250260a..2be7776aff 100644 --- a/OpenRA.Mods.Cnc/Activities/HarvesterDockSequence.cs +++ b/OpenRA.Mods.Cnc/Activities/HarvesterDockSequence.cs @@ -80,10 +80,10 @@ namespace OpenRA.Mods.Cnc throw new InvalidOperationException("Invalid harvester dock state"); } - protected override bool OnCancel(Actor self) + public override void Cancel(Actor self) { state = State.Undock; - return true; + base.Cancel(self); } public override IEnumerable GetTargets( Actor self ) diff --git a/OpenRA.Mods.RA/Activities/CallFunc.cs b/OpenRA.Mods.RA/Activities/CallFunc.cs index 5b5cc5c05b..0c55263f81 100644 --- a/OpenRA.Mods.RA/Activities/CallFunc.cs +++ b/OpenRA.Mods.RA/Activities/CallFunc.cs @@ -33,13 +33,10 @@ namespace OpenRA.Mods.RA.Activities return NextActivity; } - protected override bool OnCancel(Actor self) + public override void Cancel(Actor self) { - if (!interruptable) - return false; - - a = null; - return true; + if (interruptable) + base.Cancel(self); } } } diff --git a/OpenRA.Mods.RA/Activities/DeliverOre.cs b/OpenRA.Mods.RA/Activities/DeliverOre.cs index 50d838e1f1..3a90160c72 100755 --- a/OpenRA.Mods.RA/Activities/DeliverOre.cs +++ b/OpenRA.Mods.RA/Activities/DeliverOre.cs @@ -23,6 +23,7 @@ namespace OpenRA.Mods.RA.Activities public override Activity Tick( Actor self ) { + // TODO: wtf is this? if( NextActivity != null ) return NextActivity; @@ -48,11 +49,8 @@ namespace OpenRA.Mods.RA.Activities } return Util.SequenceActivities( new Wait(10), this ); } - - protected override bool OnCancel(Actor self) - { - // TODO: allow canceling of deliver orders? - return false; - } + + // Cannot be cancelled + public override void Cancel(Actor self) { } } } diff --git a/OpenRA.Mods.RA/Activities/MakeAnimation.cs b/OpenRA.Mods.RA/Activities/MakeAnimation.cs index a471fc96b4..c620c5028b 100644 --- a/OpenRA.Mods.RA/Activities/MakeAnimation.cs +++ b/OpenRA.Mods.RA/Activities/MakeAnimation.cs @@ -30,7 +30,6 @@ namespace OpenRA.Mods.RA.Activities bool started = false; public override Activity Tick( Actor self ) { - if (IsCanceled) return NextActivity; if (!started) { var rb = self.Trait(); @@ -51,7 +50,7 @@ namespace OpenRA.Mods.RA.Activities return complete ? NextActivity : this; } - // Not actually cancellable - protected override bool OnCancel( Actor self ) { return false; } + // Cannot be cancelled + public override void Cancel( Actor self ) { } } } diff --git a/OpenRA.Mods.RA/Activities/RAHarvesterDockSequence.cs b/OpenRA.Mods.RA/Activities/RAHarvesterDockSequence.cs index 7582faa9f1..111d5886a8 100644 --- a/OpenRA.Mods.RA/Activities/RAHarvesterDockSequence.cs +++ b/OpenRA.Mods.RA/Activities/RAHarvesterDockSequence.cs @@ -70,10 +70,10 @@ namespace OpenRA.Mods.RA throw new InvalidOperationException("Invalid harvester dock state"); } - protected override bool OnCancel(Actor self) + public override void Cancel(Actor self) { state = State.Undock; - return true; + base.Cancel(self); } public override IEnumerable GetTargets( Actor self ) diff --git a/OpenRA.Mods.RA/Activities/Sell.cs b/OpenRA.Mods.RA/Activities/Sell.cs index 63d80c7980..db31ff501e 100755 --- a/OpenRA.Mods.RA/Activities/Sell.cs +++ b/OpenRA.Mods.RA/Activities/Sell.cs @@ -40,7 +40,7 @@ namespace OpenRA.Mods.RA.Activities return this; } - // Not actually cancellable - protected override bool OnCancel( Actor self ) { return false; } + // Cannot be cancelled + public override void Cancel( Actor self ) { } } } diff --git a/OpenRA.Mods.RA/Activities/Wait.cs b/OpenRA.Mods.RA/Activities/Wait.cs index 16e34b795d..e35007294e 100644 --- a/OpenRA.Mods.RA/Activities/Wait.cs +++ b/OpenRA.Mods.RA/Activities/Wait.cs @@ -27,15 +27,16 @@ namespace OpenRA.Mods.RA.Activities public override Activity Tick(Actor self) { - if (remainingTicks-- == 0) return NextActivity; - return this; + return (remainingTicks-- == 0) ? NextActivity: this; } - protected override bool OnCancel( Actor self ) + public override void Cancel( Actor self ) { - if( !interruptable ) return false; + if( !interruptable ) + return; + remainingTicks = 0; - return true; + base.Cancel(self); } } } diff --git a/OpenRA.Mods.RA/Air/FallsToEarth.cs b/OpenRA.Mods.RA/Air/FallsToEarth.cs index b89bee350b..b86c28f908 100755 --- a/OpenRA.Mods.RA/Air/FallsToEarth.cs +++ b/OpenRA.Mods.RA/Air/FallsToEarth.cs @@ -73,6 +73,7 @@ namespace OpenRA.Mods.RA.Air return this; } - protected override bool OnCancel(Actor self) { return false; } + // Cannot be cancelled + public override void Cancel( Actor self ) { } } } diff --git a/OpenRA.Mods.RA/Air/FlyAttack.cs b/OpenRA.Mods.RA/Air/FlyAttack.cs index f2a4dd8dbd..15162a93b3 100755 --- a/OpenRA.Mods.RA/Air/FlyAttack.cs +++ b/OpenRA.Mods.RA/Air/FlyAttack.cs @@ -44,11 +44,12 @@ namespace OpenRA.Mods.RA.Air return this; } - protected override bool OnCancel( Actor self ) + public override void Cancel( Actor self ) { if( inner != null ) inner.Cancel( self ); - return base.OnCancel( self ); + + base.Cancel( self ); } } diff --git a/OpenRA.Mods.RA/Air/FlyTimed.cs b/OpenRA.Mods.RA/Air/FlyTimed.cs index 2815e22a30..02fca8351c 100755 --- a/OpenRA.Mods.RA/Air/FlyTimed.cs +++ b/OpenRA.Mods.RA/Air/FlyTimed.cs @@ -36,14 +36,17 @@ namespace OpenRA.Mods.RA.Air public override Activity Tick(Actor self) { var targetAltitude = self.Info.Traits.Get().CruiseAltitude; - if (IsCanceled || !self.World.Map.IsInMap(self.Location)) return NextActivity; + if (IsCanceled || !self.World.Map.IsInMap(self.Location)) + return NextActivity; + FlyUtil.Fly(self, targetAltitude); return this; } - protected override bool OnCancel( Actor self ) + public override void Cancel( Actor self ) { - return Interruptible; + if (Interruptible) + base.Cancel(self); } } } diff --git a/OpenRA.Mods.RA/AttackMove.cs b/OpenRA.Mods.RA/AttackMove.cs index e966011e17..2a28d71efa 100644 --- a/OpenRA.Mods.RA/AttackMove.cs +++ b/OpenRA.Mods.RA/AttackMove.cs @@ -90,11 +90,12 @@ namespace OpenRA.Mods.RA return this; } - protected override bool OnCancel( Actor self ) + public override void Cancel( Actor self ) { if( inner != null ) inner.Cancel( self ); - return base.OnCancel( self ); + + base.Cancel( self ); } } } diff --git a/OpenRA.Mods.RA/Move/Drag.cs b/OpenRA.Mods.RA/Move/Drag.cs index 71bf4edfc2..b697c901c2 100755 --- a/OpenRA.Mods.RA/Move/Drag.cs +++ b/OpenRA.Mods.RA/Move/Drag.cs @@ -42,14 +42,12 @@ namespace OpenRA.Mods.RA.Move return this; } - protected override bool OnCancel(Actor self) - { - return false; - } - public override IEnumerable GetTargets( Actor self ) { yield return Target.FromPos(endLocation); } + + // Cannot be cancelled + public override void Cancel( Actor self ) { } } } diff --git a/OpenRA.Mods.RA/Move/Move.cs b/OpenRA.Mods.RA/Move/Move.cs index 14ed6e9b73..d810c5a8d9 100755 --- a/OpenRA.Mods.RA/Move/Move.cs +++ b/OpenRA.Mods.RA/Move/Move.cs @@ -233,10 +233,10 @@ namespace OpenRA.Mods.RA.Move return Pair.New(nextCell, subCell); } - protected override bool OnCancel( Actor self ) + public override void Cancel( Actor self ) { path = new List(); - return true; + base.Cancel(self); } public override IEnumerable GetTargets( Actor self ) @@ -267,9 +267,10 @@ namespace OpenRA.Mods.RA.Move this.moveFractionTotal = ( ( to - from ) * 3 ).Length; } - protected override bool OnCancel( Actor self ) + public override void Cancel( Actor self ) { - return move.OnCancel( self ); + move.Cancel( self ); + base.Cancel( self ); } public override void Queue( Activity activity )