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