From: godisdeadLOL <169250097+godisdeadLOL@users.noreply.github.com> Date: Mon, 9 Sep 2024 19:23:57 +0000 (+0300) Subject: Surveillance camera's red light fixes (#31831) X-Git-Url: https://git.smokeofanarchy.ru/gitweb.cgi?a=commitdiff_plain;h=7929f897c9c48dcbf61a5982050dc810fb561eed;p=space-station-14.git Surveillance camera's red light fixes (#31831) several surv camera related fixes Co-authored-by: YourUsername --- diff --git a/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraMonitorSystem.cs b/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraMonitorSystem.cs index 5e50740ae6..21e71c4316 100644 --- a/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraMonitorSystem.cs +++ b/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraMonitorSystem.cs @@ -21,6 +21,7 @@ public sealed class SurveillanceCameraMonitorSystem : EntitySystem { SubscribeLocalEvent(OnSurveillanceCameraDeactivate); SubscribeLocalEvent(OnPowerChanged); + SubscribeLocalEvent(OnShutdown); SubscribeLocalEvent(OnPacketReceived); SubscribeLocalEvent(OnComponentStartup); SubscribeLocalEvent(OnToggleInterface); @@ -196,6 +197,12 @@ public sealed class SurveillanceCameraMonitorSystem : EntitySystem } } + private void OnShutdown(EntityUid uid, SurveillanceCameraMonitorComponent component, ComponentShutdown args) + { + RemoveActiveCamera(uid, component); + } + + private void OnToggleInterface(EntityUid uid, SurveillanceCameraMonitorComponent component, AfterActivatableUIOpenEvent args) { diff --git a/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraSystem.cs b/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraSystem.cs index 9d1dd00590..f1d1b58bf5 100644 --- a/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraSystem.cs +++ b/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraSystem.cs @@ -321,6 +321,13 @@ public sealed class SurveillanceCameraSystem : EntitySystem { AddActiveViewer(camera, player, monitor, component); } + + // Add monitor without viewers + if (players.Count == 0 && monitor != null) + { + component.ActiveMonitors.Add(monitor.Value); + UpdateVisuals(camera, component); + } } // Switch the set of active viewers from one camera to another. @@ -349,13 +356,12 @@ public sealed class SurveillanceCameraSystem : EntitySystem public void RemoveActiveViewer(EntityUid camera, EntityUid player, EntityUid? monitor = null, SurveillanceCameraComponent? component = null, ActorComponent? actor = null) { - if (!Resolve(camera, ref component) - || !Resolve(player, ref actor)) - { + if (!Resolve(camera, ref component)) return; - } - _viewSubscriberSystem.RemoveViewSubscriber(camera, actor.PlayerSession); + if (Resolve(player, ref actor)) + _viewSubscriberSystem.RemoveViewSubscriber(camera, actor.PlayerSession); + component.ActiveViewers.Remove(player); if (monitor != null) @@ -377,6 +383,13 @@ public sealed class SurveillanceCameraSystem : EntitySystem { RemoveActiveViewer(camera, player, monitor, component); } + + // Even if not removing any viewers, remove the monitor + if (players.Count == 0 && monitor != null) + { + component.ActiveMonitors.Remove(monitor.Value); + UpdateVisuals(camera, component); + } } private void UpdateVisuals(EntityUid uid, SurveillanceCameraComponent? component = null, AppearanceComponent? appearance = null)