using Content.Shared.DeviceNetwork; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; namespace Content.Shared.SurveillanceCamera.Components; [RegisterComponent, NetworkedComponent, AutoGenerateComponentState] [Access(typeof(SharedSurveillanceCameraSystem))] public sealed partial class SurveillanceCameraComponent : Component { /// /// List of active viewers who have a PVS view subscription on this camera. /// This is for bookkeeping purposes, /// so that when a camera shuts down, any entity viewing it /// will immediately have their subscription revoked. /// [ViewVariables] public HashSet ActivePvsViewers { get; } = new(); /// /// Monitors != Viewers, as viewers are entities that are tied /// to a player session that's viewing from this camera /// /// Monitors are grouped sets of viewers, and may be /// completely different monitor types (e.g., monitor console, /// AI, etc.) /// [ViewVariables] public HashSet ActiveMonitors { get; } = new(); // If this camera is active or not. Deactivating a camera // will not allow it to obtain any new viewers. [DataField] public bool Active = true; // This one isn't easy to deal with. Will require a UI // to change/set this so mapping these in isn't // the most terrible thing possible. [DataField("id")] public string CameraId = "camera"; /// /// If true, instead of showing the camera id it will show the entity name /// [DataField] public bool UseEntityNameAsCameraId = false; [DataField, AutoNetworkedField] public bool NameSet; [DataField, AutoNetworkedField] public bool NetworkSet; // This has to be device network frequency prototypes. [DataField("setupAvailableNetworks")] public List> AvailableNetworks { get; private set; } = new(); }