diff --git a/Content.Client/Atmos/UI/GasCanisterBoundUserInterface.cs b/Content.Client/Atmos/UI/GasCanisterBoundUserInterface.cs index d67d64fb05..c1f4d5205d 100644 --- a/Content.Client/Atmos/UI/GasCanisterBoundUserInterface.cs +++ b/Content.Client/Atmos/UI/GasCanisterBoundUserInterface.cs @@ -32,7 +32,7 @@ namespace Content.Client.Atmos.UI _window.OnClose += Close; _window.ReleaseValveCloseButtonPressed += OnReleaseValveClosePressed; _window.ReleaseValveOpenButtonPressed += OnReleaseValveOpenPressed; - _window.ReleasePressureSliderChanged += OnReleasePressurePressed; + _window.ReleasePressureSet += OnReleasePressureSet; _window.TankEjectButtonPressed += OnTankEjectPressed; } @@ -41,7 +41,7 @@ namespace Content.Client.Atmos.UI SendMessage(new GasCanisterHoldingTankEjectMessage()); } - private void OnReleasePressurePressed(float value) + private void OnReleasePressureSet(float value) { SendMessage(new GasCanisterChangeReleasePressureMessage(value)); } diff --git a/Content.Client/Atmos/UI/GasCanisterWindow.xaml b/Content.Client/Atmos/UI/GasCanisterWindow.xaml index 36e9621d68..f76e32a31d 100644 --- a/Content.Client/Atmos/UI/GasCanisterWindow.xaml +++ b/Content.Client/Atmos/UI/GasCanisterWindow.xaml @@ -37,7 +37,7 @@ - diff --git a/Content.Client/Atmos/UI/GasCanisterWindow.xaml.cs b/Content.Client/Atmos/UI/GasCanisterWindow.xaml.cs index 69fc5a73aa..b21aa737ac 100644 --- a/Content.Client/Atmos/UI/GasCanisterWindow.xaml.cs +++ b/Content.Client/Atmos/UI/GasCanisterWindow.xaml.cs @@ -1,9 +1,11 @@ using System; using Robust.Client.AutoGenerated; +using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; using Robust.Client.UserInterface.XAML; -using Robust.Shared.Localization; +using Robust.Shared.Input; +using Range = Robust.Client.UserInterface.Controls.Range; namespace Content.Client.Atmos.UI { @@ -16,7 +18,7 @@ namespace Content.Client.Atmos.UI private readonly ButtonGroup _buttonGroup = new(); public event Action? TankEjectButtonPressed; - public event Action? ReleasePressureSliderChanged; + public event Action? ReleasePressureSet; public event Action? ReleaseValveCloseButtonPressed; public event Action? ReleaseValveOpenButtonPressed; @@ -31,7 +33,30 @@ namespace Content.Client.Atmos.UI ReleaseValveOpenButton.OnPressed += _ => ReleaseValveOpenButtonPressed?.Invoke(); TankEjectButton.OnPressed += _ => TankEjectButtonPressed?.Invoke(); - ReleasePressureSlider.OnValueChanged += r => ReleasePressureSliderChanged?.Invoke(r.Value); + ReleasePressureSlider.OnKeyBindUp += OnReleasePressureSliderReleased; + ReleasePressureSlider.OnValueChanged += OnReleasePressureSliderChanged; + ReleasePressure.OnValueChanged += OnReleasePressureChanged; + } + + private void OnReleasePressureChanged(FloatSpinBox.FloatSpinBoxEventArgs args) + { + var value = Math.Clamp(args.Value, ReleasePressureSlider.MinValue, ReleasePressureSlider.MaxValue); + + ReleasePressureSlider.SetValueWithoutEvent(value); + ReleasePressureSet?.Invoke(value); + } + + private void OnReleasePressureSliderChanged(Range range) + { + ReleasePressure.Value = range.Value; + } + + private void OnReleasePressureSliderReleased(GUIBoundKeyEventArgs args) + { + if (args.Function != EngineKeyFunctions.UIClick) + return; + + ReleasePressureSet?.Invoke(ReleasePressureSlider.Value); } public void SetCanisterLabel(string label) @@ -82,9 +107,12 @@ namespace Content.Client.Atmos.UI public void SetReleasePressure(float pressure) { + if (MathHelper.CloseTo(pressure, ReleasePressure.Value)) + return; + if(!ReleasePressureSlider.Grabbed) ReleasePressureSlider.SetValueWithoutEvent(pressure); - ReleasePressureLabel.Text = Loc.GetString("comp-gas-canister-ui-pressure", ("pressure", Math.Round(pressure))); + ReleasePressure.Value = pressure; } public void SetReleaseValve(bool valve) diff --git a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasCanisterSystem.cs b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasCanisterSystem.cs index 240cf54a62..c65265fdfb 100644 --- a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasCanisterSystem.cs +++ b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasCanisterSystem.cs @@ -191,12 +191,12 @@ namespace Content.Server.Atmos.Piping.Unary.EntitySystems } } - DirtyUI(uid, canister, nodeContainer, containerManager); - // If last pressure is very close to the current pressure, do nothing. if (MathHelper.CloseToPercent(canister.Air.Pressure, canister.LastPressure)) return; + DirtyUI(uid, canister, nodeContainer, containerManager); + canister.LastPressure = canister.Air.Pressure; if (canister.Air.Pressure < 10) diff --git a/Resources/Locale/en-US/components/gas-canister-component.ftl b/Resources/Locale/en-US/components/gas-canister-component.ftl index 437cffef05..6e6b4b5e99 100644 --- a/Resources/Locale/en-US/components/gas-canister-component.ftl +++ b/Resources/Locale/en-US/components/gas-canister-component.ftl @@ -13,7 +13,7 @@ comp-gas-canister-ui-holding-tank-pressure = Tank Pressure: comp-gas-canister-ui-holding-tank-eject = Eject comp-gas-canister-ui-release-valve-status = Release Valve Status -comp-gas-canister-ui-release-pressure = Release Pressure: +comp-gas-canister-ui-release-pressure = Release Pressure (kPa): comp-gas-canister-ui-release-valve = Release Valve: comp-gas-canister-ui-release-valve-open = Open comp-gas-canister-ui-release-valve-close = Close