From a8b7fcaf87f1d2aa7347c1acaa7bf05acd7fdfab Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Mon, 10 Jun 2019 10:14:34 +0100 Subject: [PATCH] Fix undeploy orders always being queued. --- OpenRA.Mods.Common/Activities/Transform.cs | 3 +++ OpenRA.Mods.Common/Traits/Buildings/TransformsIntoAircraft.cs | 4 ++++ .../Traits/Buildings/TransformsIntoEntersTunnels.cs | 4 ++++ OpenRA.Mods.Common/Traits/Buildings/TransformsIntoMobile.cs | 4 ++++ .../Traits/Buildings/TransformsIntoPassenger.cs | 4 ++++ .../Traits/Buildings/TransformsIntoRepairable.cs | 4 ++++ 6 files changed, 23 insertions(+) diff --git a/OpenRA.Mods.Common/Activities/Transform.cs b/OpenRA.Mods.Common/Activities/Transform.cs index eb0096afc4..f26e30b3bf 100644 --- a/OpenRA.Mods.Common/Activities/Transform.cs +++ b/OpenRA.Mods.Common/Activities/Transform.cs @@ -140,6 +140,9 @@ namespace OpenRA.Mods.Common.Activities // Use self.CurrentActivity to capture the parent activity if Transform is a child foreach (var transfer in currentActivity.ActivitiesImplementing(false)) { + if (transfer.IsCanceling) + continue; + var order = transfer.IssueOrderForTransformedActor(a); foreach (var t in a.TraitsImplementing()) t.ResolveOrder(a, order); diff --git a/OpenRA.Mods.Common/Traits/Buildings/TransformsIntoAircraft.cs b/OpenRA.Mods.Common/Traits/Buildings/TransformsIntoAircraft.cs index d1a247662d..042196c94c 100644 --- a/OpenRA.Mods.Common/Traits/Buildings/TransformsIntoAircraft.cs +++ b/OpenRA.Mods.Common/Traits/Buildings/TransformsIntoAircraft.cs @@ -125,7 +125,11 @@ namespace OpenRA.Mods.Common.Traits if (transform == null && currentTransform == null) return; + // Manually manage the inner activity queue var activity = currentTransform ?? transform.GetTransformActivity(self); + if (!order.Queued && activity.NextActivity != null) + activity.NextActivity.Cancel(self); + activity.Queue(self, new IssueOrderAfterTransform(order.OrderString, order.Target)); if (currentTransform == null) diff --git a/OpenRA.Mods.Common/Traits/Buildings/TransformsIntoEntersTunnels.cs b/OpenRA.Mods.Common/Traits/Buildings/TransformsIntoEntersTunnels.cs index b1155b05ba..cb58aa5742 100644 --- a/OpenRA.Mods.Common/Traits/Buildings/TransformsIntoEntersTunnels.cs +++ b/OpenRA.Mods.Common/Traits/Buildings/TransformsIntoEntersTunnels.cs @@ -81,7 +81,11 @@ namespace OpenRA.Mods.Common.Traits self.SetTargetLine(order.Target, Color.Green); + // Manually manage the inner activity queue var activity = currentTransform ?? transform.GetTransformActivity(self); + if (!order.Queued && activity.NextActivity != null) + activity.NextActivity.Cancel(self); + activity.Queue(self, new IssueOrderAfterTransform(order.OrderString, order.Target)); if (currentTransform == null) diff --git a/OpenRA.Mods.Common/Traits/Buildings/TransformsIntoMobile.cs b/OpenRA.Mods.Common/Traits/Buildings/TransformsIntoMobile.cs index 3dbaaa6db7..e97c7d06b9 100644 --- a/OpenRA.Mods.Common/Traits/Buildings/TransformsIntoMobile.cs +++ b/OpenRA.Mods.Common/Traits/Buildings/TransformsIntoMobile.cs @@ -106,7 +106,11 @@ namespace OpenRA.Mods.Common.Traits self.SetTargetLine(Target.FromCell(self.World, cell), Color.Green); + // Manually manage the inner activity queue var activity = currentTransform ?? transform.GetTransformActivity(self); + if (!order.Queued && activity.NextActivity != null) + activity.NextActivity.Cancel(self); + activity.Queue(self, new IssueOrderAfterTransform("Move", order.Target)); if (currentTransform == null) diff --git a/OpenRA.Mods.Common/Traits/Buildings/TransformsIntoPassenger.cs b/OpenRA.Mods.Common/Traits/Buildings/TransformsIntoPassenger.cs index 593c575ce3..0890c38695 100644 --- a/OpenRA.Mods.Common/Traits/Buildings/TransformsIntoPassenger.cs +++ b/OpenRA.Mods.Common/Traits/Buildings/TransformsIntoPassenger.cs @@ -115,7 +115,11 @@ namespace OpenRA.Mods.Common.Traits self.SetTargetLine(order.Target, Color.Green); + // Manually manage the inner activity queue var activity = currentTransform ?? transform.GetTransformActivity(self); + if (!order.Queued && activity.NextActivity != null) + activity.NextActivity.Cancel(self); + activity.Queue(self, new IssueOrderAfterTransform(order.OrderString, order.Target)); if (currentTransform == null) diff --git a/OpenRA.Mods.Common/Traits/Buildings/TransformsIntoRepairable.cs b/OpenRA.Mods.Common/Traits/Buildings/TransformsIntoRepairable.cs index 43f8cb01a7..ac1eeda8bd 100644 --- a/OpenRA.Mods.Common/Traits/Buildings/TransformsIntoRepairable.cs +++ b/OpenRA.Mods.Common/Traits/Buildings/TransformsIntoRepairable.cs @@ -106,7 +106,11 @@ namespace OpenRA.Mods.Common.Traits self.SetTargetLine(order.Target, Color.Green); + // Manually manage the inner activity queue var activity = currentTransform ?? transform.GetTransformActivity(self); + if (!order.Queued && activity.NextActivity != null) + activity.NextActivity.Cancel(self); + activity.Queue(self, new IssueOrderAfterTransform(order.OrderString, order.Target)); if (currentTransform == null)