Tidy up Activity.Cancel(), make Tick abstract
This commit is contained in:
@@ -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 )
|
||||
IsCanceled = true;
|
||||
NextActivity = null;
|
||||
else if (NextActivity != null)
|
||||
NextActivity.Cancel( self );
|
||||
}
|
||||
|
||||
public virtual void Queue( Activity activity )
|
||||
|
||||
@@ -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<Target> GetTargets( Actor self )
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@ namespace OpenRA.Mods.RA.Activities
|
||||
|
||||
public override Activity Tick( Actor self )
|
||||
{
|
||||
// TODO: wtf is this?
|
||||
if( NextActivity != null )
|
||||
return NextActivity;
|
||||
|
||||
@@ -49,10 +50,7 @@ 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) { }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<RenderBuilding>();
|
||||
@@ -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 ) { }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<Target> GetTargets( Actor self )
|
||||
|
||||
@@ -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 ) { }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 ) { }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -36,14 +36,17 @@ namespace OpenRA.Mods.RA.Air
|
||||
public override Activity Tick(Actor self)
|
||||
{
|
||||
var targetAltitude = self.Info.Traits.Get<PlaneInfo>().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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,14 +42,12 @@ namespace OpenRA.Mods.RA.Move
|
||||
return this;
|
||||
}
|
||||
|
||||
protected override bool OnCancel(Actor self)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
public override IEnumerable<Target> GetTargets( Actor self )
|
||||
{
|
||||
yield return Target.FromPos(endLocation);
|
||||
}
|
||||
|
||||
// Cannot be cancelled
|
||||
public override void Cancel( Actor self ) { }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<int2>();
|
||||
return true;
|
||||
base.Cancel(self);
|
||||
}
|
||||
|
||||
public override IEnumerable<Target> 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 )
|
||||
|
||||
Reference in New Issue
Block a user