From 94c8018ff3342e949dd6a605fb96c942069857b9 Mon Sep 17 00:00:00 2001 From: Saphire Lattice Date: Fri, 4 Oct 2024 15:34:48 +0600 Subject: [PATCH] Change the syndicate charge to start a timer on signal (#32423) * Change the syndicate charge to start a timer on signal * Actually add the component in question * Add default link for TimerStart signal --- .../Components/TimerStartOnSignalComponent.cs | 15 +++++++++++++++ .../EntitySystems/TriggerSystem.Signal.cs | 15 +++++++++++++++ .../en-US/machine-linking/receiver_ports.ftl | 3 +++ Resources/Prototypes/DeviceLinking/sink_ports.yml | 5 +++++ .../Prototypes/DeviceLinking/source_ports.yml | 12 ++++++------ .../Entities/Objects/Weapons/Bombs/plastic.yml | 4 ++-- 6 files changed, 46 insertions(+), 8 deletions(-) create mode 100644 Content.Server/Explosion/Components/TimerStartOnSignalComponent.cs diff --git a/Content.Server/Explosion/Components/TimerStartOnSignalComponent.cs b/Content.Server/Explosion/Components/TimerStartOnSignalComponent.cs new file mode 100644 index 0000000000..9adc6dab87 --- /dev/null +++ b/Content.Server/Explosion/Components/TimerStartOnSignalComponent.cs @@ -0,0 +1,15 @@ +using Content.Shared.DeviceLinking; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; + +namespace Content.Server.Explosion.Components +{ + /// + /// Sends a trigger when signal is received. + /// + [RegisterComponent] + public sealed partial class TimerStartOnSignalComponent : Component + { + [DataField("port", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string Port = "Timer"; + } +} diff --git a/Content.Server/Explosion/EntitySystems/TriggerSystem.Signal.cs b/Content.Server/Explosion/EntitySystems/TriggerSystem.Signal.cs index ffd47f0257..ce4d201f28 100644 --- a/Content.Server/Explosion/EntitySystems/TriggerSystem.Signal.cs +++ b/Content.Server/Explosion/EntitySystems/TriggerSystem.Signal.cs @@ -11,6 +11,9 @@ namespace Content.Server.Explosion.EntitySystems { SubscribeLocalEvent(OnSignalReceived); SubscribeLocalEvent(OnInit); + + SubscribeLocalEvent(OnTimerSignalReceived); + SubscribeLocalEvent(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); + } } } diff --git a/Resources/Locale/en-US/machine-linking/receiver_ports.ftl b/Resources/Locale/en-US/machine-linking/receiver_ports.ftl index a0d2fd3ec4..d7a2636e11 100644 --- a/Resources/Locale/en-US/machine-linking/receiver_ports.ftl +++ b/Resources/Locale/en-US/machine-linking/receiver_ports.ftl @@ -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 diff --git a/Resources/Prototypes/DeviceLinking/sink_ports.yml b/Resources/Prototypes/DeviceLinking/sink_ports.yml index 339b814175..a5313fcc4e 100644 --- a/Resources/Prototypes/DeviceLinking/sink_ports.yml +++ b/Resources/Prototypes/DeviceLinking/sink_ports.yml @@ -48,6 +48,11 @@ 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 diff --git a/Resources/Prototypes/DeviceLinking/source_ports.yml b/Resources/Prototypes/DeviceLinking/source_ports.yml index 1988f29e45..5c32734726 100644 --- a/Resources/Prototypes/DeviceLinking/source_ports.yml +++ b/Resources/Prototypes/DeviceLinking/source_ports.yml @@ -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 @@ -25,13 +25,13 @@ 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 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Bombs/plastic.yml b/Resources/Prototypes/Entities/Objects/Weapons/Bombs/plastic.yml index 772dd15ab8..87b6bb2534 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Bombs/plastic.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Bombs/plastic.yml @@ -54,10 +54,10 @@ 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 -- 2.51.2