1
0

SpaceHeaterBoundUserInterface.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. using Content.Shared.Atmos.Piping.Portable.Components;
  2. using JetBrains.Annotations;
  3. using Robust.Client.UserInterface;
  4. using Robust.Client.UserInterface.Controls;
  5. namespace Content.Client.Atmos.UI;
  6. /// <summary>
  7. /// Initializes a <see cref="SpaceHeaterWindow"/> and updates it when new server messages are received.
  8. /// </summary>
  9. [UsedImplicitly]
  10. public sealed class SpaceHeaterBoundUserInterface : BoundUserInterface
  11. {
  12. [ViewVariables]
  13. private SpaceHeaterWindow? _window;
  14. public SpaceHeaterBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey)
  15. {
  16. }
  17. protected override void Open()
  18. {
  19. base.Open();
  20. _window = this.CreateWindow<SpaceHeaterWindow>();
  21. _window.ToggleStatusButton.OnPressed += _ => OnToggleStatusButtonPressed();
  22. _window.IncreaseTempRange.OnPressed += _ => OnTemperatureRangeChanged(_window.TemperatureChangeDelta);
  23. _window.DecreaseTempRange.OnPressed += _ => OnTemperatureRangeChanged(-_window.TemperatureChangeDelta);
  24. _window.ModeSelector.OnItemSelected += OnModeChanged;
  25. _window.PowerLevelSelector.OnItemSelected += OnPowerLevelChange;
  26. }
  27. private void OnToggleStatusButtonPressed()
  28. {
  29. _window?.SetActive(!_window.Active);
  30. SendMessage(new SpaceHeaterToggleMessage());
  31. }
  32. private void OnTemperatureRangeChanged(float changeAmount)
  33. {
  34. SendMessage(new SpaceHeaterChangeTemperatureMessage(changeAmount));
  35. }
  36. private void OnModeChanged(OptionButton.ItemSelectedEventArgs args)
  37. {
  38. _window?.ModeSelector.SelectId(args.Id);
  39. SendMessage(new SpaceHeaterChangeModeMessage((SpaceHeaterMode)args.Id));
  40. }
  41. private void OnPowerLevelChange(RadioOptionItemSelectedEventArgs<int> args)
  42. {
  43. _window?.PowerLevelSelector.Select(args.Id);
  44. SendMessage(new SpaceHeaterChangePowerLevelMessage((SpaceHeaterPowerLevel)args.Id));
  45. }
  46. /// <summary>
  47. /// Update the UI state based on server-sent info
  48. /// </summary>
  49. /// <param name="state"></param>
  50. protected override void UpdateState(BoundUserInterfaceState state)
  51. {
  52. base.UpdateState(state);
  53. if (_window == null || state is not SpaceHeaterBoundUserInterfaceState cast)
  54. return;
  55. _window.SetActive(cast.Enabled);
  56. _window.ModeSelector.SelectId((int)cast.Mode);
  57. _window.PowerLevelSelector.Select((int)cast.PowerLevel);
  58. _window.MinTemp = cast.MinTemperature;
  59. _window.MaxTemp = cast.MaxTemperature;
  60. _window.SetTemperature(cast.TargetTemperature);
  61. }
  62. protected override void Dispose(bool disposing)
  63. {
  64. base.Dispose(disposing);
  65. if (!disposing)
  66. return;
  67. _window?.Dispose();
  68. }
  69. }