1
0

InstrumentBoundUserInterface.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. using Content.Shared.ActionBlocker;
  2. using Content.Shared.Instruments.UI;
  3. using Content.Shared.Interaction;
  4. using Robust.Client.Audio.Midi;
  5. using Robust.Client.Player;
  6. using Robust.Client.UserInterface;
  7. namespace Content.Client.Instruments.UI
  8. {
  9. public sealed class InstrumentBoundUserInterface : BoundUserInterface
  10. {
  11. public IEntityManager Entities => EntMan;
  12. [Dependency] public readonly IMidiManager MidiManager = default!;
  13. [Dependency] public readonly IFileDialogManager FileDialogManager = default!;
  14. [Dependency] public readonly ILocalizationManager Loc = default!;
  15. public readonly InstrumentSystem Instruments;
  16. public readonly ActionBlockerSystem ActionBlocker;
  17. public readonly SharedInteractionSystem Interactions;
  18. [ViewVariables] private InstrumentMenu? _instrumentMenu;
  19. [ViewVariables] private BandMenu? _bandMenu;
  20. [ViewVariables] private ChannelsMenu? _channelsMenu;
  21. public InstrumentBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey)
  22. {
  23. IoCManager.InjectDependencies(this);
  24. Instruments = Entities.System<InstrumentSystem>();
  25. ActionBlocker = Entities.System<ActionBlockerSystem>();
  26. Interactions = Entities.System<SharedInteractionSystem>();
  27. }
  28. protected override void ReceiveMessage(BoundUserInterfaceMessage message)
  29. {
  30. if (message is InstrumentBandResponseBuiMessage bandRx)
  31. _bandMenu?.Populate(bandRx.Nearby, EntMan);
  32. }
  33. protected override void Open()
  34. {
  35. base.Open();
  36. _instrumentMenu = this.CreateWindow<InstrumentMenu>();
  37. _instrumentMenu.Title = EntMan.GetComponent<MetaDataComponent>(Owner).EntityName;
  38. _instrumentMenu.OnOpenBand += OpenBandMenu;
  39. _instrumentMenu.OnOpenChannels += OpenChannelsMenu;
  40. _instrumentMenu.OnCloseChannels += CloseChannelsMenu;
  41. _instrumentMenu.OnCloseBands += CloseBandMenu;
  42. _instrumentMenu.SetMIDI(MidiManager.IsAvailable);
  43. if (EntMan.TryGetComponent(Owner, out InstrumentComponent? instrument))
  44. {
  45. _instrumentMenu.SetInstrument((Owner, instrument));
  46. }
  47. }
  48. protected override void Dispose(bool disposing)
  49. {
  50. base.Dispose(disposing);
  51. if (!disposing)
  52. return;
  53. if (EntMan.TryGetComponent(Owner, out InstrumentComponent? instrument))
  54. {
  55. _instrumentMenu?.RemoveInstrument(instrument);
  56. }
  57. _bandMenu?.Dispose();
  58. _channelsMenu?.Dispose();
  59. }
  60. public void RefreshBands()
  61. {
  62. SendMessage(new InstrumentBandRequestBuiMessage());
  63. }
  64. public void OpenBandMenu()
  65. {
  66. _bandMenu ??= new BandMenu(this);
  67. if (EntMan.TryGetComponent(Owner, out InstrumentComponent? instrument))
  68. {
  69. _bandMenu.Master = instrument.Master;
  70. }
  71. // Refresh cache...
  72. RefreshBands();
  73. _bandMenu.OpenCenteredLeft();
  74. }
  75. public void CloseBandMenu()
  76. {
  77. if(_bandMenu?.IsOpen ?? false)
  78. _bandMenu.Close();
  79. }
  80. public void OpenChannelsMenu()
  81. {
  82. _channelsMenu ??= new ChannelsMenu(this);
  83. EntMan.TryGetComponent(Owner, out InstrumentComponent? instrument);
  84. _channelsMenu.Populate(instrument);
  85. _channelsMenu.OpenCenteredRight();
  86. }
  87. public void CloseChannelsMenu()
  88. {
  89. if(_channelsMenu?.IsOpen ?? false)
  90. _channelsMenu.Close();
  91. }
  92. }
  93. }