{
SubscribeLocalEvent<SurveillanceCameraMonitorComponent, SurveillanceCameraDeactivateEvent>(OnSurveillanceCameraDeactivate);
SubscribeLocalEvent<SurveillanceCameraMonitorComponent, PowerChangedEvent>(OnPowerChanged);
+ SubscribeLocalEvent<SurveillanceCameraMonitorComponent, ComponentShutdown>(OnShutdown);
SubscribeLocalEvent<SurveillanceCameraMonitorComponent, DeviceNetworkPacketEvent>(OnPacketReceived);
SubscribeLocalEvent<SurveillanceCameraMonitorComponent, ComponentStartup>(OnComponentStartup);
SubscribeLocalEvent<SurveillanceCameraMonitorComponent, AfterActivatableUIOpenEvent>(OnToggleInterface);
}
}
+ private void OnShutdown(EntityUid uid, SurveillanceCameraMonitorComponent component, ComponentShutdown args)
+ {
+ RemoveActiveCamera(uid, component);
+ }
+
+
private void OnToggleInterface(EntityUid uid, SurveillanceCameraMonitorComponent component,
AfterActivatableUIOpenEvent args)
{
{
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.
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)
{
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)