using System.Collections.Generic; using Content.Server.Power.Components; using Content.Shared.Atmos.Monitor; using Robust.Shared.GameObjects; using Robust.Shared.Serialization.Manager.Attributes; using Robust.Shared.ViewVariables; namespace Content.Server.Atmos.Monitor.Components { // AtmosAlarmables are entities that can be alarmed // by a linked AtmosMonitor (alarmer?) if a threshold // is passed in some way. The intended use is to // do something in case something dangerous happens, // e.g., activate firelocks in case a temperature // threshold is reached // // It goes: // // AtmosMonitor -> AtmosDeviceUpdateEvent // -> Threshold calculation // -> AtmosMonitorAlarmEvent // -> Everything linked to that monitor (targetted) /// /// A component to add to device network devices if you want them to be alarmed /// by an atmospheric monitor. /// [RegisterComponent] public class AtmosAlarmableComponent : Component { public override string Name => "AtmosAlarmable"; [ViewVariables] public List LinkedMonitors { get; set; } = new(); [ViewVariables] public AtmosMonitorAlarmType LastAlarmState = AtmosMonitorAlarmType.Normal; [ViewVariables] public AtmosMonitorAlarmType HighestNetworkState = AtmosMonitorAlarmType.Normal; [ViewVariables] public bool IgnoreAlarms { get; set; } = false; /// /// List of prototypes that this alarmable can be /// alarmed by - must be a prototype with AtmosMonitor /// attached to it /// [DataField("alarmedBy")] public List AlarmedByPrototypes { get; } = new(); } }