1
0

GasVolumePumpBoundUserInterface.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. using Content.Shared.Atmos;
  2. using Content.Shared.Atmos.Piping.Binary.Components;
  3. using Content.Shared.Localizations;
  4. using JetBrains.Annotations;
  5. using Robust.Client.GameObjects;
  6. using Robust.Client.UserInterface;
  7. namespace Content.Client.Atmos.UI
  8. {
  9. /// <summary>
  10. /// Initializes a <see cref="GasVolumePumpWindow"/> and updates it when new server messages are received.
  11. /// </summary>
  12. [UsedImplicitly]
  13. public sealed class GasVolumePumpBoundUserInterface : BoundUserInterface
  14. {
  15. [ViewVariables]
  16. private const float MaxTransferRate = Atmospherics.MaxTransferRate;
  17. [ViewVariables]
  18. private GasVolumePumpWindow? _window;
  19. public GasVolumePumpBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey)
  20. {
  21. }
  22. protected override void Open()
  23. {
  24. base.Open();
  25. _window = this.CreateWindow<GasVolumePumpWindow>();
  26. _window.ToggleStatusButtonPressed += OnToggleStatusButtonPressed;
  27. _window.PumpTransferRateChanged += OnPumpTransferRatePressed;
  28. }
  29. private void OnToggleStatusButtonPressed()
  30. {
  31. if (_window is null) return;
  32. SendMessage(new GasVolumePumpToggleStatusMessage(_window.PumpStatus));
  33. }
  34. private void OnPumpTransferRatePressed(string value)
  35. {
  36. var rate = UserInputParser.TryFloat(value, out var parsed) ? parsed : 0f;
  37. if (rate > MaxTransferRate)
  38. rate = MaxTransferRate;
  39. SendMessage(new GasVolumePumpChangeTransferRateMessage(rate));
  40. }
  41. /// <summary>
  42. /// Update the UI state based on server-sent info
  43. /// </summary>
  44. /// <param name="state"></param>
  45. protected override void UpdateState(BoundUserInterfaceState state)
  46. {
  47. base.UpdateState(state);
  48. if (_window == null || state is not GasVolumePumpBoundUserInterfaceState cast)
  49. return;
  50. _window.Title = cast.PumpLabel;
  51. _window.SetPumpStatus(cast.Enabled);
  52. _window.SetTransferRate(cast.TransferRate);
  53. }
  54. }
  55. }