using Content.Server.DeviceLinking.Components; using Content.Server.DeviceLinking.Events; using Content.Shared.Weapons.Ranged.Components; using Content.Shared.Weapons.Ranged.Systems; using Robust.Shared.Map; using System.Numerics; namespace Content.Server.DeviceLinking.Systems; public sealed partial class GunSignalControlSystem : EntitySystem { [Dependency] private readonly DeviceLinkSystem _signalSystem = default!; [Dependency] private readonly SharedGunSystem _gun = default!; public override void Initialize() { SubscribeLocalEvent(OnInit); SubscribeLocalEvent(OnSignalReceived); } private void OnInit(Entity gunControl, ref MapInitEvent args) { _signalSystem.EnsureSinkPorts(gunControl, gunControl.Comp.TriggerPort, gunControl.Comp.TogglePort, gunControl.Comp.OnPort, gunControl.Comp.OffPort); } private void OnSignalReceived(Entity gunControl, ref SignalReceivedEvent args) { if (!TryComp(gunControl, out var gun)) return; if (args.Port == gunControl.Comp.TriggerPort) _gun.AttemptShoot(gunControl, gun); if (!TryComp(gunControl, out var autoShoot)) return; if (args.Port == gunControl.Comp.TogglePort) _gun.SetEnabled(gunControl, autoShoot, !autoShoot.Enabled); if (args.Port == gunControl.Comp.OnPort) _gun.SetEnabled(gunControl, autoShoot, true); if (args.Port == gunControl.Comp.OffPort) _gun.SetEnabled(gunControl, autoShoot, false); } }