CommunicationsConsoleBoundUserInterface.cs 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. using Content.Shared.CCVar;
  2. using Content.Shared.Chat;
  3. using Content.Shared.Communications;
  4. using Robust.Client.UserInterface;
  5. using Robust.Shared.Configuration;
  6. using Robust.Shared.Timing;
  7. namespace Content.Client.Communications.UI
  8. {
  9. public sealed class CommunicationsConsoleBoundUserInterface : BoundUserInterface
  10. {
  11. [Dependency] private readonly IConfigurationManager _cfg = default!;
  12. [ViewVariables]
  13. private CommunicationsConsoleMenu? _menu;
  14. public CommunicationsConsoleBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey)
  15. {
  16. }
  17. protected override void Open()
  18. {
  19. base.Open();
  20. _menu = this.CreateWindow<CommunicationsConsoleMenu>();
  21. _menu.OnAnnounce += AnnounceButtonPressed;
  22. _menu.OnBroadcast += BroadcastButtonPressed;
  23. _menu.OnAlertLevel += AlertLevelSelected;
  24. _menu.OnEmergencyLevel += EmergencyShuttleButtonPressed;
  25. }
  26. public void AlertLevelSelected(string level)
  27. {
  28. if (_menu!.AlertLevelSelectable)
  29. {
  30. _menu.CurrentLevel = level;
  31. SendMessage(new CommunicationsConsoleSelectAlertLevelMessage(level));
  32. }
  33. }
  34. public void EmergencyShuttleButtonPressed()
  35. {
  36. if (_menu!.CountdownStarted)
  37. RecallShuttle();
  38. else
  39. CallShuttle();
  40. }
  41. public void AnnounceButtonPressed(string message)
  42. {
  43. var maxLength = _cfg.GetCVar(CCVars.ChatMaxAnnouncementLength);
  44. var msg = SharedChatSystem.SanitizeAnnouncement(message, maxLength);
  45. SendMessage(new CommunicationsConsoleAnnounceMessage(msg));
  46. }
  47. public void BroadcastButtonPressed(string message)
  48. {
  49. SendMessage(new CommunicationsConsoleBroadcastMessage(message));
  50. }
  51. public void CallShuttle()
  52. {
  53. SendMessage(new CommunicationsConsoleCallEmergencyShuttleMessage());
  54. }
  55. public void RecallShuttle()
  56. {
  57. SendMessage(new CommunicationsConsoleRecallEmergencyShuttleMessage());
  58. }
  59. protected override void UpdateState(BoundUserInterfaceState state)
  60. {
  61. base.UpdateState(state);
  62. if (state is not CommunicationsConsoleInterfaceState commsState)
  63. return;
  64. if (_menu != null)
  65. {
  66. _menu.CanAnnounce = commsState.CanAnnounce;
  67. _menu.CanBroadcast = commsState.CanBroadcast;
  68. _menu.CanCall = commsState.CanCall;
  69. _menu.CountdownStarted = commsState.CountdownStarted;
  70. _menu.AlertLevelSelectable = commsState.AlertLevels != null && !float.IsNaN(commsState.CurrentAlertDelay) && commsState.CurrentAlertDelay <= 0;
  71. _menu.CurrentLevel = commsState.CurrentAlert;
  72. _menu.CountdownEnd = commsState.ExpectedCountdownEnd;
  73. _menu.UpdateCountdown();
  74. _menu.UpdateAlertLevels(commsState.AlertLevels, _menu.CurrentLevel);
  75. _menu.AlertLevelButton.Disabled = !_menu.AlertLevelSelectable;
  76. _menu.EmergencyShuttleButton.Disabled = !_menu.CanCall;
  77. _menu.AnnounceButton.Disabled = !_menu.CanAnnounce;
  78. _menu.BroadcastButton.Disabled = !_menu.CanBroadcast;
  79. }
  80. }
  81. }
  82. }