From 1e138a97741fc9474069622a6663aa7e5a44a540 Mon Sep 17 00:00:00 2001 From: abcdefg30 Date: Mon, 2 Dec 2019 20:32:45 +0100 Subject: [PATCH] Drop invisible invalid targets immediately when changing stance --- OpenRA.Mods.Cnc/Activities/LeapAttack.cs | 3 ++- OpenRA.Mods.Common/Activities/Air/FlyAttack.cs | 3 ++- OpenRA.Mods.Common/Activities/Attack.cs | 3 ++- OpenRA.Mods.Common/Traits/Attack/AttackFollow.cs | 3 ++- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/OpenRA.Mods.Cnc/Activities/LeapAttack.cs b/OpenRA.Mods.Cnc/Activities/LeapAttack.cs index cbe2c0c3d6..7027c255f2 100644 --- a/OpenRA.Mods.Cnc/Activities/LeapAttack.cs +++ b/OpenRA.Mods.Cnc/Activities/LeapAttack.cs @@ -156,7 +156,8 @@ namespace OpenRA.Mods.Cnc.Activities if (newStance > oldStance || forceAttack) return; - if (!autoTarget.HasValidTargetPriority(self, lastVisibleOwner, lastVisibleTargetTypes)) + // If lastVisibleTarget is invalid we could never view the target in the first place, so we just drop it here too + if (!lastVisibleTarget.IsValidFor(self) || !autoTarget.HasValidTargetPriority(self, lastVisibleOwner, lastVisibleTargetTypes)) target = Target.Invalid; } diff --git a/OpenRA.Mods.Common/Activities/Air/FlyAttack.cs b/OpenRA.Mods.Common/Activities/Air/FlyAttack.cs index ca32e927d1..b39932c4c6 100644 --- a/OpenRA.Mods.Common/Activities/Air/FlyAttack.cs +++ b/OpenRA.Mods.Common/Activities/Air/FlyAttack.cs @@ -184,7 +184,8 @@ namespace OpenRA.Mods.Common.Activities if (newStance > oldStance || forceAttack) return; - if (!autoTarget.HasValidTargetPriority(self, lastVisibleOwner, lastVisibleTargetTypes)) + // If lastVisibleTarget is invalid we could never view the target in the first place, so we just drop it here too + if (!lastVisibleTarget.IsValidFor(self) || !autoTarget.HasValidTargetPriority(self, lastVisibleOwner, lastVisibleTargetTypes)) attackAircraft.ClearRequestedTarget(); } diff --git a/OpenRA.Mods.Common/Activities/Attack.cs b/OpenRA.Mods.Common/Activities/Attack.cs index 873265c50f..c9c46d5566 100644 --- a/OpenRA.Mods.Common/Activities/Attack.cs +++ b/OpenRA.Mods.Common/Activities/Attack.cs @@ -225,7 +225,8 @@ namespace OpenRA.Mods.Common.Activities if (newStance > oldStance || forceAttack) return; - if (!autoTarget.HasValidTargetPriority(self, lastVisibleOwner, lastVisibleTargetTypes)) + // If lastVisibleTarget is invalid we could never view the target in the first place, so we just drop it here too + if (!lastVisibleTarget.IsValidFor(self) || !autoTarget.HasValidTargetPriority(self, lastVisibleOwner, lastVisibleTargetTypes)) target = Target.Invalid; } diff --git a/OpenRA.Mods.Common/Traits/Attack/AttackFollow.cs b/OpenRA.Mods.Common/Traits/Attack/AttackFollow.cs index 73185c1a19..5dd1519ef3 100644 --- a/OpenRA.Mods.Common/Traits/Attack/AttackFollow.cs +++ b/OpenRA.Mods.Common/Traits/Attack/AttackFollow.cs @@ -364,7 +364,8 @@ namespace OpenRA.Mods.Common.Traits if (newStance > oldStance || forceAttack) return; - if (!autoTarget.HasValidTargetPriority(self, lastVisibleOwner, lastVisibleTargetTypes)) + // If lastVisibleTarget is invalid we could never view the target in the first place, so we just drop it here too + if (!lastVisibleTarget.IsValidFor(self) || !autoTarget.HasValidTargetPriority(self, lastVisibleOwner, lastVisibleTargetTypes)) attack.ClearRequestedTarget(); }