signaller can be used as a payload (#14827)

Co-authored-by: deltanedas <@deltanedas:kde.org>
This commit is contained in:
deltanedas
2023-04-23 03:17:59 +00:00
committed by GitHub
parent 1d13aafca0
commit 47e4ed0374
2 changed files with 43 additions and 22 deletions

View File

@@ -1,31 +1,49 @@
using Content.Server.Explosion.EntitySystems;
using Content.Server.MachineLinking.Components; using Content.Server.MachineLinking.Components;
using JetBrains.Annotations;
using Content.Shared.Interaction.Events; 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] [Dependency] private readonly SignalLinkerSystem _signal = default!;
public sealed class SignallerSystem : EntitySystem [Dependency] private readonly UseDelaySystem _useDelay = default!;
public override void Initialize()
{ {
[Dependency] private readonly SignalLinkerSystem _signalSystem = default!; base.Initialize();
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<SignallerComponent, ComponentInit>(OnInit);
SubscribeLocalEvent<SignallerComponent, UseInHandEvent>(OnUseInHand);
}
private void OnInit(EntityUid uid, SignallerComponent component, ComponentInit args) SubscribeLocalEvent<SignallerComponent, ComponentInit>(OnInit);
{ SubscribeLocalEvent<SignallerComponent, UseInHandEvent>(OnUseInHand);
_signalSystem.EnsureTransmitterPorts(uid, component.Port); SubscribeLocalEvent<SignallerComponent, TriggerEvent>(OnTrigger);
} }
private void OnUseInHand(EntityUid uid, SignallerComponent component, UseInHandEvent args) private void OnInit(EntityUid uid, SignallerComponent component, ComponentInit args)
{ {
if (args.Handled) _signal.EnsureTransmitterPorts(uid, component.Port);
return; }
_signalSystem.InvokePort(uid, component.Port);
args.Handled = true; private void OnUseInHand(EntityUid uid, SignallerComponent component, UseInHandEvent args)
} {
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;
} }
} }

View File

@@ -16,3 +16,6 @@
- type: SignalTransmitter - type: SignalTransmitter
outputs: outputs:
Pressed: [] Pressed: []
- type: Tag
tags:
- Payload