IOrderGenerator can produce multiple orders (or none)

This commit is contained in:
Bob
2009-10-09 23:02:54 +13:00
parent f8309b79f4
commit a08bcd9a17
4 changed files with 12 additions and 14 deletions

View File

@@ -59,10 +59,8 @@ namespace OpenRa.Game
if( mi.Button == MouseButtons.Right && mi.Event == MouseInputEvent.Down )
if( orderGenerator != null )
{
var order = orderGenerator.Order(game, new int2((int)xy.X, (int)xy.Y));
if (order != null) order.Apply(game);
}
foreach( var order in orderGenerator.Order( game, new int2( (int)xy.X, (int)xy.Y ) ) )
order.Apply( game );
}
public Unit FindUnit(float2 a, float2 b)

View File

@@ -6,7 +6,7 @@ namespace OpenRa.Game
{
interface IOrderGenerator
{
Order Order( Game game, int2 xy );
IEnumerable<Order> Order( Game game, int2 xy );
void PrepareOverlay( Game game, int2 xy );
}
}

View File

@@ -184,10 +184,10 @@ namespace OpenRa.Game
Name = name;
}
public Order Order( Game game, int2 xy )
public IEnumerable<Order> Order( Game game, int2 xy )
{
// todo: check that space is free
return new PlaceBuildingOrder( this, xy );
yield return new PlaceBuildingOrder( this, xy );
}
public void PrepareOverlay(Game game, int2 xy)

View File

@@ -97,17 +97,17 @@ namespace OpenRa.Game
return false;
}
public Order Order( Game game, int2 xy )
public IEnumerable<Order> Order( Game game, int2 xy )
{
if( ( fromCell == toCell || moveFraction == 0 ) && fromCell == xy )
{
if( SupportsMission( SupportedMissions.Deploy ) )
return new DeployMcvOrder( this );
yield return new DeployMcvOrder( this );
if( SupportsMission( SupportedMissions.Harvest ) )
return new HarvestOrder( this );
yield return new HarvestOrder( this );
}
return new MoveOrder( this, xy );
else
yield return new MoveOrder( this, xy );
}
public void PrepareOverlay(Game game, int2 xy) { }