]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
signaller can be used as a payload (#14827)
authordeltanedas <39013340+deltanedas@users.noreply.github.com>
Sun, 23 Apr 2023 03:17:59 +0000 (03:17 +0000)
committerGitHub <noreply@github.com>
Sun, 23 Apr 2023 03:17:59 +0000 (13:17 +1000)
Co-authored-by: deltanedas <@deltanedas:kde.org>
Content.Server/MachineLinking/System/SignallerSystem.cs
Resources/Prototypes/Entities/Objects/Devices/Electronics/signaller.yml

index 3637119958ac238fa8dcc3216204c9a30fb5e017..e83253cb65f4842d2b9d6255c94bf009bdae09f6 100644 (file)
@@ -1,31 +1,49 @@
+using Content.Server.Explosion.EntitySystems;
 using Content.Server.MachineLinking.Components;
-using JetBrains.Annotations;
 using Content.Shared.Interaction.Events;
+using Content.Shared.Timing;
 
-namespace Content.Server.MachineLinking.System
+namespace Content.Server.MachineLinking.System;
+
+public sealed class SignallerSystem : EntitySystem
 {
-    [UsedImplicitly]
-    public sealed class SignallerSystem : EntitySystem
+    [Dependency] private readonly SignalLinkerSystem _signal = default!;
+    [Dependency] private readonly UseDelaySystem _useDelay = default!;
+
+    public override void Initialize()
+    {
+        base.Initialize();
+
+        SubscribeLocalEvent<SignallerComponent, ComponentInit>(OnInit);
+        SubscribeLocalEvent<SignallerComponent, UseInHandEvent>(OnUseInHand);
+        SubscribeLocalEvent<SignallerComponent, TriggerEvent>(OnTrigger);
+    }
+
+    private void OnInit(EntityUid uid, SignallerComponent component, ComponentInit args)
+    {
+        _signal.EnsureTransmitterPorts(uid, component.Port);
+    }
+
+    private void OnUseInHand(EntityUid uid, SignallerComponent component, UseInHandEvent args)
     {
-        [Dependency] private readonly SignalLinkerSystem _signalSystem = default!;
-        public override void Initialize()
-        {
-            base.Initialize();
-            SubscribeLocalEvent<SignallerComponent, ComponentInit>(OnInit);
-            SubscribeLocalEvent<SignallerComponent, UseInHandEvent>(OnUseInHand);
-        }
-
-        private void OnInit(EntityUid uid, SignallerComponent component, ComponentInit args)
-        {
-            _signalSystem.EnsureTransmitterPorts(uid, component.Port);
-        }
-
-        private void OnUseInHand(EntityUid uid, SignallerComponent component, UseInHandEvent args)
-        {
-            if (args.Handled)
-                return;
-            _signalSystem.InvokePort(uid, component.Port);
-            args.Handled = true;
-        }   
+        if (args.Handled)
+            return;
+        _signal.InvokePort(uid, component.Port);
+        args.Handled = true;
+    }
+
+    private void OnTrigger(EntityUid uid, SignallerComponent component, TriggerEvent args)
+    {
+        // if on cooldown, do nothing
+        var hasUseDelay = TryComp<UseDelayComponent>(uid, out var useDelay);
+        if (hasUseDelay && _useDelay.ActiveDelay(uid, useDelay))
+            return;
+
+        // set cooldown to prevent clocks
+        if (hasUseDelay)
+            _useDelay.BeginDelay(uid, useDelay);
+
+        _signal.InvokePort(uid, component.Port);
+        args.Handled = true;
     }
 }
index f37975c303e9447986dc01875210c7a049826078..153e24818e6382d2b082d23319c80d729b72b11c 100644 (file)
@@ -16,3 +16,6 @@
   - type: SignalTransmitter
     outputs:
       Pressed: []
+  - type: Tag
+    tags:
+    - Payload