diff --git a/OpenRa.Game/Order.cs b/OpenRa.Game/Order.cs index efc960df1c..0fe7ec6899 100644 --- a/OpenRa.Game/Order.cs +++ b/OpenRa.Game/Order.cs @@ -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 ); + } } } diff --git a/OpenRa.Game/Sidebar.cs b/OpenRa.Game/Sidebar.cs index 2fafac9253..4f129bc780 100644 --- a/OpenRa.Game/Sidebar.cs +++ b/OpenRa.Game/Sidebar.cs @@ -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 ) ); } } } diff --git a/OpenRa.Game/UnitOrders.cs b/OpenRa.Game/UnitOrders.cs index 44a0b4d7eb..41f0070599 100755 --- a/OpenRa.Game/UnitOrders.cs +++ b/OpenRa.Game/UnitOrders.cs @@ -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(); }