refactor activity queueing

This commit is contained in:
Bob
2010-09-22 10:13:13 +12:00
parent 271a3eea8d
commit ef665df2e9
37 changed files with 229 additions and 236 deletions

View File

@@ -17,7 +17,7 @@ namespace OpenRA.Traits.Activities
{
public class Move : IActivity
{
public IActivity NextActivity { get; set; }
IActivity NextActivity { get; set; }
int2? destination;
int nearEnough;
@@ -164,9 +164,7 @@ namespace OpenRA.Traits.Activities
Log.Write("debug", "Turn: #{0} from {1} to {2}",
self.ActorID, mobile.Facing, firstFacing);
return new Turn( firstFacing )
{ NextActivity = this }
.Tick( self );
return Util.SequenceActivities( new Turn( firstFacing ), this ).Tick( self );
}
else
{
@@ -261,6 +259,14 @@ namespace OpenRA.Traits.Activities
NextActivity = null;
}
public void Queue( IActivity activity )
{
if( NextActivity != null )
NextActivity.Queue( activity );
else
NextActivity = activity;
}
abstract class MovePart : IActivity
{
public readonly Move move;
@@ -280,11 +286,14 @@ namespace OpenRA.Traits.Activities
this.moveFractionTotal = (int)(( to - from ).Length*3);
}
public IActivity NextActivity { get { return move; } set { move.NextActivity = value; } }
public void Cancel( Actor self )
{
NextActivity.Cancel( self );
move.Cancel( self );
}
public void Queue( IActivity activity )
{
move.Queue( activity );
}
public IActivity Tick( Actor self )