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:
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user