From 2fccfdf1ee5ecbb44124da12256f2b630012a894 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sun, 14 Jan 2018 22:48:52 +0000 Subject: [PATCH] Add support for disabling IIssueDeployOrders. --- OpenRA.Mods.Cnc/Traits/MadTank.cs | 2 ++ OpenRA.Mods.Cnc/Traits/Minelayer.cs | 2 ++ OpenRA.Mods.Common/Traits/Air/Aircraft.cs | 2 ++ OpenRA.Mods.Common/Traits/Attack/AttackSuicides.cs | 2 ++ OpenRA.Mods.Common/Traits/Cargo.cs | 2 ++ .../Traits/Conditions/GrantConditionOnDeploy.cs | 2 ++ OpenRA.Mods.Common/Traits/Transforms.cs | 2 ++ OpenRA.Mods.Common/TraitsInterfaces.cs | 1 + OpenRA.Mods.Common/Widgets/Logic/Ingame/CommandBarLogic.cs | 4 ++-- 9 files changed, 17 insertions(+), 2 deletions(-) diff --git a/OpenRA.Mods.Cnc/Traits/MadTank.cs b/OpenRA.Mods.Cnc/Traits/MadTank.cs index 14bfeab5bb..ebcaa38e66 100644 --- a/OpenRA.Mods.Cnc/Traits/MadTank.cs +++ b/OpenRA.Mods.Cnc/Traits/MadTank.cs @@ -129,6 +129,8 @@ namespace OpenRA.Mods.Cnc.Traits return new Order("Detonate", self, false); } + bool IIssueDeployOrder.CanIssueDeployOrder(Actor self) { return true; } + string IOrderVoice.VoicePhraseForOrder(Actor self, Order order) { return info.Voice; diff --git a/OpenRA.Mods.Cnc/Traits/Minelayer.cs b/OpenRA.Mods.Cnc/Traits/Minelayer.cs index 5171af209e..3bc1ef3dae 100644 --- a/OpenRA.Mods.Cnc/Traits/Minelayer.cs +++ b/OpenRA.Mods.Cnc/Traits/Minelayer.cs @@ -86,6 +86,8 @@ namespace OpenRA.Mods.Cnc.Traits return new Order("PlaceMine", self, Target.FromCell(self.World, self.Location), false); } + bool IIssueDeployOrder.CanIssueDeployOrder(Actor self) { return true; } + void IResolveOrder.ResolveOrder(Actor self, Order order) { if (order.OrderString == "BeginMinefield") diff --git a/OpenRA.Mods.Common/Traits/Air/Aircraft.cs b/OpenRA.Mods.Common/Traits/Air/Aircraft.cs index 6713b968fd..19690d4cc8 100644 --- a/OpenRA.Mods.Common/Traits/Air/Aircraft.cs +++ b/OpenRA.Mods.Common/Traits/Air/Aircraft.cs @@ -669,6 +669,8 @@ namespace OpenRA.Mods.Common.Traits return new Order("ReturnToBase", self, false); } + bool IIssueDeployOrder.CanIssueDeployOrder(Actor self) { return Info.RearmBuildings.Any(); } + public string VoicePhraseForOrder(Actor self, Order order) { if (!Info.MoveIntoShroud && !self.Owner.Shroud.IsExplored(order.TargetLocation)) diff --git a/OpenRA.Mods.Common/Traits/Attack/AttackSuicides.cs b/OpenRA.Mods.Common/Traits/Attack/AttackSuicides.cs index 229376d984..a4aee3086f 100644 --- a/OpenRA.Mods.Common/Traits/Attack/AttackSuicides.cs +++ b/OpenRA.Mods.Common/Traits/Attack/AttackSuicides.cs @@ -58,6 +58,8 @@ namespace OpenRA.Mods.Common.Traits return new Order("Detonate", self, false); } + bool IIssueDeployOrder.CanIssueDeployOrder(Actor self) { return true; } + public string VoicePhraseForOrder(Actor self, Order order) { return info.Voice; diff --git a/OpenRA.Mods.Common/Traits/Cargo.cs b/OpenRA.Mods.Common/Traits/Cargo.cs index 26dc7d99d4..908baf3a0b 100644 --- a/OpenRA.Mods.Common/Traits/Cargo.cs +++ b/OpenRA.Mods.Common/Traits/Cargo.cs @@ -178,6 +178,8 @@ namespace OpenRA.Mods.Common.Traits return new Order("Unload", self, false); } + bool IIssueDeployOrder.CanIssueDeployOrder(Actor self) { return true; } + public void ResolveOrder(Actor self, Order order) { if (order.OrderString == "Unload") diff --git a/OpenRA.Mods.Common/Traits/Conditions/GrantConditionOnDeploy.cs b/OpenRA.Mods.Common/Traits/Conditions/GrantConditionOnDeploy.cs index a1014072a4..2966ced9a0 100644 --- a/OpenRA.Mods.Common/Traits/Conditions/GrantConditionOnDeploy.cs +++ b/OpenRA.Mods.Common/Traits/Conditions/GrantConditionOnDeploy.cs @@ -138,6 +138,8 @@ namespace OpenRA.Mods.Common.Traits return new Order("GrantConditionOnDeploy", self, false); } + bool IIssueDeployOrder.CanIssueDeployOrder(Actor self) { return true; } + public void ResolveOrder(Actor self, Order order) { if (order.OrderString != "GrantConditionOnDeploy" || deployState == DeployState.Deploying || deployState == DeployState.Undeploying) diff --git a/OpenRA.Mods.Common/Traits/Transforms.cs b/OpenRA.Mods.Common/Traits/Transforms.cs index 8058c6ade3..827bbc1216 100644 --- a/OpenRA.Mods.Common/Traits/Transforms.cs +++ b/OpenRA.Mods.Common/Traits/Transforms.cs @@ -105,6 +105,8 @@ namespace OpenRA.Mods.Common.Traits return new Order("DeployTransform", self, false); } + bool IIssueDeployOrder.CanIssueDeployOrder(Actor self) { return !IsTraitPaused && !IsTraitDisabled; } + public void DeployTransform(bool queued) { if (!queued && !CanDeploy()) diff --git a/OpenRA.Mods.Common/TraitsInterfaces.cs b/OpenRA.Mods.Common/TraitsInterfaces.cs index a93424a44b..e3fb2ba686 100644 --- a/OpenRA.Mods.Common/TraitsInterfaces.cs +++ b/OpenRA.Mods.Common/TraitsInterfaces.cs @@ -323,6 +323,7 @@ namespace OpenRA.Mods.Common.Traits public interface IIssueDeployOrder { Order IssueDeployOrder(Actor self); + bool CanIssueDeployOrder(Actor self); } 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 96439b2ab8..468c2a0f9a 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/Ingame/CommandBarLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/Ingame/CommandBarLogic.cs @@ -155,7 +155,7 @@ namespace OpenRA.Mods.Common.Widgets { BindButtonIcon(deployButton); - deployButton.IsDisabled = () => { UpdateStateIfNecessary(); return !selectedDeploys.Any(pair => pair.Trait.IsTraitEnabled()); }; + deployButton.IsDisabled = () => { UpdateStateIfNecessary(); return !selectedDeploys.Any(pair => pair.Trait.CanIssueDeployOrder(pair.Actor)); }; deployButton.IsHighlighted = () => deployHighlighted > 0; deployButton.OnClick = () => { @@ -307,7 +307,7 @@ namespace OpenRA.Mods.Common.Widgets UpdateStateIfNecessary(); var orders = selectedDeploys - .Where(pair => pair.Trait.IsTraitEnabled()) + .Where(pair => pair.Trait.CanIssueDeployOrder(pair.Actor)) .Select(d => d.Trait.IssueDeployOrder(d.Actor)) .Where(d => d != null) .ToArray();