mirror of
https://github.com/space-wizards/space-station-14.git
synced 2026-02-14 19:29:53 +01:00
Fix prying shut unpowered doors (#35380)
This commit is contained in:
committed by
GitHub
parent
7f8f1bfb94
commit
732d9dc2b7
@@ -44,15 +44,20 @@ namespace Content.Shared.Doors
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// This event is raised both when the door is initially closed, and when it is just about to become "partially"
|
||||
/// closed (opaque & collidable). If canceled while partially closing, it will start opening again. Useful in case
|
||||
/// closed (opaque & collidable). If canceled while partially closing, it will start opening again. Useful in case
|
||||
/// an entity entered the door just as it was about to become "solid".
|
||||
/// </remarks>
|
||||
public sealed class BeforeDoorClosedEvent : CancellableEntityEventArgs
|
||||
{
|
||||
/// <summary>
|
||||
/// If true, this check is being performed when the door is partially closing.
|
||||
/// </summary>
|
||||
public bool Partial;
|
||||
public bool PerformCollisionCheck;
|
||||
|
||||
public BeforeDoorClosedEvent(bool performCollisionCheck)
|
||||
public BeforeDoorClosedEvent(bool performCollisionCheck, bool partial = false)
|
||||
{
|
||||
Partial = partial;
|
||||
PerformCollisionCheck = performCollisionCheck;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,7 +42,7 @@ public abstract class SharedAirlockSystem : EntitySystem
|
||||
// the initial power-check.
|
||||
|
||||
if (TryComp(uid, out DoorComponent? door)
|
||||
&& !door.Partial
|
||||
&& !args.Partial
|
||||
&& !CanChangeState(uid, airlock))
|
||||
{
|
||||
args.Cancel();
|
||||
|
||||
@@ -427,7 +427,7 @@ public abstract partial class SharedDoorSystem : EntitySystem
|
||||
/// <param name="uid"> The uid of the door</param>
|
||||
/// <param name="door"> The doorcomponent of the door</param>
|
||||
/// <param name="user"> The user (if any) opening the door</param>
|
||||
public bool CanClose(EntityUid uid, DoorComponent? door = null, EntityUid? user = null)
|
||||
public bool CanClose(EntityUid uid, DoorComponent? door = null, EntityUid? user = null, bool partial = false)
|
||||
{
|
||||
if (!Resolve(uid, ref door))
|
||||
return false;
|
||||
@@ -437,7 +437,7 @@ public abstract partial class SharedDoorSystem : EntitySystem
|
||||
if (door.State is DoorState.Welded or DoorState.Closed)
|
||||
return false;
|
||||
|
||||
var ev = new BeforeDoorClosedEvent(door.PerformCollisionCheck);
|
||||
var ev = new BeforeDoorClosedEvent(door.PerformCollisionCheck, partial);
|
||||
RaiseLocalEvent(uid, ev);
|
||||
if (ev.Cancelled)
|
||||
return false;
|
||||
@@ -472,7 +472,7 @@ public abstract partial class SharedDoorSystem : EntitySystem
|
||||
return false;
|
||||
|
||||
// Make sure no entity walked into the airlock when it started closing.
|
||||
if (!CanClose(uid, door))
|
||||
if (!CanClose(uid, door, partial: true))
|
||||
{
|
||||
door.NextStateChange = GameTiming.CurTime + door.OpenTimeTwo;
|
||||
door.State = DoorState.Open;
|
||||
|
||||
Reference in New Issue
Block a user