DisposalUnitBoundUserInterface.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. using Content.Client.Disposal.Systems;
  2. using Content.Shared.Disposal;
  3. using Content.Shared.Disposal.Components;
  4. using JetBrains.Annotations;
  5. using Robust.Client.GameObjects;
  6. using Robust.Client.UserInterface.Controls;
  7. using static Content.Shared.Disposal.Components.SharedDisposalUnitComponent;
  8. namespace Content.Client.Disposal.UI
  9. {
  10. /// <summary>
  11. /// Initializes a <see cref="MailingUnitWindow"/> or a <see cref="DisposalUnitWindow"/> and updates it when new server messages are received.
  12. /// </summary>
  13. [UsedImplicitly]
  14. public sealed class DisposalUnitBoundUserInterface : BoundUserInterface
  15. {
  16. // What are you doing here
  17. [ViewVariables]
  18. public MailingUnitWindow? MailingUnitWindow;
  19. [ViewVariables]
  20. public DisposalUnitWindow? DisposalUnitWindow;
  21. public DisposalUnitBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey)
  22. {
  23. }
  24. private void ButtonPressed(UiButton button)
  25. {
  26. SendMessage(new UiButtonPressedMessage(button));
  27. // If we get client-side power stuff then we can predict the button presses but for now we won't as it stuffs
  28. // the pressure lerp up.
  29. }
  30. private void TargetSelected(ItemList.ItemListSelectedEventArgs args)
  31. {
  32. var item = args.ItemList[args.ItemIndex];
  33. SendMessage(new TargetSelectedMessage(item.Text));
  34. }
  35. protected override void Open()
  36. {
  37. base.Open();
  38. if (UiKey is MailingUnitUiKey)
  39. {
  40. MailingUnitWindow = new MailingUnitWindow();
  41. MailingUnitWindow.OpenCenteredRight();
  42. MailingUnitWindow.OnClose += Close;
  43. MailingUnitWindow.Eject.OnPressed += _ => ButtonPressed(UiButton.Eject);
  44. MailingUnitWindow.Engage.OnPressed += _ => ButtonPressed(UiButton.Engage);
  45. MailingUnitWindow.Power.OnPressed += _ => ButtonPressed(UiButton.Power);
  46. MailingUnitWindow.TargetListContainer.OnItemSelected += TargetSelected;
  47. }
  48. else if (UiKey is DisposalUnitUiKey)
  49. {
  50. DisposalUnitWindow = new DisposalUnitWindow();
  51. DisposalUnitWindow.OpenCenteredRight();
  52. DisposalUnitWindow.OnClose += Close;
  53. DisposalUnitWindow.Eject.OnPressed += _ => ButtonPressed(UiButton.Eject);
  54. DisposalUnitWindow.Engage.OnPressed += _ => ButtonPressed(UiButton.Engage);
  55. DisposalUnitWindow.Power.OnPressed += _ => ButtonPressed(UiButton.Power);
  56. }
  57. }
  58. protected override void UpdateState(BoundUserInterfaceState state)
  59. {
  60. base.UpdateState(state);
  61. if (state is not MailingUnitBoundUserInterfaceState && state is not DisposalUnitBoundUserInterfaceState)
  62. {
  63. return;
  64. }
  65. switch (state)
  66. {
  67. case MailingUnitBoundUserInterfaceState mailingUnitState:
  68. MailingUnitWindow?.UpdateState(mailingUnitState);
  69. break;
  70. case DisposalUnitBoundUserInterfaceState disposalUnitState:
  71. DisposalUnitWindow?.UpdateState(disposalUnitState);
  72. break;
  73. }
  74. }
  75. protected override void Dispose(bool disposing)
  76. {
  77. base.Dispose(disposing);
  78. if (!disposing)
  79. return;
  80. MailingUnitWindow?.Dispose();
  81. DisposalUnitWindow?.Dispose();
  82. }
  83. }
  84. }