From a77b7af5fdcb10f8ee0e2ef39a841b973f0e9523 Mon Sep 17 00:00:00 2001 From: Bob Date: Thu, 4 Nov 2010 00:37:13 +1300 Subject: [PATCH] add Target overload for IsInRange --- OpenRA.Mods.RA/Activities/Attack.cs | 2 +- OpenRA.Mods.RA/AttackLeap.cs | 2 +- OpenRA.Mods.RA/Combat.cs | 9 +++++++++ OpenRA.Mods.RA/Weapon.cs | 7 ++----- 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/OpenRA.Mods.RA/Activities/Attack.cs b/OpenRA.Mods.RA/Activities/Attack.cs index 7650cb40e0d4..920341b0a1c0 100755 --- a/OpenRA.Mods.RA/Activities/Attack.cs +++ b/OpenRA.Mods.RA/Activities/Attack.cs @@ -45,7 +45,7 @@ IActivity InnerTick( Actor self, AttackBase attack ) var mobile = self.Trait(); var targetCell = Util.CellContaining(Target.CenterLocation); - if (!Combat.IsInRange( self.CenterLocation, Range, Util.CenterOfCell(targetCell))) + if (!Combat.IsInRange( self.CenterLocation, Range, Target)) return Util.SequenceActivities( mobile.MoveTo( Target, Range ), this ); var desiredFacing = Util.GetFacing((targetCell - self.Location).ToFloat2(), 0); diff --git a/OpenRA.Mods.RA/AttackLeap.cs b/OpenRA.Mods.RA/AttackLeap.cs index e54f0d88cb47..23ba4a296ebb 100644 --- a/OpenRA.Mods.RA/AttackLeap.cs +++ b/OpenRA.Mods.RA/AttackLeap.cs @@ -32,7 +32,7 @@ public override void Tick(Actor self) if (IsLeaping) return; var weapon = self.Trait().Weapons[0].Info; - if( !Combat.IsInRange( self.CenterLocation, weapon.Range, target.Actor ) ) return; + if( !Combat.IsInRange( self.CenterLocation, weapon.Range, target ) ) return; self.CancelActivity(); self.QueueActivity(new Leap(self, target)); diff --git a/OpenRA.Mods.RA/Combat.cs b/OpenRA.Mods.RA/Combat.cs index 0688e76f5659..14dec726a109 100755 --- a/OpenRA.Mods.RA/Combat.cs +++ b/OpenRA.Mods.RA/Combat.cs @@ -234,5 +234,14 @@ public static bool IsInRange( float2 attackOrigin, float range, float2 targetLoc var rsq = range * range * Game.CellSize * Game.CellSize; return ( attackOrigin - targetLocation ).LengthSquared < rsq; } + + public static bool IsInRange( float2 attackOrigin, float range, Target target ) + { + if( !target.IsValid ) return false; + if( target.IsActor ) + return IsInRange( attackOrigin, range, target.Actor ); + else + return IsInRange( attackOrigin, range, target.CenterLocation ); + } } } diff --git a/OpenRA.Mods.RA/Weapon.cs b/OpenRA.Mods.RA/Weapon.cs index 6b5f758c3c27..df55a0eba2c1 100644 --- a/OpenRA.Mods.RA/Weapon.cs +++ b/OpenRA.Mods.RA/Weapon.cs @@ -102,13 +102,10 @@ public void CheckFire(Actor self, AttackBase attack, IMove move, IFacing facing, if (limitedAmmo != null && !limitedAmmo.HasAmmo()) return; - if( target.IsActor && !Combat.IsInRange( self.CenterLocation, Info.Range, target.Actor ) ) + if( !Combat.IsInRange( self.CenterLocation, Info.Range, target ) ) return; - else if( !target.IsActor && !Combat.IsInRange( self.CenterLocation, Info.Range, target.CenterLocation ) ) + if( Combat.IsInRange( self.CenterLocation, Info.MinRange, target ) ) return; - - if (Info.MinRange * Info.MinRange * Game.CellSize * Game.CellSize > - (target.CenterLocation - self.CenterLocation).LengthSquared) return; if (!IsValidAgainst(self.World, target)) return;