Add 'auto mode' button to the air alarm ui (#17874)

Signed-off-by: c4llv07e <kseandi@gmail.com>
This commit is contained in:
c4llv07e
2023-07-09 22:22:41 +03:00
committed by GitHub
parent 9723126de5
commit 6e66866567
7 changed files with 54 additions and 8 deletions

View File

@@ -33,6 +33,7 @@ public sealed class AirAlarmBoundUserInterface : BoundUserInterface
_window.AtmosDeviceDataChanged += OnDeviceDataChanged; _window.AtmosDeviceDataChanged += OnDeviceDataChanged;
_window.AtmosAlarmThresholdChanged += OnThresholdChanged; _window.AtmosAlarmThresholdChanged += OnThresholdChanged;
_window.AirAlarmModeChanged += OnAirAlarmModeChanged; _window.AirAlarmModeChanged += OnAirAlarmModeChanged;
_window.AutoModeChanged += OnAutoModeChanged;
_window.ResyncAllRequested += ResyncAllDevices; _window.ResyncAllRequested += ResyncAllDevices;
_window.AirAlarmTabChange += OnTabChanged; _window.AirAlarmTabChange += OnTabChanged;
} }
@@ -52,6 +53,11 @@ public sealed class AirAlarmBoundUserInterface : BoundUserInterface
SendMessage(new AirAlarmUpdateAlarmModeMessage(mode)); SendMessage(new AirAlarmUpdateAlarmModeMessage(mode));
} }
private void OnAutoModeChanged(bool enabled)
{
SendMessage(new AirAlarmUpdateAutoModeMessage(enabled));
}
private void OnThresholdChanged(string address, AtmosMonitorThresholdType type, AtmosAlarmThreshold threshold, Gas? gas = null) private void OnThresholdChanged(string address, AtmosMonitorThresholdType type, AtmosAlarmThreshold threshold, Gas? gas = null)
{ {
SendMessage(new AirAlarmUpdateAlarmThresholdMessage(address, type, threshold, gas)); SendMessage(new AirAlarmUpdateAlarmThresholdMessage(address, type, threshold, gas));

View File

@@ -75,6 +75,7 @@
<BoxContainer Orientation="Horizontal"> <BoxContainer Orientation="Horizontal">
<Label Text="{Loc 'air-alarm-ui-window-mode-label'}" Margin="0 0 2 0" /> <Label Text="{Loc 'air-alarm-ui-window-mode-label'}" Margin="0 0 2 0" />
<OptionButton Name="CModeButton" HorizontalExpand="True" /> <OptionButton Name="CModeButton" HorizontalExpand="True" />
<CheckBox Name="AutoModeCheckBox" Text="{Loc 'air-alarm-ui-window-auto-mode-label'}" />
</BoxContainer> </BoxContainer>
</BoxContainer> </BoxContainer>
</ui:FancyWindow> </ui:FancyWindow>

View File

@@ -20,6 +20,7 @@ public sealed partial class AirAlarmWindow : FancyWindow
public event Action<string, IAtmosDeviceData>? AtmosDeviceDataChanged; public event Action<string, IAtmosDeviceData>? AtmosDeviceDataChanged;
public event Action<string, AtmosMonitorThresholdType, AtmosAlarmThreshold, Gas?>? AtmosAlarmThresholdChanged; public event Action<string, AtmosMonitorThresholdType, AtmosAlarmThreshold, Gas?>? AtmosAlarmThresholdChanged;
public event Action<AirAlarmMode>? AirAlarmModeChanged; public event Action<AirAlarmMode>? AirAlarmModeChanged;
public event Action<bool>? AutoModeChanged;
public event Action<string>? ResyncDeviceRequested; public event Action<string>? ResyncDeviceRequested;
public event Action? ResyncAllRequested; public event Action? ResyncAllRequested;
public event Action<AirAlarmTab>? AirAlarmTabChange; public event Action<AirAlarmTab>? AirAlarmTabChange;
@@ -44,6 +45,8 @@ public sealed partial class AirAlarmWindow : FancyWindow
private OptionButton _modes => CModeButton; private OptionButton _modes => CModeButton;
private CheckBox _autoMode => AutoModeCheckBox;
public AirAlarmWindow(BoundUserInterface owner) public AirAlarmWindow(BoundUserInterface owner)
{ {
RobustXamlLoader.Load(this); RobustXamlLoader.Load(this);
@@ -68,6 +71,11 @@ public sealed partial class AirAlarmWindow : FancyWindow
AirAlarmModeChanged!.Invoke((AirAlarmMode) args.Id); AirAlarmModeChanged!.Invoke((AirAlarmMode) args.Id);
}; };
_autoMode.OnToggled += args =>
{
AutoModeChanged!.Invoke(_autoMode.Pressed);
};
_tabContainer.SetTabTitle(0, Loc.GetString("air-alarm-ui-window-tab-vents")); _tabContainer.SetTabTitle(0, Loc.GetString("air-alarm-ui-window-tab-vents"));
_tabContainer.SetTabTitle(1, Loc.GetString("air-alarm-ui-window-tab-scrubbers")); _tabContainer.SetTabTitle(1, Loc.GetString("air-alarm-ui-window-tab-scrubbers"));
_tabContainer.SetTabTitle(2, Loc.GetString("air-alarm-ui-window-tab-sensors")); _tabContainer.SetTabTitle(2, Loc.GetString("air-alarm-ui-window-tab-sensors"));
@@ -101,6 +109,7 @@ public sealed partial class AirAlarmWindow : FancyWindow
("color", ColorForAlarm(state.AlarmType)), ("color", ColorForAlarm(state.AlarmType)),
("state", $"{state.AlarmType}"))); ("state", $"{state.AlarmType}")));
UpdateModeSelector(state.Mode); UpdateModeSelector(state.Mode);
UpdateAutoMode(state.AutoMode);
foreach (var (addr, dev) in state.DeviceData) foreach (var (addr, dev) in state.DeviceData)
{ {
UpdateDeviceData(addr, dev); UpdateDeviceData(addr, dev);
@@ -114,6 +123,11 @@ public sealed partial class AirAlarmWindow : FancyWindow
_modes.SelectId((int) mode); _modes.SelectId((int) mode);
} }
public void UpdateAutoMode(bool enabled)
{
_autoMode.Pressed = enabled;
}
public void UpdateDeviceData(string addr, IAtmosDeviceData device) public void UpdateDeviceData(string addr, IAtmosDeviceData device)
{ {
switch (device) switch (device)

View File

@@ -9,6 +9,7 @@ namespace Content.Server.Atmos.Monitor.Components;
public sealed class AirAlarmComponent : Component public sealed class AirAlarmComponent : Component
{ {
[ViewVariables] public AirAlarmMode CurrentMode { get; set; } = AirAlarmMode.Filtering; [ViewVariables] public AirAlarmMode CurrentMode { get; set; } = AirAlarmMode.Filtering;
[ViewVariables] public bool AutoMode { get; set; } = true;
// Remember to null this afterwards. // Remember to null this afterwards.
[ViewVariables] public IAirAlarmModeUpdate? CurrentModeUpdater { get; set; } [ViewVariables] public IAirAlarmModeUpdate? CurrentModeUpdater { get; set; }

View File

@@ -157,6 +157,7 @@ public sealed class AirAlarmSystem : EntitySystem
SubscribeLocalEvent<AirAlarmComponent, PowerChangedEvent>(OnPowerChanged); SubscribeLocalEvent<AirAlarmComponent, PowerChangedEvent>(OnPowerChanged);
SubscribeLocalEvent<AirAlarmComponent, AirAlarmResyncAllDevicesMessage>(OnResyncAll); SubscribeLocalEvent<AirAlarmComponent, AirAlarmResyncAllDevicesMessage>(OnResyncAll);
SubscribeLocalEvent<AirAlarmComponent, AirAlarmUpdateAlarmModeMessage>(OnUpdateAlarmMode); SubscribeLocalEvent<AirAlarmComponent, AirAlarmUpdateAlarmModeMessage>(OnUpdateAlarmMode);
SubscribeLocalEvent<AirAlarmComponent, AirAlarmUpdateAutoModeMessage>(OnUpdateAutoMode);
SubscribeLocalEvent<AirAlarmComponent, AirAlarmUpdateAlarmThresholdMessage>(OnUpdateThreshold); SubscribeLocalEvent<AirAlarmComponent, AirAlarmUpdateAlarmThresholdMessage>(OnUpdateThreshold);
SubscribeLocalEvent<AirAlarmComponent, AirAlarmUpdateDeviceDataMessage>(OnUpdateDeviceData); SubscribeLocalEvent<AirAlarmComponent, AirAlarmUpdateDeviceDataMessage>(OnUpdateDeviceData);
SubscribeLocalEvent<AirAlarmComponent, AirAlarmTabSetMessage>(OnTabChange); SubscribeLocalEvent<AirAlarmComponent, AirAlarmTabSetMessage>(OnTabChange);
@@ -273,6 +274,12 @@ public sealed class AirAlarmSystem : EntitySystem
UpdateUI(uid, component); UpdateUI(uid, component);
} }
private void OnUpdateAutoMode(EntityUid uid, AirAlarmComponent component, AirAlarmUpdateAutoModeMessage args)
{
component.AutoMode = args.Enabled;
UpdateUI(uid, component);
}
private void OnUpdateThreshold(EntityUid uid, AirAlarmComponent component, AirAlarmUpdateAlarmThresholdMessage args) private void OnUpdateThreshold(EntityUid uid, AirAlarmComponent component, AirAlarmUpdateAlarmThresholdMessage args)
{ {
if (AccessCheck(uid, args.Session.AttachedEntity, component)) if (AccessCheck(uid, args.Session.AttachedEntity, component))
@@ -317,6 +324,8 @@ public sealed class AirAlarmSystem : EntitySystem
if (EntityManager.TryGetComponent(uid, out DeviceNetworkComponent? netConn)) if (EntityManager.TryGetComponent(uid, out DeviceNetworkComponent? netConn))
addr = netConn.Address; addr = netConn.Address;
if (component.AutoMode)
{
if (args.AlarmType == AtmosAlarmType.Danger) if (args.AlarmType == AtmosAlarmType.Danger)
{ {
SetMode(uid, addr, AirAlarmMode.WideFiltering, false); SetMode(uid, addr, AirAlarmMode.WideFiltering, false);
@@ -325,6 +334,7 @@ public sealed class AirAlarmSystem : EntitySystem
{ {
SetMode(uid, addr, AirAlarmMode.Filtering, false); SetMode(uid, addr, AirAlarmMode.Filtering, false);
} }
}
UpdateUI(uid, component); UpdateUI(uid, component);
} }
@@ -545,7 +555,7 @@ public sealed class AirAlarmSystem : EntitySystem
_uiSystem.TrySetUiState( _uiSystem.TrySetUiState(
uid, uid,
SharedAirAlarmInterfaceKey.Key, SharedAirAlarmInterfaceKey.Key,
new AirAlarmUIState(devNet.Address, deviceCount, pressure, temperature, dataToSend, alarm.CurrentMode, alarm.CurrentTab, highestAlarm.Value)); new AirAlarmUIState(devNet.Address, deviceCount, pressure, temperature, dataToSend, alarm.CurrentMode, alarm.CurrentTab, highestAlarm.Value, alarm.AutoMode));
} }
private const float Delay = 8f; private const float Delay = 8f;

View File

@@ -37,7 +37,7 @@ public interface IAtmosDeviceData
[Serializable, NetSerializable] [Serializable, NetSerializable]
public sealed class AirAlarmUIState : BoundUserInterfaceState public sealed class AirAlarmUIState : BoundUserInterfaceState
{ {
public AirAlarmUIState(string address, int deviceCount, float pressureAverage, float temperatureAverage, Dictionary<string, IAtmosDeviceData> deviceData, AirAlarmMode mode, AirAlarmTab tab, AtmosAlarmType alarmType) public AirAlarmUIState(string address, int deviceCount, float pressureAverage, float temperatureAverage, Dictionary<string, IAtmosDeviceData> deviceData, AirAlarmMode mode, AirAlarmTab tab, AtmosAlarmType alarmType, bool autoMode)
{ {
Address = address; Address = address;
DeviceCount = deviceCount; DeviceCount = deviceCount;
@@ -47,6 +47,7 @@ public sealed class AirAlarmUIState : BoundUserInterfaceState
Mode = mode; Mode = mode;
Tab = tab; Tab = tab;
AlarmType = alarmType; AlarmType = alarmType;
AutoMode = autoMode;
} }
public string Address { get; } public string Address { get; }
@@ -63,6 +64,7 @@ public sealed class AirAlarmUIState : BoundUserInterfaceState
public AirAlarmMode Mode { get; } public AirAlarmMode Mode { get; }
public AirAlarmTab Tab { get; } public AirAlarmTab Tab { get; }
public AtmosAlarmType AlarmType { get; } public AtmosAlarmType AlarmType { get; }
public bool AutoMode { get; }
} }
[Serializable, NetSerializable] [Serializable, NetSerializable]
@@ -91,6 +93,17 @@ public sealed class AirAlarmUpdateAlarmModeMessage : BoundUserInterfaceMessage
} }
} }
[Serializable, NetSerializable]
public sealed class AirAlarmUpdateAutoModeMessage : BoundUserInterfaceMessage
{
public bool Enabled { get; }
public AirAlarmUpdateAutoModeMessage(bool enabled)
{
Enabled = enabled;
}
}
[Serializable, NetSerializable] [Serializable, NetSerializable]
public sealed class AirAlarmUpdateDeviceDataMessage : BoundUserInterfaceMessage public sealed class AirAlarmUpdateDeviceDataMessage : BoundUserInterfaceMessage
{ {

View File

@@ -13,6 +13,7 @@ air-alarm-ui-window-device-count-label = Total Devices
air-alarm-ui-window-resync-devices-label = Resync air-alarm-ui-window-resync-devices-label = Resync
air-alarm-ui-window-mode-label = Mode air-alarm-ui-window-mode-label = Mode
air-alarm-ui-window-auto-mode-label = Auto mode
air-alarm-ui-window-pressure = {$pressure} kPa air-alarm-ui-window-pressure = {$pressure} kPa
air-alarm-ui-window-pressure-indicator = Pressure: [color={$color}]{$pressure} kPa[/color] air-alarm-ui-window-pressure-indicator = Pressure: [color={$color}]{$pressure} kPa[/color]