using Content.Shared.Trigger.Components.Triggers; using Content.Shared.Trigger.Components.Effects; using Content.Shared.DeviceLinking.Events; namespace Content.Shared.Trigger.Systems; public sealed partial class TriggerSystem { private void InitializeSignal() { SubscribeLocalEvent(SignalOnTriggerInit); SubscribeLocalEvent(TriggerOnSignalInit); SubscribeLocalEvent(HandleSignalOnTrigger); SubscribeLocalEvent(OnSignalReceived); } private void SignalOnTriggerInit(Entity ent, ref ComponentInit args) { _deviceLink.EnsureSourcePorts(ent.Owner, ent.Comp.Port); } private void TriggerOnSignalInit(Entity ent, ref ComponentInit args) { _deviceLink.EnsureSinkPorts(ent.Owner, ent.Comp.Port); } private void HandleSignalOnTrigger(Entity ent, ref TriggerEvent args) { if (args.Key != null && !ent.Comp.KeysIn.Contains(args.Key)) return; _deviceLink.InvokePort(ent.Owner, ent.Comp.Port); args.Handled = true; } private void OnSignalReceived(Entity ent, ref SignalReceivedEvent args) { if (args.Port != ent.Comp.Port) return; Trigger(ent.Owner, args.Trigger, ent.Comp.KeyOut); } }