Merge pull request #3452 from Mailaender/center-range

Don't discriminate bottom right directions when checking whether a unit is in range.
This commit is contained in:
Paul Chote
2013-06-21 05:39:47 -07:00

View File

@@ -149,7 +149,7 @@ namespace OpenRA.Mods.RA
destAltitude = altitude, destAltitude = altitude,
firedBy = attacker, firedBy = attacker,
target = Target.FromPos(pos), target = Target.FromPos(pos),
weapon = Rules.Weapons[ weapontype.ToLowerInvariant() ], weapon = Rules.Weapons[weapontype.ToLowerInvariant()],
facing = 0 facing = 0
}; };
@@ -201,18 +201,18 @@ namespace OpenRA.Mods.RA
return true; return true;
} }
public static bool WeaponValidForTarget( WeaponInfo weapon, World world, CPos location ) public static bool WeaponValidForTarget(WeaponInfo weapon, World world, CPos location)
{ {
if( weapon.ValidTargets.Contains( "Ground" ) && world.GetTerrainType( location ) != "Water" ) return true; if (weapon.ValidTargets.Contains("Ground") && world.GetTerrainType(location) != "Water") return true;
if( weapon.ValidTargets.Contains( "Water" ) && world.GetTerrainType( location ) == "Water" ) return true; if (weapon.ValidTargets.Contains("Water") && world.GetTerrainType(location) == "Water") return true;
return false; return false;
} }
public static bool IsInRange( PPos attackOrigin, float range, Actor target ) public static bool IsInRange(PPos attackOrigin, float range, Actor target)
{ {
var rsq = range * range * Game.CellSize * Game.CellSize; var rsq = range * range * Game.CellSize * Game.CellSize;
foreach ( var cell in target.Trait<ITargetable>().TargetableCells( target ) ) foreach (var cell in target.Trait<ITargetable>().TargetableCells(target))
if ( (attackOrigin - cell.ToPPos()).LengthSquared <= rsq ) if ((attackOrigin - Util.CenterOfCell(cell)).LengthSquared <= rsq)
return true; return true;
return false; return false;
} }
@@ -220,16 +220,16 @@ namespace OpenRA.Mods.RA
public static bool IsInRange(PPos attackOrigin, float range, PPos targetLocation) public static bool IsInRange(PPos attackOrigin, float range, PPos targetLocation)
{ {
var rsq = range * range * Game.CellSize * Game.CellSize; var rsq = range * range * Game.CellSize * Game.CellSize;
return ( attackOrigin - targetLocation ).LengthSquared <= rsq; return (attackOrigin - targetLocation).LengthSquared <= rsq;
} }
public static bool IsInRange(PPos attackOrigin, float range, Target target) public static bool IsInRange(PPos attackOrigin, float range, Target target)
{ {
if( !target.IsValid ) return false; if (!target.IsValid) return false;
if( target.IsActor ) if (target.IsActor)
return IsInRange( attackOrigin, range, target.Actor ); return IsInRange(attackOrigin, range, target.Actor);
else else
return IsInRange( attackOrigin, range, target.CenterLocation ); return IsInRange(attackOrigin, range, target.CenterLocation);
} }
} }
} }