]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Change the syndicate charge to start a timer on signal (#32423)
authorSaphire Lattice <lattice@saphi.re>
Fri, 4 Oct 2024 09:34:48 +0000 (15:34 +0600)
committerGitHub <noreply@github.com>
Fri, 4 Oct 2024 09:34:48 +0000 (11:34 +0200)
* Change the syndicate charge to start a timer on signal

* Actually add the component in question

* Add default link for TimerStart signal

Content.Server/Explosion/Components/TimerStartOnSignalComponent.cs [new file with mode: 0644]
Content.Server/Explosion/EntitySystems/TriggerSystem.Signal.cs
Resources/Locale/en-US/machine-linking/receiver_ports.ftl
Resources/Prototypes/DeviceLinking/sink_ports.yml
Resources/Prototypes/DeviceLinking/source_ports.yml
Resources/Prototypes/Entities/Objects/Weapons/Bombs/plastic.yml

diff --git a/Content.Server/Explosion/Components/TimerStartOnSignalComponent.cs b/Content.Server/Explosion/Components/TimerStartOnSignalComponent.cs
new file mode 100644 (file)
index 0000000..9adc6da
--- /dev/null
@@ -0,0 +1,15 @@
+using Content.Shared.DeviceLinking;
+using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
+
+namespace Content.Server.Explosion.Components
+{
+    /// <summary>
+    /// Sends a trigger when signal is received.
+    /// </summary>
+    [RegisterComponent]
+    public sealed partial class TimerStartOnSignalComponent : Component
+    {
+        [DataField("port", customTypeSerializer: typeof(PrototypeIdSerializer<SinkPortPrototype>))]
+        public string Port = "Timer";
+    }
+}
index ffd47f0257b0bb6c4556b3b86cefd3a25da12888..ce4d201f28964d92456f368946550bcda73ae067 100644 (file)
@@ -11,6 +11,9 @@ namespace Content.Server.Explosion.EntitySystems
         {
             SubscribeLocalEvent<TriggerOnSignalComponent,SignalReceivedEvent>(OnSignalReceived);
             SubscribeLocalEvent<TriggerOnSignalComponent,ComponentInit>(OnInit);
+
+            SubscribeLocalEvent<TimerStartOnSignalComponent,SignalReceivedEvent>(OnTimerSignalReceived);
+            SubscribeLocalEvent<TimerStartOnSignalComponent,ComponentInit>(OnTimerSignalInit);
         }
 
         private void OnSignalReceived(EntityUid uid, TriggerOnSignalComponent component, ref SignalReceivedEvent args)
@@ -24,5 +27,17 @@ namespace Content.Server.Explosion.EntitySystems
         {
             _signalSystem.EnsureSinkPorts(uid, component.Port);
         }
+
+        private void OnTimerSignalReceived(EntityUid uid, TimerStartOnSignalComponent component, ref SignalReceivedEvent args)
+        {
+            if (args.Port != component.Port)
+                return;
+
+            StartTimer(uid, args.Trigger);
+        }
+        private void OnTimerSignalInit(EntityUid uid, TimerStartOnSignalComponent component, ComponentInit args)
+        {
+            _signalSystem.EnsureSinkPorts(uid, component.Port);
+        }
     }
 }
index a0d2fd3ec4099b71fec799b943c203d4eddb0756..d7a2636e11b67cd1c9fc24f5a7eb46577e836c78 100644 (file)
@@ -28,6 +28,9 @@ signal-port-description-doorbolt = Bolts door when HIGH.
 signal-port-name-trigger = Trigger
 signal-port-description-trigger = Triggers some mechanism on the device.
 
+signal-port-name-timer = Timer
+signal-port-description-timer = Starts the timer countdown of the device.
+
 signal-port-name-order-sender = Order sender
 signal-port-description-order-sender = Cargo console order sender
 
index 339b8141751e9a6833876cec86ed4c9c136e3e14..a5313fcc4e476640393d102361e795bc4d74c72a 100644 (file)
   name: signal-port-name-trigger
   description: signal-port-description-trigger
 
+- type: sinkPort
+  id: Timer
+  name: signal-port-name-timer
+  description: signal-port-description-timer
+
 - type: sinkPort
   id: OrderReceiver
   name: signal-port-name-order-receiver
index 1988f29e45c8e9ba1e11453ac8019ec10fe582fc..5c327347268493a5823824b33bdba7c63c342051 100644 (file)
@@ -2,13 +2,13 @@
   id: Pressed
   name: signal-port-name-pressed
   description: signal-port-description-pressed
-  defaultLinks: [ Toggle, Trigger ]
+  defaultLinks: [ Toggle, Trigger, Timer ]
 
 - type: sourcePort
   id: On
   name: signal-port-name-on-transmitter
   description: signal-port-description-on-transmitter
-  defaultLinks: [ On, Open, Forward, Trigger ]
+  defaultLinks: [ On, Open, Forward, Trigger, Timer ]
 
 - type: sourcePort
   id: Off
   id: Left
   name: signal-port-name-left
   description: signal-port-description-left
-  defaultLinks: [ On, Open, Forward, Trigger ]
+  defaultLinks: [ On, Open, Forward, Trigger, Timer ]
 
 - type: sourcePort
   id: Right
   name: signal-port-name-right
   description: signal-port-description-right
-  defaultLinks: [ On, Open, Reverse, Trigger ]
+  defaultLinks: [ On, Open, Reverse, Trigger, Timer ]
 
 - type: sourcePort
   id: Middle
@@ -76,7 +76,7 @@
   id: Timer
   name: signal-port-name-timer-trigger
   description: signal-port-description-timer-trigger
-  defaultLinks: [ AutoClose, On, Open, Forward, Trigger ]
+  defaultLinks: [ AutoClose, On, Open, Forward, Trigger, Timer ]
 
 - type: sourcePort
   id: Start
@@ -94,7 +94,7 @@
   id: OutputHigh
   name: signal-port-name-logic-output-high
   description: signal-port-description-logic-output-high
-  defaultLinks: [ On, Open, Forward, Trigger ]
+  defaultLinks: [ On, Open, Forward, Trigger, Timer ]
 
 - type: sourcePort
   id: OutputLow
index 772dd15ab80c211ac92e85e8456d77e684922dd0..87b6bb2534113d3bd8102b278cebde2cbe21ca6e 100644 (file)
     beepSound: /Audio/Machines/Nuke/general_beep.ogg
     startOnStick: true
     canToggleStartOnStick: true
-  - type: TriggerOnSignal
+  - type: TimerStartOnSignal
   - type: DeviceLinkSink
     ports:
-      - Trigger
+      - Timer
   - type: Explosive # Powerful explosion in a very small radius. Doesn't break underplating.
     explosionType: DemolitionCharge
     totalIntensity: 60