Skip to content

Commit

Permalink
add Target overload for IsInRange
Browse files Browse the repository at this point in the history
  • Loading branch information
ytinasni authored and chrisforbes committed Nov 5, 2010
1 parent ecf4172 commit a77b7af
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 7 deletions.
2 changes: 1 addition & 1 deletion OpenRA.Mods.RA/Activities/Attack.cs
Expand Up @@ -45,7 +45,7 @@ IActivity InnerTick( Actor self, AttackBase attack )
var mobile = self.Trait<Mobile>();
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);
Expand Down
2 changes: 1 addition & 1 deletion OpenRA.Mods.RA/AttackLeap.cs
Expand Up @@ -32,7 +32,7 @@ public override void Tick(Actor self)
if (IsLeaping) return;

var weapon = self.Trait<AttackBase>().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));
Expand Down
9 changes: 9 additions & 0 deletions OpenRA.Mods.RA/Combat.cs
Expand Up @@ -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 );
}
}
}
7 changes: 2 additions & 5 deletions OpenRA.Mods.RA/Weapon.cs
Expand Up @@ -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;

Expand Down

0 comments on commit a77b7af

Please sign in to comment.