CyberneticsSystem.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. // SPDX-FileCopyrightText: 2024 gluesniffler <159397573+gluesniffler@users.noreply.github.com>
  2. // SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com>
  3. //
  4. // SPDX-License-Identifier: AGPL-3.0-or-later
  5. using Content.Server.Emp;
  6. using Content.Shared.Body.Part;
  7. using Content.Shared.Body.Organ;
  8. using Content.Shared._Shitmed.Body.Organ;
  9. using Content.Shared._Shitmed.Body.Events;
  10. using Content.Shared._Shitmed.Cybernetics;
  11. namespace Content.Server._Shitmed.Cybernetics;
  12. internal sealed class CyberneticsSystem : EntitySystem
  13. {
  14. public override void Initialize()
  15. {
  16. SubscribeLocalEvent<CyberneticsComponent, EmpPulseEvent>(OnEmpPulse);
  17. SubscribeLocalEvent<CyberneticsComponent, EmpDisabledRemoved>(OnEmpDisabledRemoved);
  18. }
  19. private void OnEmpPulse(Entity<CyberneticsComponent> cyberEnt, ref EmpPulseEvent ev)
  20. {
  21. if (!cyberEnt.Comp.Disabled)
  22. {
  23. ev.Affected = true;
  24. ev.Disabled = true;
  25. cyberEnt.Comp.Disabled = true;
  26. if (HasComp<OrganComponent>(cyberEnt))
  27. {
  28. var disableEvent = new OrganEnableChangedEvent(false);
  29. RaiseLocalEvent(cyberEnt, ref disableEvent);
  30. }
  31. else if (HasComp<BodyPartComponent>(cyberEnt))
  32. {
  33. var disableEvent = new BodyPartEnableChangedEvent(false);
  34. RaiseLocalEvent(cyberEnt, ref disableEvent);
  35. }
  36. }
  37. }
  38. private void OnEmpDisabledRemoved(Entity<CyberneticsComponent> cyberEnt, ref EmpDisabledRemoved ev)
  39. {
  40. if (cyberEnt.Comp.Disabled)
  41. {
  42. cyberEnt.Comp.Disabled = false;
  43. if (HasComp<OrganComponent>(cyberEnt))
  44. {
  45. var enableEvent = new OrganEnableChangedEvent(true);
  46. RaiseLocalEvent(cyberEnt, ref enableEvent);
  47. }
  48. else if (HasComp<BodyPartComponent>(cyberEnt))
  49. {
  50. var enableEvent = new BodyPartEnableChangedEvent(true);
  51. RaiseLocalEvent(cyberEnt, ref enableEvent);
  52. }
  53. }
  54. }
  55. }