// SPDX-FileCopyrightText: 2024 gluesniffler <159397573+gluesniffler@users.noreply.github.com> // SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com> // // SPDX-License-Identifier: AGPL-3.0-or-later using Content.Server.Emp; using Content.Shared.Body.Part; using Content.Shared.Body.Organ; using Content.Shared._Shitmed.Body.Organ; using Content.Shared._Shitmed.Body.Events; using Content.Shared._Shitmed.Cybernetics; namespace Content.Server._Shitmed.Cybernetics; internal sealed class CyberneticsSystem : EntitySystem { public override void Initialize() { SubscribeLocalEvent(OnEmpPulse); SubscribeLocalEvent(OnEmpDisabledRemoved); } private void OnEmpPulse(Entity cyberEnt, ref EmpPulseEvent ev) { if (!cyberEnt.Comp.Disabled) { ev.Affected = true; ev.Disabled = true; cyberEnt.Comp.Disabled = true; if (HasComp(cyberEnt)) { var disableEvent = new OrganEnableChangedEvent(false); RaiseLocalEvent(cyberEnt, ref disableEvent); } else if (HasComp(cyberEnt)) { var disableEvent = new BodyPartEnableChangedEvent(false); RaiseLocalEvent(cyberEnt, ref disableEvent); } } } private void OnEmpDisabledRemoved(Entity cyberEnt, ref EmpDisabledRemoved ev) { if (cyberEnt.Comp.Disabled) { cyberEnt.Comp.Disabled = false; if (HasComp(cyberEnt)) { var enableEvent = new OrganEnableChangedEvent(true); RaiseLocalEvent(cyberEnt, ref enableEvent); } else if (HasComp(cyberEnt)) { var enableEvent = new BodyPartEnableChangedEvent(true); RaiseLocalEvent(cyberEnt, ref enableEvent); } } } }