Airlocks do not self close when depowered.

Fixes #390
This commit is contained in:
Pieter-Jan Briers
2019-10-13 17:13:16 +02:00
parent 33e11c0c3a
commit 445e88cce8
2 changed files with 32 additions and 2 deletions

View File

@@ -170,6 +170,11 @@ namespace Content.Server.GameObjects.Components.Doors
return IsPowered();
}
public override bool CanClose()
{
return IsPowered();
}
public override void Deny()
{
if (!IsPowered())

View File

@@ -55,7 +55,7 @@ namespace Content.Server.GameObjects
{
if (State == DoorState.Open)
{
Close();
TryClose(eventArgs.User);
}
else if (State == DoorState.Closed)
{
@@ -137,6 +137,31 @@ namespace Content.Server.GameObjects
});
}
public virtual bool CanClose()
{
return true;
}
public bool CanClose(IEntity user)
{
if (!CanClose()) return false;
if (!Owner.TryGetComponent(out AccessReader accessReader))
{
return true;
}
return accessReader.IsAllowed(user);
}
public void TryClose(IEntity user)
{
if (!CanClose(user))
{
Deny();
return;
}
Close();
}
public bool Close()
{
if (collidableComponent.TryCollision(Vector2.Zero))
@@ -178,7 +203,7 @@ namespace Content.Server.GameObjects
OpenTimeCounter += frameTime;
if (OpenTimeCounter > AUTO_CLOSE_DELAY)
{
if (!Close())
if (!CanClose() || !Close())
{
// Try again in 2 seconds if it's jammed or something.
OpenTimeCounter -= 2;