From 8e1ecb547673a5f74630968efa8b714a45d5cb23 Mon Sep 17 00:00:00 2001 From: DrSmugleaf Date: Mon, 20 Jul 2020 16:03:05 +0200 Subject: [PATCH] Add headbutting open airlocks when you have no hands (#1433) --- .../Components/Doors/ServerDoorComponent.cs | 15 +++++++++++++-- .../Components/GUI/ServerHandsComponent.cs | 2 ++ Resources/Audio/effects/bang.ogg | Bin 0 -> 8209 bytes 3 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 Resources/Audio/effects/bang.ogg diff --git a/Content.Server/GameObjects/Components/Doors/ServerDoorComponent.cs b/Content.Server/GameObjects/Components/Doors/ServerDoorComponent.cs index e0ffed9177..6f3cd3612c 100644 --- a/Content.Server/GameObjects/Components/Doors/ServerDoorComponent.cs +++ b/Content.Server/GameObjects/Components/Doors/ServerDoorComponent.cs @@ -2,12 +2,16 @@ using System.Linq; using Content.Server.GameObjects.Components.Access; using Content.Server.GameObjects.Components.Mobs; +using Content.Server.Interfaces.GameObjects; using Content.Shared.GameObjects.Components.Doors; using Content.Shared.GameObjects.Components.Movement; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; +using Robust.Server.GameObjects.EntitySystems; +using Robust.Shared.Audio; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components; +using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Maths; using Robust.Shared.Serialization; @@ -35,7 +39,7 @@ namespace Content.Server.GameObjects protected bool AutoClose = true; protected const float AutoCloseDelay = 5; protected float CloseSpeed = AutoCloseDelay; - + private ICollidableComponent _collidableComponent; private AppearanceComponent _appearance; private CancellationTokenSource _cancellationTokenSource; @@ -145,7 +149,14 @@ namespace Content.Server.GameObjects Deny(); return; } + Open(); + + if (user.TryGetComponent(out HandsComponent hands) && hands.Count == 0) + { + EntitySystem.Get().PlayFromEntity("/Audio/Effects/bang.ogg", Owner, + AudioParams.Default.WithVolume(-2)); + } } public void Open() @@ -296,7 +307,7 @@ namespace Content.Server.GameObjects { OpenTimeCounter += frameTime; } - + if (OpenTimeCounter > CloseSpeed) { if (!CanClose() || !Close()) diff --git a/Content.Server/GameObjects/Components/GUI/ServerHandsComponent.cs b/Content.Server/GameObjects/Components/GUI/ServerHandsComponent.cs index 4e249d4a8e..b43b315899 100644 --- a/Content.Server/GameObjects/Components/GUI/ServerHandsComponent.cs +++ b/Content.Server/GameObjects/Components/GUI/ServerHandsComponent.cs @@ -55,6 +55,8 @@ namespace Content.Server.GameObjects // Mostly arbitrary. public const float PickupRange = 2; + [ViewVariables] public int Count => _orderedHands.Count; + public override void ExposeData(ObjectSerializer serializer) { base.ExposeData(serializer); diff --git a/Resources/Audio/effects/bang.ogg b/Resources/Audio/effects/bang.ogg new file mode 100644 index 0000000000000000000000000000000000000000..656983f09808314e58d95e07f18bcce6c82fc7ba GIT binary patch literal 8209 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 literal 0 HcmV?d00001