Rename existing activity states
This commit is contained in:
@@ -21,7 +21,7 @@ namespace OpenRA.Mods.Common.Activities
|
||||
public abstract class Enter : Activity
|
||||
{
|
||||
public enum ReserveStatus { None, TooFar, Pending, Ready }
|
||||
enum State { ApproachingOrEntering, Inside, Exiting, Done }
|
||||
enum EnterState { ApproachingOrEntering, Inside, Exiting, Done }
|
||||
|
||||
readonly IMove move;
|
||||
readonly int maxTries = 0;
|
||||
@@ -30,7 +30,7 @@ namespace OpenRA.Mods.Common.Activities
|
||||
|
||||
public Target Target { get { return target; } }
|
||||
Target target;
|
||||
State nextState = State.ApproachingOrEntering; // Hint/starting point for next state
|
||||
EnterState nextState = EnterState.ApproachingOrEntering; // Hint/starting point for next state
|
||||
bool isEnteringOrInside = false; // Used to know if exiting should be used
|
||||
WPos savedPos; // Position just before entering
|
||||
Activity inner;
|
||||
@@ -89,9 +89,9 @@ namespace OpenRA.Mods.Common.Activities
|
||||
// Abort entering and/or leave if necessary
|
||||
protected virtual void AbortOrExit(Actor self)
|
||||
{
|
||||
if (nextState == State.Done)
|
||||
if (nextState == EnterState.Done)
|
||||
return;
|
||||
nextState = isEnteringOrInside ? State.Exiting : State.Done;
|
||||
nextState = isEnteringOrInside ? EnterState.Exiting : EnterState.Done;
|
||||
if (inner == this)
|
||||
inner = null;
|
||||
else if (inner != null)
|
||||
@@ -103,9 +103,9 @@ namespace OpenRA.Mods.Common.Activities
|
||||
// Cancel inner activity and mark as done unless already leaving or done
|
||||
protected void Done(Actor self)
|
||||
{
|
||||
if (nextState == State.Done)
|
||||
if (nextState == EnterState.Done)
|
||||
return;
|
||||
nextState = State.Done;
|
||||
nextState = EnterState.Done;
|
||||
if (inner == this)
|
||||
inner = null;
|
||||
else if (inner != null)
|
||||
@@ -115,7 +115,7 @@ namespace OpenRA.Mods.Common.Activities
|
||||
public override bool Cancel(Actor self)
|
||||
{
|
||||
AbortOrExit(self);
|
||||
if (nextState < State.Exiting)
|
||||
if (nextState < EnterState.Exiting)
|
||||
return base.Cancel(self);
|
||||
else
|
||||
NextActivity = null;
|
||||
@@ -156,23 +156,23 @@ namespace OpenRA.Mods.Common.Activities
|
||||
}
|
||||
}
|
||||
|
||||
State FindAndTransitionToNextState(Actor self)
|
||||
EnterState FindAndTransitionToNextState(Actor self)
|
||||
{
|
||||
switch (nextState)
|
||||
{
|
||||
case State.ApproachingOrEntering:
|
||||
case EnterState.ApproachingOrEntering:
|
||||
|
||||
// Reserve to enter or approach
|
||||
isEnteringOrInside = false;
|
||||
switch (TryReserveElseTryAlternateReserve(self))
|
||||
{
|
||||
case ReserveStatus.None:
|
||||
return State.Done; // No available target -> abort to next activity
|
||||
return EnterState.Done; // No available target -> abort to next activity
|
||||
case ReserveStatus.TooFar:
|
||||
inner = move.MoveToTarget(self, targetCenter ? Target.FromPos(target.CenterPosition) : target); // Approach
|
||||
return State.ApproachingOrEntering;
|
||||
return EnterState.ApproachingOrEntering;
|
||||
case ReserveStatus.Pending:
|
||||
return State.ApproachingOrEntering; // Retry next tick
|
||||
return EnterState.ApproachingOrEntering; // Retry next tick
|
||||
case ReserveStatus.Ready:
|
||||
break; // Reserved target -> start entering target
|
||||
}
|
||||
@@ -185,38 +185,38 @@ namespace OpenRA.Mods.Common.Activities
|
||||
|
||||
if (inner != null)
|
||||
{
|
||||
nextState = State.Inside; // Should be inside once inner activity is null
|
||||
return State.ApproachingOrEntering;
|
||||
nextState = EnterState.Inside; // Should be inside once inner activity is null
|
||||
return EnterState.ApproachingOrEntering;
|
||||
}
|
||||
|
||||
// Can enter but there is no activity for it, so go inside without one
|
||||
goto case State.Inside;
|
||||
goto case EnterState.Inside;
|
||||
|
||||
case State.Inside:
|
||||
case EnterState.Inside:
|
||||
// Might as well teleport into target if there is no MoveIntoTarget activity
|
||||
if (nextState == State.ApproachingOrEntering)
|
||||
nextState = State.Inside;
|
||||
if (nextState == EnterState.ApproachingOrEntering)
|
||||
nextState = EnterState.Inside;
|
||||
|
||||
// Otherwise, try to recover from moving target
|
||||
else if (target.CenterPosition != self.CenterPosition)
|
||||
{
|
||||
nextState = State.ApproachingOrEntering;
|
||||
nextState = EnterState.ApproachingOrEntering;
|
||||
Unreserve(self, false);
|
||||
if (Reserve(self) == ReserveStatus.Ready)
|
||||
{
|
||||
inner = move.MoveIntoTarget(self, target); // Enter
|
||||
if (inner != null)
|
||||
return State.ApproachingOrEntering;
|
||||
return EnterState.ApproachingOrEntering;
|
||||
|
||||
nextState = State.ApproachingOrEntering;
|
||||
goto case State.ApproachingOrEntering;
|
||||
nextState = EnterState.ApproachingOrEntering;
|
||||
goto case EnterState.ApproachingOrEntering;
|
||||
}
|
||||
|
||||
nextState = State.ApproachingOrEntering;
|
||||
nextState = EnterState.ApproachingOrEntering;
|
||||
isEnteringOrInside = false;
|
||||
inner = move.MoveIntoWorld(self, self.World.Map.CellContaining(savedPos));
|
||||
|
||||
return State.ApproachingOrEntering;
|
||||
return EnterState.ApproachingOrEntering;
|
||||
}
|
||||
|
||||
OnInside(self);
|
||||
@@ -227,29 +227,29 @@ namespace OpenRA.Mods.Common.Activities
|
||||
self.Dispose();
|
||||
|
||||
// Return if Abort(Actor) or Done(self) was called from OnInside.
|
||||
if (nextState >= State.Exiting)
|
||||
return State.Inside;
|
||||
if (nextState >= EnterState.Exiting)
|
||||
return EnterState.Inside;
|
||||
|
||||
inner = this; // Start inside activity
|
||||
nextState = State.Exiting; // Exit once inner activity is null (unless Done(self) is called)
|
||||
return State.Inside;
|
||||
nextState = EnterState.Exiting; // Exit once inner activity is null (unless Done(self) is called)
|
||||
return EnterState.Inside;
|
||||
|
||||
// TODO: Handle target moved while inside or always call done for movable targets and use a separate exit activity
|
||||
case State.Exiting:
|
||||
case EnterState.Exiting:
|
||||
inner = move.MoveIntoWorld(self, self.World.Map.CellContaining(savedPos));
|
||||
|
||||
// If not successfully exiting, retry on next tick
|
||||
if (inner == null)
|
||||
return State.Exiting;
|
||||
return EnterState.Exiting;
|
||||
isEnteringOrInside = false;
|
||||
nextState = State.Done;
|
||||
return State.Exiting;
|
||||
nextState = EnterState.Done;
|
||||
return EnterState.Exiting;
|
||||
|
||||
case State.Done:
|
||||
return State.Done;
|
||||
case EnterState.Done:
|
||||
return EnterState.Done;
|
||||
}
|
||||
|
||||
return State.Done; // dummy to quiet dumb compiler
|
||||
return EnterState.Done; // dummy to quiet dumb compiler
|
||||
}
|
||||
|
||||
Activity CanceledTick(Actor self)
|
||||
@@ -267,18 +267,18 @@ namespace OpenRA.Mods.Common.Activities
|
||||
return CanceledTick(self);
|
||||
|
||||
// Check target validity if not exiting or done
|
||||
if (nextState != State.Done && (target.Type != TargetType.Actor || !target.IsValidFor(self)))
|
||||
if (nextState != EnterState.Done && (target.Type != TargetType.Actor || !target.IsValidFor(self)))
|
||||
AbortOrExit(self);
|
||||
|
||||
// If no current activity, tick next activity
|
||||
if (inner == null && FindAndTransitionToNextState(self) == State.Done)
|
||||
if (inner == null && FindAndTransitionToNextState(self) == EnterState.Done)
|
||||
return CanceledTick(self);
|
||||
|
||||
// Run inner activity/InsideTick
|
||||
inner = inner == this ? InsideTick(self) : ActivityUtils.RunActivity(self, inner);
|
||||
|
||||
// If we are finished, move on to next activity
|
||||
if (inner == null && nextState == State.Done)
|
||||
if (inner == null && nextState == EnterState.Done)
|
||||
return NextActivity;
|
||||
|
||||
return this;
|
||||
|
||||
Reference in New Issue
Block a user