Allow hitscan to go through open doors (#2240)
So the door itself sets physics.Hard as false although that doesn't seem to include hard which I guess makes sense. Co-authored-by: Metal Gear Sloth <metalgearsloth@gmail.com>
This commit is contained in:
@@ -17,6 +17,7 @@ using Content.Shared.GameObjects.Components.Doors;
|
|||||||
using Content.Shared.GameObjects.Components.Interactable;
|
using Content.Shared.GameObjects.Components.Interactable;
|
||||||
using Content.Shared.GameObjects.Components.Movement;
|
using Content.Shared.GameObjects.Components.Movement;
|
||||||
using Content.Shared.Interfaces.GameObjects.Components;
|
using Content.Shared.Interfaces.GameObjects.Components;
|
||||||
|
using Content.Shared.Physics;
|
||||||
using Robust.Server.GameObjects;
|
using Robust.Server.GameObjects;
|
||||||
using Robust.Server.GameObjects.EntitySystems;
|
using Robust.Server.GameObjects.EntitySystems;
|
||||||
using Robust.Shared.Audio;
|
using Robust.Shared.Audio;
|
||||||
@@ -49,6 +50,32 @@ namespace Content.Server.GameObjects.Components.Doors
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
_state = value;
|
_state = value;
|
||||||
|
|
||||||
|
// Didn't do in Open and Close as some stuff spawns as open so this is just easier.
|
||||||
|
if (Owner.TryGetComponent(out IPhysicsComponent? physicsComponent))
|
||||||
|
{
|
||||||
|
switch (_state)
|
||||||
|
{
|
||||||
|
case DoorState.Closed:
|
||||||
|
case DoorState.Closing:
|
||||||
|
// WE should probably track what we updated but I doubt doors will get more than 1 physics shape anyway... right?
|
||||||
|
foreach (var shape in physicsComponent.PhysicsShapes)
|
||||||
|
{
|
||||||
|
shape.CollisionLayer |= (int) CollisionGroup.Opaque;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case DoorState.Open:
|
||||||
|
case DoorState.Opening:
|
||||||
|
foreach (var shape in physicsComponent.PhysicsShapes)
|
||||||
|
{
|
||||||
|
shape.CollisionLayer &= (int) ~CollisionGroup.Opaque;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new ArgumentOutOfRangeException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Owner.EntityManager.EventBus.RaiseEvent(EventSource.Local, new DoorStateMessage(this, State));
|
Owner.EntityManager.EventBus.RaiseEvent(EventSource.Local, new DoorStateMessage(this, State));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user