AutodocSystem.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. // SPDX-FileCopyrightText: 2024 Piras314 <p1r4s@proton.me>
  2. // SPDX-FileCopyrightText: 2024 deltanedas <39013340+deltanedas@users.noreply.github.com>
  3. // SPDX-FileCopyrightText: 2024 deltanedas <@deltanedas:kde.org>
  4. // SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com>
  5. //
  6. // SPDX-License-Identifier: AGPL-3.0-or-later
  7. using Content.Server.Body.Components;
  8. using Content.Server.Body.Systems;
  9. using Content.Server.Chat.Systems;
  10. using Content.Shared.DoAfter;
  11. using Content.Shared.Power.EntitySystems;
  12. using Content.Shared._Shitmed.Autodoc.Components;
  13. using Content.Shared._Shitmed.Autodoc.Systems;
  14. namespace Content.Server._Shitmed.Autodoc.Systems;
  15. public sealed class AutodocSystem : SharedAutodocSystem
  16. {
  17. [Dependency] private readonly InternalsSystem _internals = default!;
  18. [Dependency] private readonly ChatSystem _chat = default!;
  19. [Dependency] private readonly SharedPowerReceiverSystem _power = default!;
  20. public override void Update(float frameTime)
  21. {
  22. base.Update(frameTime);
  23. var query = EntityQueryEnumerator<ActiveAutodocComponent, AutodocComponent>();
  24. var now = Timing.CurTime;
  25. while (query.MoveNext(out var uid, out var active, out var comp))
  26. {
  27. if (now < active.NextUpdate)
  28. continue;
  29. active.NextUpdate = now + comp.UpdateDelay;
  30. if (HasComp<ActiveDoAfterComponent>(uid) || !_power.IsPowered(uid))
  31. continue;
  32. if (Proceed((uid, comp, active)))
  33. RemCompDeferred<ActiveAutodocComponent>(uid);
  34. }
  35. }
  36. protected override void WakePatient(EntityUid patient)
  37. {
  38. // incase they are using nitrous, disconnect it so they can get woken up later on
  39. if (TryComp<InternalsComponent>(patient, out var internals) && _internals.AreInternalsWorking(patient, internals))
  40. _internals.DisconnectTank((patient, internals));
  41. base.WakePatient(patient);
  42. }
  43. public override void Say(EntityUid uid, string msg)
  44. {
  45. _chat.TrySendInGameICMessage(uid, msg, InGameICChatType.Speak, hideChat: false, hideLog: true, checkRadioPrefix: false);
  46. }
  47. }