Pause and Cancel orders for production.

This commit is contained in:
Bob
2009-11-02 00:15:04 +13:00
parent b4510876d3
commit 7e1417254c
3 changed files with 27 additions and 6 deletions

View File

@@ -118,5 +118,15 @@ namespace OpenRa.Game
{
return new Order(subject, "StartProduction", null, null, int2.Zero, item, Cursor.Default );
}
public static Order PauseProduction(Player subject, string item, bool pause)
{
return new Order( subject, "PauseProduction", null, null, new int2(pause ?1:0,0), item, Cursor.Default );
}
public static Order CancelProduction(Player subject, string item)
{
return new Order( subject, "CancelProduction", null, null, int2.Zero, item, Cursor.Default );
}
}
}

View File

@@ -217,9 +217,6 @@ namespace OpenRa.Game
if( mi.Button == MouseButtons.Left && mi.Event == MouseInputEvent.Down )
{
/* todo: move all this shit elsewhere! we can't have it in the UI if it's going to be
* correct in netplay!! */
if (producing == null)
{
Game.controller.AddOrder( Order.StartProduction( player, item.Tag ) );
@@ -230,7 +227,7 @@ namespace OpenRa.Game
if (producing.Done)
Build(item);
else
producing.Paused = false;
Game.controller.AddOrder( Order.PauseProduction( player, item.Tag, false ) );
}
else
{
@@ -244,12 +241,12 @@ namespace OpenRa.Game
if (producing.Paused || producing.Done)
{
Game.PlaySound("cancld1.aud", false);
player.CancelProduction(Rules.UnitCategory[item.Tag]);
Game.controller.AddOrder( Order.CancelProduction( player, item.Tag ) );
}
else
{
Game.PlaySound("onhold1.aud", false);
producing.Paused = true;
Game.controller.AddOrder( Order.PauseProduction( player, item.Tag, true ) );
}
}
}

View File

@@ -97,6 +97,20 @@ namespace OpenRa.Game
order.Player.BeginProduction( group, new ProductionItem( order.TargetString, (int)time, ui.Cost, complete ) );
break;
}
case "PauseProduction":
{
var producing = order.Player.Producing( Rules.UnitCategory[ order.TargetString ] );
if( producing != null && producing.Item == order.TargetString )
producing.Paused = ( order.TargetLocation.X != 0 );
break;
}
case "CancelProduction":
{
var producing = order.Player.Producing( Rules.UnitCategory[ order.TargetString ] );
if( producing != null && producing.Item == order.TargetString )
order.Player.CancelProduction( Rules.UnitCategory[ order.TargetString ] );
break;
}
default:
throw new NotImplementedException();
}