From 9c29264be74236038e4de02e602f4301167c3ab1 Mon Sep 17 00:00:00 2001 From: abcdefg30 Date: Fri, 7 Aug 2020 16:09:14 +0200 Subject: [PATCH] Drop FlyAttackRun targets when we don't have valid armaments against them --- OpenRA.Mods.Common/Activities/Air/FlyAttack.cs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/OpenRA.Mods.Common/Activities/Air/FlyAttack.cs b/OpenRA.Mods.Common/Activities/Air/FlyAttack.cs index a46db5e457..7f8c7a2758 100644 --- a/OpenRA.Mods.Common/Activities/Air/FlyAttack.cs +++ b/OpenRA.Mods.Common/Activities/Air/FlyAttack.cs @@ -173,7 +173,7 @@ namespace OpenRA.Mods.Common.Activities else if (attackAircraft.Info.AttackType == AirAttackType.Strafe) QueueChild(new StrafeAttackRun(self, attackAircraft, aircraft, target, strafeDistance != WDist.Zero ? strafeDistance : lastVisibleMaximumRange)); else if (attackAircraft.Info.AttackType == AirAttackType.Default && !aircraft.Info.CanHover) - QueueChild(new FlyAttackRun(self, target, lastVisibleMaximumRange)); + QueueChild(new FlyAttackRun(self, target, lastVisibleMaximumRange, attackAircraft)); // Turn to face the target if required. else if (!attackAircraft.TargetInFiringArc(self, target, attackAircraft.Info.FacingTolerance)) @@ -214,17 +214,19 @@ namespace OpenRA.Mods.Common.Activities class FlyAttackRun : Activity { + readonly AttackAircraft attack; readonly WDist exitRange; Target target; bool targetIsVisibleActor; - public FlyAttackRun(Actor self, in Target t, WDist exitRange) + public FlyAttackRun(Actor self, in Target t, WDist exitRange, AttackAircraft attack) { ChildHasPriority = false; target = t; this.exitRange = exitRange; + this.attack = attack; } protected override void OnFirstRun(Actor self) @@ -252,7 +254,7 @@ namespace OpenRA.Mods.Common.Activities target = target.Recalculate(self.Owner, out var targetIsHiddenActor); targetIsVisibleActor = target.Type == TargetType.Actor && !targetIsHiddenActor; - if (targetWasVisibleActor && !target.IsValidFor(self)) + if (targetWasVisibleActor && (!target.IsValidFor(self) || !attack.HasAnyValidWeapons(target))) Cancel(self); return false;