diff --git a/OpenRA.Mods.Cnc/Traits/MadTank.cs b/OpenRA.Mods.Cnc/Traits/MadTank.cs index 558c3addbb..36c8b78f28 100644 --- a/OpenRA.Mods.Cnc/Traits/MadTank.cs +++ b/OpenRA.Mods.Cnc/Traits/MadTank.cs @@ -121,7 +121,7 @@ namespace OpenRA.Mods.Cnc.Traits return new Order("Detonate", self, queued); } - bool IIssueDeployOrder.CanIssueDeployOrder(Actor self) { return true; } + bool IIssueDeployOrder.CanIssueDeployOrder(Actor self, bool queued) { return true; } string IOrderVoice.VoicePhraseForOrder(Actor self, Order order) { diff --git a/OpenRA.Mods.Cnc/Traits/Minelayer.cs b/OpenRA.Mods.Cnc/Traits/Minelayer.cs index 6a5f84dfc9..ffd711cc08 100644 --- a/OpenRA.Mods.Cnc/Traits/Minelayer.cs +++ b/OpenRA.Mods.Cnc/Traits/Minelayer.cs @@ -98,7 +98,7 @@ namespace OpenRA.Mods.Cnc.Traits return new Order("PlaceMine", self, Target.FromCell(self.World, self.Location), queued); } - bool IIssueDeployOrder.CanIssueDeployOrder(Actor self) { return true; } + bool IIssueDeployOrder.CanIssueDeployOrder(Actor self, bool queued) { return true; } void IResolveOrder.ResolveOrder(Actor self, Order order) { diff --git a/OpenRA.Mods.Common/Traits/Air/Aircraft.cs b/OpenRA.Mods.Common/Traits/Air/Aircraft.cs index df3300601d..af9c99bab5 100644 --- a/OpenRA.Mods.Common/Traits/Air/Aircraft.cs +++ b/OpenRA.Mods.Common/Traits/Air/Aircraft.cs @@ -968,7 +968,7 @@ namespace OpenRA.Mods.Common.Traits return new Order("ReturnToBase", self, queued); } - bool IIssueDeployOrder.CanIssueDeployOrder(Actor self) { return rearmable != null && rearmable.Info.RearmActors.Any(); } + bool IIssueDeployOrder.CanIssueDeployOrder(Actor self, bool queued) { return rearmable != null && rearmable.Info.RearmActors.Any(); } public string VoicePhraseForOrder(Actor self, Order order) { diff --git a/OpenRA.Mods.Common/Traits/Cargo.cs b/OpenRA.Mods.Common/Traits/Cargo.cs index 9d5c3472ad..d44d4334d8 100644 --- a/OpenRA.Mods.Common/Traits/Cargo.cs +++ b/OpenRA.Mods.Common/Traits/Cargo.cs @@ -226,7 +226,7 @@ namespace OpenRA.Mods.Common.Traits return new Order("Unload", self, queued); } - bool IIssueDeployOrder.CanIssueDeployOrder(Actor self) { return true; } + bool IIssueDeployOrder.CanIssueDeployOrder(Actor self, bool queued) { return true; } public void ResolveOrder(Actor self, Order order) { diff --git a/OpenRA.Mods.Common/Traits/Carryall.cs b/OpenRA.Mods.Common/Traits/Carryall.cs index 561bcc60fd..b41e7a3d01 100644 --- a/OpenRA.Mods.Common/Traits/Carryall.cs +++ b/OpenRA.Mods.Common/Traits/Carryall.cs @@ -286,7 +286,7 @@ namespace OpenRA.Mods.Common.Traits return new Order("Unload", self, queued); } - bool IIssueDeployOrder.CanIssueDeployOrder(Actor self) { return true; } + bool IIssueDeployOrder.CanIssueDeployOrder(Actor self, bool queued) { return true; } void IResolveOrder.ResolveOrder(Actor self, Order order) { diff --git a/OpenRA.Mods.Common/Traits/Conditions/GrantConditionOnDeploy.cs b/OpenRA.Mods.Common/Traits/Conditions/GrantConditionOnDeploy.cs index 19441d26bb..a8b1bc8f83 100644 --- a/OpenRA.Mods.Common/Traits/Conditions/GrantConditionOnDeploy.cs +++ b/OpenRA.Mods.Common/Traits/Conditions/GrantConditionOnDeploy.cs @@ -194,7 +194,7 @@ namespace OpenRA.Mods.Common.Traits return new Order("GrantConditionOnDeploy", self, queued); } - bool IIssueDeployOrder.CanIssueDeployOrder(Actor self) { return !IsTraitPaused && !IsTraitDisabled; } + bool IIssueDeployOrder.CanIssueDeployOrder(Actor self, bool queued) { return !IsTraitPaused && !IsTraitDisabled; } public void ResolveOrder(Actor self, Order order) { diff --git a/OpenRA.Mods.Common/Traits/Transforms.cs b/OpenRA.Mods.Common/Traits/Transforms.cs index 50445346fb..7b714a2269 100644 --- a/OpenRA.Mods.Common/Traits/Transforms.cs +++ b/OpenRA.Mods.Common/Traits/Transforms.cs @@ -121,7 +121,7 @@ namespace OpenRA.Mods.Common.Traits return new Order("DeployTransform", self, queued); } - bool IIssueDeployOrder.CanIssueDeployOrder(Actor self) { return !IsTraitPaused && !IsTraitDisabled; } + bool IIssueDeployOrder.CanIssueDeployOrder(Actor self, bool queued) { return !IsTraitPaused && !IsTraitDisabled; } public void DeployTransform(bool queued) { diff --git a/OpenRA.Mods.Common/TraitsInterfaces.cs b/OpenRA.Mods.Common/TraitsInterfaces.cs index 21f0c6560b..32049da45c 100644 --- a/OpenRA.Mods.Common/TraitsInterfaces.cs +++ b/OpenRA.Mods.Common/TraitsInterfaces.cs @@ -412,7 +412,7 @@ namespace OpenRA.Mods.Common.Traits public interface IIssueDeployOrder { Order IssueDeployOrder(Actor self, bool queued); - bool CanIssueDeployOrder(Actor self); + bool CanIssueDeployOrder(Actor self, bool queued); } public enum ActorPreviewType { PlaceBuilding, ColorPicker, MapEditorSidebar } diff --git a/OpenRA.Mods.Common/Widgets/Logic/Ingame/CommandBarLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Ingame/CommandBarLogic.cs index 1cb5137998..b6b76767e4 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/Ingame/CommandBarLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/Ingame/CommandBarLogic.cs @@ -155,7 +155,14 @@ namespace OpenRA.Mods.Common.Widgets { BindButtonIcon(deployButton); - deployButton.IsDisabled = () => { UpdateStateIfNecessary(); return !selectedDeploys.Any(pair => pair.Trait.CanIssueDeployOrder(pair.Actor)); }; + deployButton.IsDisabled = () => + { + UpdateStateIfNecessary(); + + var queued = Game.GetModifierKeys().HasModifier(Modifiers.Shift); + return !selectedDeploys.Any(pair => pair.Trait.CanIssueDeployOrder(pair.Actor, queued)); + }; + deployButton.IsHighlighted = () => deployHighlighted > 0; deployButton.OnClick = () => { @@ -338,7 +345,7 @@ namespace OpenRA.Mods.Common.Widgets UpdateStateIfNecessary(); var orders = selectedDeploys - .Where(pair => pair.Trait.CanIssueDeployOrder(pair.Actor)) + .Where(pair => pair.Trait.CanIssueDeployOrder(pair.Actor, queued)) .Select(d => d.Trait.IssueDeployOrder(d.Actor, queued)) .Where(d => d != null) .ToArray();