Fix hitscan lasers (#2239)
EntityCoordinates moment Co-authored-by: Metal Gear Sloth <metalgearsloth@gmail.com>
This commit is contained in:
@@ -426,20 +426,18 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private void FireHitscan(IEntity shooter, HitscanComponent hitscan, Angle angle)
|
private void FireHitscan(IEntity shooter, HitscanComponent hitscan, Angle angle)
|
||||||
{
|
{
|
||||||
var ray = new CollisionRay(Owner.Transform.Coordinates.Position, angle.ToVec(), (int) hitscan.CollisionMask);
|
var ray = new CollisionRay(Owner.Transform.Coordinates.ToMapPos(Owner.EntityManager), angle.ToVec(), (int) hitscan.CollisionMask);
|
||||||
var physicsManager = IoCManager.Resolve<IPhysicsManager>();
|
var physicsManager = IoCManager.Resolve<IPhysicsManager>();
|
||||||
var rayCastResults = physicsManager.IntersectRay(Owner.Transform.MapID, ray, hitscan.MaxLength, shooter, false).ToList();
|
var rayCastResults = physicsManager.IntersectRay(Owner.Transform.MapID, ray, hitscan.MaxLength, shooter, false).ToList();
|
||||||
|
|
||||||
if (rayCastResults.Count >= 1)
|
if (rayCastResults.Count >= 1)
|
||||||
{
|
{
|
||||||
var result = rayCastResults[0];
|
var result = rayCastResults[0];
|
||||||
var distance = result.HitEntity != null ? result.Distance : hitscan.MaxLength;
|
var distance = result.Distance;
|
||||||
hitscan.FireEffects(shooter, distance, angle, result.HitEntity);
|
hitscan.FireEffects(shooter, distance, angle, result.HitEntity);
|
||||||
|
|
||||||
if (result.HitEntity == null || !result.HitEntity.TryGetComponent(out IDamageableComponent damageable))
|
if (!result.HitEntity.TryGetComponent(out IDamageableComponent damageable))
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
damageable.ChangeDamage(hitscan.DamageType, (int)Math.Round(hitscan.Damage, MidpointRounding.AwayFromZero), false, Owner);
|
damageable.ChangeDamage(hitscan.DamageType, (int)Math.Round(hitscan.Damage, MidpointRounding.AwayFromZero), false, Owner);
|
||||||
//I used Math.Round over Convert.toInt32, as toInt32 always rounds to
|
//I used Math.Round over Convert.toInt32, as toInt32 always rounds to
|
||||||
|
|||||||
Reference in New Issue
Block a user