diff --git a/OpenRa.Game/Controller.cs b/OpenRa.Game/Controller.cs index 5acfca610d..4dbb45d19e 100644 --- a/OpenRa.Game/Controller.cs +++ b/OpenRa.Game/Controller.cs @@ -27,7 +27,11 @@ namespace OpenRa.Game if (mi.Button == MouseButtons.Left && mi.Event == MouseInputEvent.Down) { if (!(orderGenerator is PlaceBuilding)) - dragStart = dragEnd = xy; + dragStart = dragEnd = xy; + + if (orderGenerator != null) + foreach (var order in orderGenerator.Order(game, xy.ToInt2())) + order.Apply(game, true); } if (mi.Button == MouseButtons.Left && mi.Event == MouseInputEvent.Move) @@ -55,7 +59,7 @@ namespace OpenRa.Game if( mi.Button == MouseButtons.Right && mi.Event == MouseInputEvent.Down ) if( orderGenerator != null ) foreach( var order in orderGenerator.Order( game, xy.ToInt2() ) ) - order.Apply( game ); + order.Apply( game, false ); } public Pair? SelectionBox diff --git a/OpenRa.Game/MoveOrder.cs b/OpenRa.Game/MoveOrder.cs index 83ea7d2b5d..5b3725e6ae 100644 --- a/OpenRa.Game/MoveOrder.cs +++ b/OpenRa.Game/MoveOrder.cs @@ -6,7 +6,7 @@ namespace OpenRa.Game { abstract class Order { - public abstract void Apply( Game game ); + public abstract void Apply( Game game, bool leftMButton ); } class MoveOrder : Order @@ -20,8 +20,9 @@ namespace OpenRa.Game this.Destination = destination; } - public override void Apply( Game game ) - { + public override void Apply( Game game, bool leftMouseButton ) + { + if (leftMouseButton) return; Unit.traits.Get().destination = Destination; } } @@ -37,8 +38,9 @@ namespace OpenRa.Game Location = location; } - public override void Apply( Game game ) - { + public override void Apply( Game game, bool leftMouseButton ) + { + if (leftMouseButton) return; Unit.traits.Get().DeployLocation = Location; var mobile = Unit.traits.Get(); mobile.destination = mobile.toCell; diff --git a/OpenRa.Game/Sidebar.cs b/OpenRa.Game/Sidebar.cs index 04b163c342..e58d11485c 100644 --- a/OpenRa.Game/Sidebar.cs +++ b/OpenRa.Game/Sidebar.cs @@ -207,16 +207,27 @@ namespace OpenRa.Game this.xy = xy; } - public override void Apply(Game game) + public override void Apply(Game game, bool leftMouseButton) { - game.world.AddFrameEndTask(_ => + if (leftMouseButton) { - Log.Write( "Player \"{0}\" builds {1}", building.Owner.PlayerName, building.Name ); - game.world.Add( new Actor( building.Name, xy, building.Owner ) ); - - game.controller.orderGenerator = null; - game.worldRenderer.uiOverlay.KillOverlay(); - }); + game.world.AddFrameEndTask(_ => + { + Log.Write("Player \"{0}\" builds {1}", building.Owner.PlayerName, building.Name); + game.world.Add(new Actor(building.Name, xy, building.Owner)); + + game.controller.orderGenerator = null; + game.worldRenderer.uiOverlay.KillOverlay(); + }); + } + else + { + game.world.AddFrameEndTask(_ => + { + game.controller.orderGenerator = null; + game.worldRenderer.uiOverlay.KillOverlay(); + }); + } } } }