Add native support for uninterruptible activities
This pattern occurs a few times throughout the code, so it makes sense to bake it into the Activity class itself.
This commit is contained in:
@@ -46,12 +46,12 @@ namespace OpenRA.Mods.Common.Activities
|
||||
return this;
|
||||
}
|
||||
|
||||
public override void Cancel(Actor self)
|
||||
public override bool Cancel(Actor self)
|
||||
{
|
||||
if (inner != null)
|
||||
inner.Cancel(self);
|
||||
if (!IsCanceled && inner != null && !inner.Cancel(self))
|
||||
return false;
|
||||
|
||||
base.Cancel(self);
|
||||
return base.Cancel(self);
|
||||
}
|
||||
|
||||
public override IEnumerable<Target> GetTargets(Actor self)
|
||||
|
||||
@@ -32,6 +32,7 @@ namespace OpenRA.Mods.Common.Activities
|
||||
this.start = start;
|
||||
this.end = end;
|
||||
this.length = length;
|
||||
IsInterruptible = false;
|
||||
}
|
||||
|
||||
public override Activity Tick(Actor self)
|
||||
@@ -62,8 +63,5 @@ namespace OpenRA.Mods.Common.Activities
|
||||
{
|
||||
yield return Target.FromPos(end);
|
||||
}
|
||||
|
||||
// Cannot be cancelled
|
||||
public override void Cancel(Actor self) { }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -272,10 +272,10 @@ namespace OpenRA.Mods.Common.Activities
|
||||
return Pair.New(nextCell, subCell);
|
||||
}
|
||||
|
||||
public override void Cancel(Actor self)
|
||||
public override bool Cancel(Actor self)
|
||||
{
|
||||
path = NoPath;
|
||||
base.Cancel(self);
|
||||
return base.Cancel(self);
|
||||
}
|
||||
|
||||
public override IEnumerable<Target> GetTargets(Actor self)
|
||||
@@ -331,10 +331,10 @@ namespace OpenRA.Mods.Common.Activities
|
||||
}
|
||||
}
|
||||
|
||||
public override void Cancel(Actor self)
|
||||
public override bool Cancel(Actor self)
|
||||
{
|
||||
Move.Cancel(self);
|
||||
base.Cancel(self);
|
||||
return base.Cancel(self);
|
||||
}
|
||||
|
||||
public override void Queue(Activity activity)
|
||||
|
||||
@@ -161,12 +161,12 @@ namespace OpenRA.Mods.Common.Activities
|
||||
return Target.None;
|
||||
}
|
||||
|
||||
public override void Cancel(Actor self)
|
||||
public override bool Cancel(Actor self)
|
||||
{
|
||||
if (inner != null)
|
||||
inner.Cancel(self);
|
||||
if (!IsCanceled && inner != null && !inner.Cancel(self))
|
||||
return false;
|
||||
|
||||
base.Cancel(self);
|
||||
return base.Cancel(self);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user