using Robust.Shared.GameStates; using Robust.Shared.Map; using Robust.Shared.Serialization; namespace Content.Shared.Atmos.Components; [RegisterComponent, NetworkedComponent] public sealed class GasAnalyzerComponent : Component { [ViewVariables] public EntityUid? Target; [ViewVariables] public EntityUid User; [ViewVariables(VVAccess.ReadWrite)] public EntityCoordinates? LastPosition; [DataField("enabled"), ViewVariables(VVAccess.ReadWrite)] public bool Enabled; [Serializable, NetSerializable] public enum GasAnalyzerUiKey { Key, } /// /// Atmospheric data is gathered in the system and sent to the user /// [Serializable, NetSerializable] public sealed class GasAnalyzerUserMessage : BoundUserInterfaceMessage { public string DeviceName; public EntityUid DeviceUid; public bool DeviceFlipped; public string? Error; public GasMixEntry[] NodeGasMixes; public GasAnalyzerUserMessage(GasMixEntry[] nodeGasMixes, string deviceName, EntityUid deviceUid, bool deviceFlipped, string? error = null) { NodeGasMixes = nodeGasMixes; DeviceName = deviceName; DeviceUid = deviceUid; DeviceFlipped = deviceFlipped; Error = error; } } /// /// Contains information on a gas mix entry, turns into a tab in the UI /// [Serializable, NetSerializable] public struct GasMixEntry { /// /// Name of the tab in the UI /// public readonly string Name; public readonly float Pressure; public readonly float Temperature; public readonly GasEntry[]? Gases; public GasMixEntry(string name, float pressure, float temperature, GasEntry[]? gases = null) { Name = name; Pressure = pressure; Temperature = temperature; Gases = gases; } } /// /// Individual gas entry data for populating the UI /// [Serializable, NetSerializable] public struct GasEntry { public readonly string Name; public readonly float Amount; public readonly string Color; public GasEntry(string name, float amount, string color) { Name = name; Amount = amount; Color = color; } public override string ToString() { // e.g. "Plasma: 2000 mol" return Loc.GetString( "gas-entry-info", ("gasName", Name), ("gasAmount", Amount)); } } [Serializable, NetSerializable] public sealed class GasAnalyzerDisableMessage : BoundUserInterfaceMessage { } } [Serializable, NetSerializable] public enum GasAnalyzerVisuals : byte { Enabled, }