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(); return IsPowered();
} }
public override bool CanClose()
{
return IsPowered();
}
public override void Deny() public override void Deny()
{ {
if (!IsPowered()) if (!IsPowered())

View File

@@ -55,7 +55,7 @@ namespace Content.Server.GameObjects
{ {
if (State == DoorState.Open) if (State == DoorState.Open)
{ {
Close(); TryClose(eventArgs.User);
} }
else if (State == DoorState.Closed) 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() public bool Close()
{ {
if (collidableComponent.TryCollision(Vector2.Zero)) if (collidableComponent.TryCollision(Vector2.Zero))
@@ -178,7 +203,7 @@ namespace Content.Server.GameObjects
OpenTimeCounter += frameTime; OpenTimeCounter += frameTime;
if (OpenTimeCounter > AUTO_CLOSE_DELAY) if (OpenTimeCounter > AUTO_CLOSE_DELAY)
{ {
if (!Close()) if (!CanClose() || !Close())
{ {
// Try again in 2 seconds if it's jammed or something. // Try again in 2 seconds if it's jammed or something.
OpenTimeCounter -= 2; OpenTimeCounter -= 2;