RingerBoundUserInterface.cs 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. using Content.Shared.PDA;
  2. using Content.Shared.PDA.Ringer;
  3. using JetBrains.Annotations;
  4. using Robust.Client.UserInterface;
  5. using Robust.Shared.Timing;
  6. namespace Content.Client.PDA.Ringer
  7. {
  8. [UsedImplicitly]
  9. public sealed class RingerBoundUserInterface : BoundUserInterface
  10. {
  11. [ViewVariables]
  12. private RingtoneMenu? _menu;
  13. public RingerBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey)
  14. {
  15. }
  16. protected override void Open()
  17. {
  18. base.Open();
  19. _menu = this.CreateWindow<RingtoneMenu>();
  20. _menu.OpenToLeft();
  21. _menu.TestRingerButton.OnPressed += _ =>
  22. {
  23. SendMessage(new RingerPlayRingtoneMessage());
  24. };
  25. _menu.SetRingerButton.OnPressed += _ =>
  26. {
  27. if (!TryGetRingtone(out var ringtone))
  28. return;
  29. SendMessage(new RingerSetRingtoneMessage(ringtone));
  30. _menu.SetRingerButton.Disabled = true;
  31. Timer.Spawn(333, () =>
  32. {
  33. if (_menu is { Disposed: false, SetRingerButton: { Disposed: false } ringer})
  34. ringer.Disabled = false;
  35. });
  36. };
  37. }
  38. private bool TryGetRingtone(out Note[] ringtone)
  39. {
  40. if (_menu == null)
  41. {
  42. ringtone = Array.Empty<Note>();
  43. return false;
  44. }
  45. ringtone = new Note[_menu.RingerNoteInputs.Length];
  46. for (int i = 0; i < _menu.RingerNoteInputs.Length; i++)
  47. {
  48. if (!Enum.TryParse<Note>(_menu.RingerNoteInputs[i].Text.Replace("#", "sharp"), false, out var note))
  49. return false;
  50. ringtone[i] = note;
  51. }
  52. return true;
  53. }
  54. protected override void UpdateState(BoundUserInterfaceState state)
  55. {
  56. base.UpdateState(state);
  57. if (_menu == null || state is not RingerUpdateState msg)
  58. return;
  59. for (int i = 0; i < _menu.RingerNoteInputs.Length; i++)
  60. {
  61. var note = msg.Ringtone[i].ToString();
  62. if (RingtoneMenu.IsNote(note))
  63. {
  64. _menu.PreviousNoteInputs[i] = note.Replace("sharp", "#");
  65. _menu.RingerNoteInputs[i].Text = _menu.PreviousNoteInputs[i];
  66. }
  67. }
  68. _menu.TestRingerButton.Disabled = msg.IsPlaying;
  69. }
  70. protected override void Dispose(bool disposing)
  71. {
  72. base.Dispose(disposing);
  73. if (!disposing)
  74. return;
  75. _menu?.Dispose();
  76. }
  77. }
  78. }