IOrderGenerator can produce multiple orders (or none)
This commit is contained in:
@@ -57,12 +57,10 @@ namespace OpenRa.Game
|
||||
* needs to also happen when the *thing* changes, so per-frame hook */
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
if( mi.Button == MouseButtons.Right && mi.Event == MouseInputEvent.Down )
|
||||
if( orderGenerator != null )
|
||||
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)
|
||||
|
||||
@@ -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 );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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) { }
|
||||
|
||||
Reference in New Issue
Block a user