diff --git a/OpenRA.Mods.RA/AttackBase.cs b/OpenRA.Mods.RA/AttackBase.cs index c1a4ec341a..5307de4e11 100644 --- a/OpenRA.Mods.RA/AttackBase.cs +++ b/OpenRA.Mods.RA/AttackBase.cs @@ -216,8 +216,7 @@ namespace OpenRA.Mods.RA var attack = self.Trait(); var range = attack.GetMaximumRange(); - if (!attack.target.IsValid || - (Util.CellContaining(attack.target.CenterLocation) - self.Location).LengthSquared > range * range) + if (!attack.target.IsValid || !Combat.IsInRange( self.CenterLocation, range, attack.target )) AttackTarget(self, ChooseTarget(self, range), allowMovement); var info = self.Info.Traits.Get(); @@ -235,7 +234,7 @@ namespace OpenRA.Mods.RA .Where(a => a.Owner != null && self.Owner.Stances[a.Owner] == Stance.Enemy) .Where(a => attack.HasAnyValidWeapons(Target.FromActor(a))) .Where(a => !a.HasTrait() || a.Trait().IsVisible(a, self.Owner)) - .OrderBy(a => (a.Location - self.Location).LengthSquared) + .OrderBy(a => (a.CenterLocation - self.CenterLocation).LengthSquared) .FirstOrDefault(); } diff --git a/OpenRA.Mods.RA/AutoHeal.cs b/OpenRA.Mods.RA/AutoHeal.cs index 1e536c6c7c..52360f88bb 100644 --- a/OpenRA.Mods.RA/AutoHeal.cs +++ b/OpenRA.Mods.RA/AutoHeal.cs @@ -35,7 +35,7 @@ namespace OpenRA.Mods.RA if (!attack.target.IsValid) return true; // he's dead. - if ((attack.target.CenterLocation - self.Location).LengthSquared > range * range + 2) + if( !Combat.IsInRange( self.CenterLocation, range, attack.target ) ) return true; // wandered off faster than we could follow if (attack.target.IsActor @@ -64,7 +64,7 @@ namespace OpenRA.Mods.RA .Where(a => a.IsInWorld && !a.IsDead()) .Where(a => a.HasTrait() && a.GetDamageState() > DamageState.Undamaged) .Where(a => attack.HasAnyValidWeapons(Target.FromActor(a))) - .OrderBy(a => (a.Location - self.Location).LengthSquared) + .OrderBy(a => (a.CenterLocation - self.CenterLocation).LengthSquared) .FirstOrDefault(); } } diff --git a/OpenRA.Mods.RA/CarpetBomb.cs b/OpenRA.Mods.RA/CarpetBomb.cs index 10469a2aad..e81430feb5 100644 --- a/OpenRA.Mods.RA/CarpetBomb.cs +++ b/OpenRA.Mods.RA/CarpetBomb.cs @@ -31,7 +31,7 @@ namespace OpenRA.Mods.RA { var info = self.Info.Traits.Get(); - if ((self.Location - Target).LengthSquared > info.Range * info.Range) + if( !Combat.IsInRange( self.CenterLocation, info.Range, Target ) ) return; var limitedAmmo = self.TraitOrDefault(); diff --git a/OpenRA.Mods.RA/Combat.cs b/OpenRA.Mods.RA/Combat.cs index 14dec726a1..e0e8f3c766 100755 --- a/OpenRA.Mods.RA/Combat.cs +++ b/OpenRA.Mods.RA/Combat.cs @@ -224,7 +224,7 @@ namespace OpenRA.Mods.RA { var rsq = range * range * Game.CellSize * Game.CellSize; foreach( var cell in target.Trait().TargetableCells( target ) ) - if( ( attackOrigin - cell * Game.CellSize ).LengthSquared < rsq ) + if( ( attackOrigin - cell * Game.CellSize ).LengthSquared <= rsq ) return true; return false; } @@ -232,7 +232,7 @@ namespace OpenRA.Mods.RA public static bool IsInRange( float2 attackOrigin, float range, float2 targetLocation ) { var rsq = range * range * Game.CellSize * Game.CellSize; - return ( attackOrigin - targetLocation ).LengthSquared < rsq; + return ( attackOrigin - targetLocation ).LengthSquared <= rsq; } public static bool IsInRange( float2 attackOrigin, float range, Target target )