Replace pseudo-childactivities in Enter and related.

This commit is contained in:
tovl
2019-04-02 21:49:15 +02:00
committed by Paul Chote
parent d5588c51ed
commit a000b173d8
3 changed files with 21 additions and 48 deletions

View File

@@ -136,9 +136,10 @@ namespace OpenRA.Mods.Common.Activities
base.OnActorDispose(self);
}
protected override void OnCancel(Actor self)
public override void Cancel(Actor self, bool keepQueue = false)
{
CancelCapture(self);
base.Cancel(self, keepQueue);
}
void CancelCapture(Actor self)

View File

@@ -20,7 +20,7 @@ namespace OpenRA.Mods.Common.Activities
public abstract class Enter : Activity
{
enum EnterState { Approaching, Waiting, Entering, Exiting }
enum EnterState { Approaching, Entering, Exiting }
readonly IMove move;
readonly Color? targetLineColor;
@@ -57,12 +57,6 @@ namespace OpenRA.Mods.Common.Activities
/// </summary>
protected virtual void OnEnterComplete(Actor self, Actor targetActor) { }
/// <summary>
/// Called when the activity is cancelled to allow subclasses to clean up their own state.
/// </summary>
protected virtual void OnCancel(Actor self) { }
Activity moveActivity;
public override Activity Tick(Actor self)
{
// Update our view of the target
@@ -86,10 +80,10 @@ namespace OpenRA.Mods.Common.Activities
// We need to wait for movement to finish before transitioning to
// the next state or next activity
if (moveActivity != null)
if (ChildActivity != null)
{
moveActivity = ActivityUtils.RunActivity(self, moveActivity);
if (moveActivity != null)
ChildActivity = ActivityUtils.RunActivity(self, ChildActivity);
if (ChildActivity != null)
return this;
}
@@ -97,7 +91,6 @@ namespace OpenRA.Mods.Common.Activities
switch (lastState)
{
case EnterState.Approaching:
case EnterState.Waiting:
{
// NOTE: We can safely cancel in this case because we know the
// actor has finished any in-progress move activities
@@ -111,12 +104,10 @@ namespace OpenRA.Mods.Common.Activities
// We are not next to the target - lets fix that
if (target.Type != TargetType.Invalid && !move.CanEnterTargetNow(self, target))
{
lastState = EnterState.Approaching;
// Target lines are managed by this trait, so we do not pass targetLineColor
var initialTargetPosition = (useLastVisibleTarget ? lastVisibleTarget : target).CenterPosition;
moveActivity = ActivityUtils.RunActivity(self, move.MoveToTarget(self, target, initialTargetPosition));
break;
QueueChild(self, move.MoveToTarget(self, target, initialTargetPosition), true);
return this;
}
// We are next to where we thought the target should be, but it isn't here
@@ -128,7 +119,7 @@ namespace OpenRA.Mods.Common.Activities
if (TryStartEnter(self, target.Actor))
{
lastState = EnterState.Entering;
moveActivity = ActivityUtils.RunActivity(self, move.MoveIntoTarget(self, target));
QueueChild(self, move.MoveIntoTarget(self, target), true);
return this;
}
@@ -137,8 +128,7 @@ namespace OpenRA.Mods.Common.Activities
if (IsCanceling)
return NextActivity;
lastState = EnterState.Waiting;
break;
return this;
}
case EnterState.Entering:
@@ -149,8 +139,8 @@ namespace OpenRA.Mods.Common.Activities
OnEnterComplete(self, target.Actor);
lastState = EnterState.Exiting;
moveActivity = ActivityUtils.RunActivity(self, move.MoveIntoWorld(self, self.Location));
break;
QueueChild(self, move.MoveIntoWorld(self, self.Location), true);
return this;
}
case EnterState.Exiting:
@@ -159,15 +149,5 @@ namespace OpenRA.Mods.Common.Activities
return this;
}
public override void Cancel(Actor self, bool keepQueue = false)
{
OnCancel(self);
if (!IsCanceling && moveActivity != null)
moveActivity.Cancel(self);
base.Cancel(self, keepQueue);
}
}
}

View File

@@ -68,14 +68,16 @@ namespace OpenRA.Mods.Common.Activities
});
}
protected override void OnCancel(Actor self)
protected override void OnLastRun(Actor self)
{
passenger.Unreserve(self);
}
protected override void OnLastRun(Actor self)
public override void Cancel(Actor self, bool keepQueue = false)
{
passenger.Unreserve(self);
base.Cancel(self, keepQueue);
}
}
@@ -84,23 +86,21 @@ namespace OpenRA.Mods.Common.Activities
readonly string type;
readonly Passenger passenger;
Activity enterTransport;
public EnterTransports(Actor self, Target primaryTarget)
{
passenger = self.Trait<Passenger>();
if (primaryTarget.Type == TargetType.Actor)
type = primaryTarget.Actor.Info.Name;
enterTransport = new EnterTransport(self, primaryTarget);
QueueChild(self, new EnterTransport(self, primaryTarget));
}
public override Activity Tick(Actor self)
{
if (enterTransport != null)
if (ChildActivity != null)
{
enterTransport = ActivityUtils.RunActivity(self, enterTransport);
if (enterTransport != null)
ChildActivity = ActivityUtils.RunActivity(self, ChildActivity);
if (ChildActivity != null)
return this;
}
@@ -126,19 +126,11 @@ namespace OpenRA.Mods.Common.Activities
if (transport != null)
{
enterTransport = ActivityUtils.RunActivity(self, new EnterTransport(self, Target.FromActor(transport)));
QueueChild(self, ActivityUtils.RunActivity(self, new EnterTransport(self, Target.FromActor(transport))), true);
return this;
}
return NextActivity;
}
public override void Cancel(Actor self, bool keepQueue = false)
{
if (!IsCanceling && enterTransport != null)
enterTransport.Cancel(self);
base.Cancel(self, keepQueue);
}
}
}