using Content.Shared.Atmos.Piping.Binary.Components; using JetBrains.Annotations; using Robust.Client.GameObjects; using Robust.Shared.GameObjects; namespace Content.Client.Atmos.UI { /// /// Initializes a and updates it when new server messages are received. /// [UsedImplicitly] public sealed class GasCanisterBoundUserInterface : BoundUserInterface { private GasCanisterWindow? _window; public GasCanisterBoundUserInterface(ClientUserInterfaceComponent owner, object uiKey) : base(owner, uiKey) { } protected override void Open() { base.Open(); _window = new GasCanisterWindow(); if(State != null) UpdateState(State); _window.OpenCentered(); _window.OnClose += Close; _window.ReleaseValveCloseButtonPressed += OnReleaseValveClosePressed; _window.ReleaseValveOpenButtonPressed += OnReleaseValveOpenPressed; _window.ReleasePressureSet += OnReleasePressureSet; _window.TankEjectButtonPressed += OnTankEjectPressed; } private void OnTankEjectPressed() { SendMessage(new GasCanisterHoldingTankEjectMessage()); } private void OnReleasePressureSet(float value) { SendMessage(new GasCanisterChangeReleasePressureMessage(value)); } private void OnReleaseValveOpenPressed() { SendMessage(new GasCanisterChangeReleaseValveMessage(true)); } private void OnReleaseValveClosePressed() { SendMessage(new GasCanisterChangeReleaseValveMessage(false)); } /// /// Update the UI state based on server-sent info /// /// protected override void UpdateState(BoundUserInterfaceState state) { base.UpdateState(state); if (_window == null || state is not GasCanisterBoundUserInterfaceState cast) return; _window.SetCanisterLabel(cast.CanisterLabel); _window.SetCanisterPressure(cast.CanisterPressure); _window.SetPortStatus(cast.PortStatus); _window.SetTankLabel(cast.TankLabel); _window.SetTankPressure(cast.TankPressure); _window.SetReleasePressureRange(cast.ReleasePressureMin, cast.ReleasePressureMax); _window.SetReleasePressure(cast.ReleasePressure); _window.SetReleaseValve(cast.ReleaseValve); } protected override void Dispose(bool disposing) { base.Dispose(disposing); if (!disposing) return; _window?.Dispose(); } } }