From 30de4df749bf9df43ef5477ea1381024a4e0b0be Mon Sep 17 00:00:00 2001 From: tovl Date: Sat, 23 Mar 2019 19:20:34 +0100 Subject: [PATCH] Replace SequenceActivities with ChildActivity in several activities. --- OpenRA.Mods.Cnc/Traits/Attack/AttackTesla.cs | 21 +++++++++++++++++-- OpenRA.Mods.Common/Activities/Hunt.cs | 14 +++++++++---- OpenRA.Mods.Common/Activities/Move/Follow.cs | 12 ++++++++--- OpenRA.Mods.Common/Activities/UnloadCargo.cs | 11 ++++++++-- .../Traits/Attack/AttackFollow.cs | 12 ++++++++--- 5 files changed, 56 insertions(+), 14 deletions(-) diff --git a/OpenRA.Mods.Cnc/Traits/Attack/AttackTesla.cs b/OpenRA.Mods.Cnc/Traits/Attack/AttackTesla.cs index 34eda126ec..d269c79ab6 100644 --- a/OpenRA.Mods.Cnc/Traits/Attack/AttackTesla.cs +++ b/OpenRA.Mods.Cnc/Traits/Attack/AttackTesla.cs @@ -91,6 +91,13 @@ namespace OpenRA.Mods.Cnc.Traits public override Activity Tick(Actor self) { + if (ChildActivity != null) + { + ChildActivity = ActivityUtils.RunActivity(self, ChildActivity); + if (ChildActivity != null) + return this; + } + if (IsCanceling || !attack.CanAttack(self, target)) return NextActivity; @@ -103,7 +110,9 @@ namespace OpenRA.Mods.Cnc.Traits if (!string.IsNullOrEmpty(attack.info.ChargeAudio)) Game.Sound.Play(SoundType.World, attack.info.ChargeAudio, self.CenterPosition); - return ActivityUtils.SequenceActivities(self, new Wait(attack.info.InitialChargeDelay), new ChargeFire(attack, target), this); + QueueChild(self, new Wait(attack.info.InitialChargeDelay), true); + QueueChild(self, new ChargeFire(attack, target)); + return this; } } @@ -120,6 +129,13 @@ namespace OpenRA.Mods.Cnc.Traits public override Activity Tick(Actor self) { + if (ChildActivity != null) + { + ChildActivity = ActivityUtils.RunActivity(self, ChildActivity); + if (ChildActivity != null) + return this; + } + if (IsCanceling || !attack.CanAttack(self, target)) return NextActivity; @@ -128,7 +144,8 @@ namespace OpenRA.Mods.Cnc.Traits attack.DoAttack(self, target); - return ActivityUtils.SequenceActivities(self, new Wait(attack.info.ChargeDelay), this); + QueueChild(self, new Wait(attack.info.ChargeDelay), true); + return this; } } } diff --git a/OpenRA.Mods.Common/Activities/Hunt.cs b/OpenRA.Mods.Common/Activities/Hunt.cs index 0a0dafe4ee..df1e66ec86 100644 --- a/OpenRA.Mods.Common/Activities/Hunt.cs +++ b/OpenRA.Mods.Common/Activities/Hunt.cs @@ -33,6 +33,13 @@ namespace OpenRA.Mods.Common.Activities public override Activity Tick(Actor self) { + if (ChildActivity != null) + { + ChildActivity = ActivityUtils.RunActivity(self, ChildActivity); + if (ChildActivity != null) + return this; + } + if (IsCanceling) return NextActivity; @@ -40,10 +47,9 @@ namespace OpenRA.Mods.Common.Activities if (target == null) return this; - return ActivityUtils.SequenceActivities(self, - new AttackMoveActivity(self, () => move.MoveTo(target.Location, 2)), - new Wait(25), - this); + QueueChild(self, new AttackMoveActivity(self, () => move.MoveTo(target.Location, 2)), true); + QueueChild(self, new Wait(25)); + return this; } } } diff --git a/OpenRA.Mods.Common/Activities/Move/Follow.cs b/OpenRA.Mods.Common/Activities/Move/Follow.cs index 81bfee1422..37c440c61d 100644 --- a/OpenRA.Mods.Common/Activities/Move/Follow.cs +++ b/OpenRA.Mods.Common/Activities/Move/Follow.cs @@ -47,6 +47,13 @@ namespace OpenRA.Mods.Common.Activities public override Activity Tick(Actor self) { + if (ChildActivity != null) + { + ChildActivity = ActivityUtils.RunActivity(self, ChildActivity); + if (ChildActivity != null) + return this; + } + if (IsCanceling) return NextActivity; @@ -83,9 +90,8 @@ namespace OpenRA.Mods.Common.Activities // Move into range wasMovingWithinRange = true; - return ActivityUtils.SequenceActivities(self, - move.MoveWithinRange(target, minRange, maxRange, checkTarget.CenterPosition, targetLineColor), - this); + QueueChild(self, move.MoveWithinRange(target, minRange, maxRange, checkTarget.CenterPosition, targetLineColor), true); + return this; } } } diff --git a/OpenRA.Mods.Common/Activities/UnloadCargo.cs b/OpenRA.Mods.Common/Activities/UnloadCargo.cs index f3f6e929a0..f54401b8bc 100644 --- a/OpenRA.Mods.Common/Activities/UnloadCargo.cs +++ b/OpenRA.Mods.Common/Activities/UnloadCargo.cs @@ -55,6 +55,13 @@ namespace OpenRA.Mods.Common.Activities public override Activity Tick(Actor self) { + if (ChildActivity != null) + { + ChildActivity = ActivityUtils.RunActivity(self, ChildActivity); + if (ChildActivity != null) + return this; + } + cargo.Unloading = false; if (IsCanceling || cargo.IsEmpty(self)) return NextActivity; @@ -75,8 +82,8 @@ namespace OpenRA.Mods.Common.Activities if (exitSubCell == null) { self.NotifyBlocker(BlockedExitCells(actor)); - - return ActivityUtils.SequenceActivities(self, new Wait(10), this); + QueueChild(self, new Wait(10), true); + return this; } cargo.Unload(self); diff --git a/OpenRA.Mods.Common/Traits/Attack/AttackFollow.cs b/OpenRA.Mods.Common/Traits/Attack/AttackFollow.cs index 02e188c5ec..9e9c5d4f71 100644 --- a/OpenRA.Mods.Common/Traits/Attack/AttackFollow.cs +++ b/OpenRA.Mods.Common/Traits/Attack/AttackFollow.cs @@ -176,6 +176,13 @@ namespace OpenRA.Mods.Common.Traits public override Activity Tick(Actor self) { + if (ChildActivity != null) + { + ChildActivity = ActivityUtils.RunActivity(self, ChildActivity); + if (ChildActivity != null) + return this; + } + if (IsCanceling) { // Cancel the requested target, but keep firing on it while in range @@ -275,9 +282,8 @@ namespace OpenRA.Mods.Common.Traits } wasMovingWithinRange = true; - return ActivityUtils.SequenceActivities(self, - move.MoveWithinRange(target, minRange, maxRange, checkTarget.CenterPosition, Color.Red), - this); + QueueChild(self, move.MoveWithinRange(target, minRange, maxRange, checkTarget.CenterPosition, Color.Red), true); + return this; } } }