From 34b10dcb77f636f7cfdb1932998290ce25eed5af Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Mon, 26 Sep 2016 17:48:25 +0100 Subject: [PATCH] Hack around the Lua API. --- OpenRA.Mods.Common/Activities/Air/FlyAttack.cs | 2 +- OpenRA.Mods.Common/Activities/Air/HeliAttack.cs | 2 +- OpenRA.Mods.Common/Activities/Air/HeliReturnToBase.cs | 6 ++++-- OpenRA.Mods.Common/Activities/Air/ReturnToBase.cs | 6 ++++-- .../Scripting/Properties/AircraftProperties.cs | 4 ++-- OpenRA.Mods.Common/Traits/Air/Aircraft.cs | 10 +++++----- OpenRA.Mods.Common/Traits/Air/ReturnOnIdle.cs | 2 +- 7 files changed, 18 insertions(+), 14 deletions(-) diff --git a/OpenRA.Mods.Common/Activities/Air/FlyAttack.cs b/OpenRA.Mods.Common/Activities/Air/FlyAttack.cs index bfa00d0493..a1b31b1b92 100644 --- a/OpenRA.Mods.Common/Activities/Air/FlyAttack.cs +++ b/OpenRA.Mods.Common/Activities/Air/FlyAttack.cs @@ -42,7 +42,7 @@ namespace OpenRA.Mods.Common.Activities // TODO: This should check whether there is ammo left that is actually suitable for the target if (ammoPools.All(x => !x.Info.SelfReloads && !x.HasAmmo())) - return ActivityUtils.SequenceActivities(new ReturnToBase(self), this); + return ActivityUtils.SequenceActivities(new ReturnToBase(self, aircraft.Info.AbortOnResupply), this); if (attackPlane != null) attackPlane.DoAttack(self, target); diff --git a/OpenRA.Mods.Common/Activities/Air/HeliAttack.cs b/OpenRA.Mods.Common/Activities/Air/HeliAttack.cs index 8a429e6f01..339591b33e 100644 --- a/OpenRA.Mods.Common/Activities/Air/HeliAttack.cs +++ b/OpenRA.Mods.Common/Activities/Air/HeliAttack.cs @@ -67,7 +67,7 @@ namespace OpenRA.Mods.Common.Activities // If any AmmoPool is depleted and no weapon is valid against target, return to helipad to reload and then resume the activity if (ammoPools.Any(x => !x.Info.SelfReloads && !x.HasAmmo()) && !attackHeli.HasAnyValidWeapons(target)) - return ActivityUtils.SequenceActivities(new HeliReturnToBase(self), this); + return ActivityUtils.SequenceActivities(new HeliReturnToBase(self, helicopter.Info.AbortOnResupply), this); var dist = target.CenterPosition - self.CenterPosition; diff --git a/OpenRA.Mods.Common/Activities/Air/HeliReturnToBase.cs b/OpenRA.Mods.Common/Activities/Air/HeliReturnToBase.cs index cf9a32f272..98b6adc019 100644 --- a/OpenRA.Mods.Common/Activities/Air/HeliReturnToBase.cs +++ b/OpenRA.Mods.Common/Activities/Air/HeliReturnToBase.cs @@ -20,11 +20,13 @@ namespace OpenRA.Mods.Common.Activities { readonly Aircraft heli; readonly bool alwaysLand; + readonly bool abortOnResupply; - public HeliReturnToBase(Actor self, bool alwaysLand = true) + public HeliReturnToBase(Actor self, bool abortOnResupply, bool alwaysLand = true) { heli = self.Trait(); this.alwaysLand = alwaysLand; + this.abortOnResupply = abortOnResupply; } public Actor ChooseHelipad(Actor self) @@ -82,7 +84,7 @@ namespace OpenRA.Mods.Common.Activities new Turn(self, initialFacing), new HeliLand(self, false), new ResupplyAircraft(self), - !heli.Info.AbortOnResupply ? NextActivity : null); + !abortOnResupply ? NextActivity : null); } return ActivityUtils.SequenceActivities( diff --git a/OpenRA.Mods.Common/Activities/Air/ReturnToBase.cs b/OpenRA.Mods.Common/Activities/Air/ReturnToBase.cs index eab7914ec3..446c9ca281 100644 --- a/OpenRA.Mods.Common/Activities/Air/ReturnToBase.cs +++ b/OpenRA.Mods.Common/Activities/Air/ReturnToBase.cs @@ -23,14 +23,16 @@ namespace OpenRA.Mods.Common.Activities readonly Aircraft plane; readonly AircraftInfo planeInfo; readonly bool alwaysLand; + readonly bool abortOnResupply; bool isCalculated; Actor dest; WPos w1, w2, w3; - public ReturnToBase(Actor self, Actor dest = null, bool alwaysLand = true) + public ReturnToBase(Actor self, bool abortOnResupply, Actor dest = null, bool alwaysLand = true) { this.dest = dest; this.alwaysLand = alwaysLand; + this.abortOnResupply = abortOnResupply; plane = self.Trait(); planeInfo = self.Info.TraitInfo(); } @@ -149,7 +151,7 @@ namespace OpenRA.Mods.Common.Activities landingProcedures.Add(new ResupplyAircraft(self)); } - if (!planeInfo.AbortOnResupply) + if (!abortOnResupply) landingProcedures.Add(NextActivity); return ActivityUtils.SequenceActivities(landingProcedures.ToArray()); diff --git a/OpenRA.Mods.Common/Scripting/Properties/AircraftProperties.cs b/OpenRA.Mods.Common/Scripting/Properties/AircraftProperties.cs index 439697f88a..13b71c126d 100644 --- a/OpenRA.Mods.Common/Scripting/Properties/AircraftProperties.cs +++ b/OpenRA.Mods.Common/Scripting/Properties/AircraftProperties.cs @@ -42,9 +42,9 @@ namespace OpenRA.Mods.Common.Scripting public void ReturnToBase(Actor airfield = null) { if (isPlane) - Self.QueueActivity(new ReturnToBase(Self, airfield)); + Self.QueueActivity(new ReturnToBase(Self, false, airfield)); else - Self.QueueActivity(new HeliReturnToBase(Self)); + Self.QueueActivity(new HeliReturnToBase(Self, false)); } [ScriptActorPropertyActivity] diff --git a/OpenRA.Mods.Common/Traits/Air/Aircraft.cs b/OpenRA.Mods.Common/Traits/Air/Aircraft.cs index 5d28ba48f3..b3097617b4 100644 --- a/OpenRA.Mods.Common/Traits/Air/Aircraft.cs +++ b/OpenRA.Mods.Common/Traits/Air/Aircraft.cs @@ -562,9 +562,9 @@ namespace OpenRA.Mods.Common.Traits if (Reservable.IsReserved(order.TargetActor)) { if (IsPlane) - self.QueueActivity(new ReturnToBase(self)); + self.QueueActivity(new ReturnToBase(self, Info.AbortOnResupply)); else - self.QueueActivity(new HeliReturnToBase(self)); + self.QueueActivity(new HeliReturnToBase(self, Info.AbortOnResupply)); } else { @@ -573,7 +573,7 @@ namespace OpenRA.Mods.Common.Traits if (IsPlane) { self.QueueActivity(order.Queued, ActivityUtils.SequenceActivities( - new ReturnToBase(self, order.TargetActor), + new ReturnToBase(self, Info.AbortOnResupply, order.TargetActor), new ResupplyAircraft(self))); } else @@ -621,9 +621,9 @@ namespace OpenRA.Mods.Common.Traits UnReserve(); self.CancelActivity(); if (IsPlane) - self.QueueActivity(new ReturnToBase(self, null, false)); + self.QueueActivity(new ReturnToBase(self, Info.AbortOnResupply, null, false)); else - self.QueueActivity(new HeliReturnToBase(self, false)); + self.QueueActivity(new HeliReturnToBase(self, Info.AbortOnResupply, false)); } } diff --git a/OpenRA.Mods.Common/Traits/Air/ReturnOnIdle.cs b/OpenRA.Mods.Common/Traits/Air/ReturnOnIdle.cs index 78e1847462..d6843e56c2 100644 --- a/OpenRA.Mods.Common/Traits/Air/ReturnOnIdle.cs +++ b/OpenRA.Mods.Common/Traits/Air/ReturnOnIdle.cs @@ -39,7 +39,7 @@ namespace OpenRA.Mods.Common.Traits var airfield = ReturnToBase.ChooseAirfield(self, true); if (airfield != null) { - self.QueueActivity(new ReturnToBase(self, airfield)); + self.QueueActivity(new ReturnToBase(self, aircraftInfo.AbortOnResupply, airfield)); self.QueueActivity(new ResupplyAircraft(self)); } else