Keep windoors open if they are clicked (#11180)

This commit is contained in:
Visne
2022-09-10 23:48:03 +02:00
committed by GitHub
parent acd24bed4d
commit 94178804df
3 changed files with 28 additions and 0 deletions

View File

@@ -50,6 +50,13 @@ namespace Content.Server.Doors.Components
[DataField("openPanelVisible")]
public bool OpenPanelVisible = false;
/// <summary>
/// Whether the airlock should stay open if the airlock was clicked.
/// If the airlock was bumped into it will still auto close.
/// </summary>
[DataField("keepOpenIfClicked")]
public bool KeepOpenIfClicked = false;
private CancellationTokenSource _powerWiresPulsedTimerCancel = new();
private bool _powerWiresPulsed;
@@ -105,6 +112,12 @@ namespace Content.Server.Doors.Components
}
}
/// <summary>
/// Whether the airlock should auto close. This value is reset every time the airlock closes.
/// </summary>
[ViewVariables(VVAccess.ReadWrite)]
public bool AutoClose = true;
/// <summary>
/// Delay until an open door automatically closes.
/// </summary>

View File

@@ -71,6 +71,10 @@ namespace Content.Server.Doors.Systems
component.UpdateBoltLightStatus();
UpdateAutoClose(uid, component);
// Make sure the airlock auto closes again next time it is opened
if (args.State == DoorState.Closed)
component.AutoClose = true;
}
/// <summary>
@@ -84,6 +88,9 @@ namespace Content.Server.Doors.Systems
if (door.State != DoorState.Open)
return;
if (!airlock.AutoClose)
return;
if (!airlock.CanChangeState())
return;
@@ -133,6 +140,13 @@ namespace Content.Server.Doors.Systems
{
_wiresSystem.OpenUserInterface(uid, actor.PlayerSession);
args.Handled = true;
return;
}
if (component.KeepOpenIfClicked)
{
// Disable auto close
component.AutoClose = false;
}
}

View File

@@ -72,6 +72,7 @@
acts: [ "Destruction" ]
- type: AccessReader
- type: Airlock
keepOpenIfClicked: true
openPanelVisible: true
# needed so that windoors will close regardless of whether there are people in it; it doesn't crush after all
safety: false