From 1fc3785f7988425c52d5199c2769679f6f650f19 Mon Sep 17 00:00:00 2001 From: darkademic <41052878+darkademic@users.noreply.github.com> Date: Wed, 4 May 2022 00:17:04 +0100 Subject: [PATCH] Make range modifiers apply to AreaBeam projectile. --- OpenRA.Mods.Common/Projectiles/AreaBeam.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/OpenRA.Mods.Common/Projectiles/AreaBeam.cs b/OpenRA.Mods.Common/Projectiles/AreaBeam.cs index 37b543fef1..bb90cfc291 100644 --- a/OpenRA.Mods.Common/Projectiles/AreaBeam.cs +++ b/OpenRA.Mods.Common/Projectiles/AreaBeam.cs @@ -85,6 +85,7 @@ namespace OpenRA.Mods.Common.Projectiles readonly AttackBase actorAttackBase; readonly Color color; readonly WDist speed; + readonly WDist weaponRange; [Sync] WPos headPos; @@ -137,6 +138,7 @@ namespace OpenRA.Mods.Common.Projectiles target += dir * info.BeyondTargetRange.Length / 1024; length = Math.Max((target - headPos).Length / speed.Length, 1); + weaponRange = new WDist(Util.ApplyPercentageModifiers(args.Weapon.Range.Length, args.RangeModifiers)); } void TrackTarget() @@ -151,7 +153,7 @@ namespace OpenRA.Mods.Common.Projectiles // Only continue tracking target if it's within weapon range + // BeyondTargetRange to avoid edge case stuttering (start firing and immediately stop again). - if (targetDistance > args.Weapon.Range + info.BeyondTargetRange) + if (targetDistance > weaponRange + info.BeyondTargetRange) StopTargeting(); else { @@ -192,7 +194,7 @@ namespace OpenRA.Mods.Common.Projectiles } // Allow for leniency to avoid edge case stuttering (start firing and immediately stop again). - var outOfWeaponRange = args.Weapon.Range + info.BeyondTargetRange < new WDist((args.PassiveTarget - args.Source).Length); + var outOfWeaponRange = weaponRange + info.BeyondTargetRange < new WDist((args.PassiveTarget - args.Source).Length); // While the head is travelling, the tail must start to follow Duration ticks later. // Alternatively, also stop emitting the beam if source actor dies or is ordered to stop.