Fix laser collision logic wrt transparent entities (#1018)

This commit is contained in:
ComicIronic
2020-05-27 23:59:45 +01:00
committed by GitHub
parent ab6bc42a4a
commit a77c1125ce
2 changed files with 5 additions and 3 deletions

View File

@@ -93,10 +93,11 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Hitscan
var userPosition = user.Transform.WorldPosition; //Remember world positions are ephemeral and can only be used instantaneously
var angle = new Angle(clickLocation.Position - userPosition);
var ray = new CollisionRay(userPosition, angle.ToVec(), (int)(CollisionGroup.Impassable | CollisionGroup.MobImpassable));
var rayCastResults = IoCManager.Resolve<IPhysicsManager>().IntersectRay(user.Transform.MapID, ray, MaxLength, user).ToList();
var ray = new CollisionRay(userPosition, angle.ToVec(), (int)(CollisionGroup.Opaque));
var rayCastResults = IoCManager.Resolve<IPhysicsManager>().IntersectRay(user.Transform.MapID, ray, MaxLength, user, returnOnFirstHit: false).ToList();
if (rayCastResults.Count == 1)
//The first result is guaranteed to be the closest one
if (rayCastResults.Count >= 1)
{
Hit(rayCastResults[0], energyModifier, user);
AfterEffects(user, rayCastResults[0], angle, energyModifier);

View File

@@ -109,6 +109,7 @@
- VaultImpassable
- SmallImpassable
layer:
- Opaque
- MobImpassable
- type: Input
context: "human"