GhostUIController.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. using Content.Client.Gameplay;
  2. using Content.Client.Ghost;
  3. using Content.Client.UserInterface.Systems.Gameplay;
  4. using Content.Client.UserInterface.Systems.Ghost.Widgets;
  5. using Content.Shared.Ghost;
  6. using Robust.Client.UserInterface;
  7. using Robust.Client.UserInterface.Controllers;
  8. namespace Content.Client.UserInterface.Systems.Ghost;
  9. // TODO hud refactor BEFORE MERGE fix ghost gui being too far up
  10. public sealed class GhostUIController : UIController, IOnSystemChanged<GhostSystem>
  11. {
  12. [Dependency] private readonly IEntityNetworkManager _net = default!;
  13. [UISystemDependency] private readonly GhostSystem? _system = default;
  14. private GhostGui? Gui => UIManager.GetActiveUIWidgetOrNull<GhostGui>();
  15. public override void Initialize()
  16. {
  17. base.Initialize();
  18. var gameplayStateLoad = UIManager.GetUIController<GameplayStateLoadController>();
  19. gameplayStateLoad.OnScreenLoad += OnScreenLoad;
  20. gameplayStateLoad.OnScreenUnload += OnScreenUnload;
  21. }
  22. private void OnScreenLoad()
  23. {
  24. LoadGui();
  25. }
  26. private void OnScreenUnload()
  27. {
  28. UnloadGui();
  29. }
  30. public void OnSystemLoaded(GhostSystem system)
  31. {
  32. system.PlayerRemoved += OnPlayerRemoved;
  33. system.PlayerUpdated += OnPlayerUpdated;
  34. system.PlayerAttached += OnPlayerAttached;
  35. system.PlayerDetached += OnPlayerDetached;
  36. system.GhostWarpsResponse += OnWarpsResponse;
  37. system.GhostRoleCountUpdated += OnRoleCountUpdated;
  38. }
  39. public void OnSystemUnloaded(GhostSystem system)
  40. {
  41. system.PlayerRemoved -= OnPlayerRemoved;
  42. system.PlayerUpdated -= OnPlayerUpdated;
  43. system.PlayerAttached -= OnPlayerAttached;
  44. system.PlayerDetached -= OnPlayerDetached;
  45. system.GhostWarpsResponse -= OnWarpsResponse;
  46. system.GhostRoleCountUpdated -= OnRoleCountUpdated;
  47. }
  48. public void UpdateGui()
  49. {
  50. if (Gui == null)
  51. {
  52. return;
  53. }
  54. Gui.Visible = _system?.IsGhost ?? false;
  55. Gui.Update(_system?.AvailableGhostRoleCount, _system?.Player?.CanReturnToBody);
  56. }
  57. private void OnPlayerRemoved(GhostComponent component)
  58. {
  59. Gui?.Hide();
  60. }
  61. private void OnPlayerUpdated(GhostComponent component)
  62. {
  63. UpdateGui();
  64. }
  65. private void OnPlayerAttached(GhostComponent component)
  66. {
  67. if (Gui == null)
  68. return;
  69. Gui.Visible = true;
  70. UpdateGui();
  71. }
  72. private void OnPlayerDetached()
  73. {
  74. Gui?.Hide();
  75. }
  76. private void OnWarpsResponse(GhostWarpsResponseEvent msg)
  77. {
  78. if (Gui?.TargetWindow is not { } window)
  79. return;
  80. window.UpdateWarps(msg.Warps);
  81. window.Populate();
  82. }
  83. private void OnRoleCountUpdated(GhostUpdateGhostRoleCountEvent msg)
  84. {
  85. UpdateGui();
  86. }
  87. private void OnWarpClicked(NetEntity player)
  88. {
  89. var msg = new GhostWarpToTargetRequestEvent(player);
  90. _net.SendSystemNetworkMessage(msg);
  91. }
  92. private void OnGhostnadoClicked()
  93. {
  94. var msg = new GhostnadoRequestEvent();
  95. _net.SendSystemNetworkMessage(msg);
  96. }
  97. public void LoadGui()
  98. {
  99. if (Gui == null)
  100. return;
  101. Gui.RequestWarpsPressed += RequestWarps;
  102. Gui.ReturnToBodyPressed += ReturnToBody;
  103. Gui.ReturnToLobbyPressed += ReturnToLobby;
  104. Gui.GhostRolesPressed += GhostRolesPressed;
  105. Gui.TargetWindow.WarpClicked += OnWarpClicked;
  106. Gui.TargetWindow.OnGhostnadoClicked += OnGhostnadoClicked;
  107. UpdateGui();
  108. }
  109. public void UnloadGui()
  110. {
  111. if (Gui == null)
  112. return;
  113. Gui.RequestWarpsPressed -= RequestWarps;
  114. Gui.ReturnToBodyPressed -= ReturnToBody;
  115. Gui.ReturnToLobbyPressed -= ReturnToLobby;
  116. Gui.GhostRolesPressed -= GhostRolesPressed;
  117. Gui.TargetWindow.WarpClicked -= OnWarpClicked;
  118. Gui.Hide();
  119. }
  120. private void ReturnToBody()
  121. {
  122. _system?.ReturnToBody();
  123. }
  124. private void ReturnToLobby()
  125. {
  126. _system?.ReturnToLobby();
  127. }
  128. private void RequestWarps()
  129. {
  130. _system?.RequestWarps();
  131. Gui?.TargetWindow.Populate();
  132. Gui?.TargetWindow.OpenCentered();
  133. }
  134. private void GhostRolesPressed()
  135. {
  136. _system?.OpenGhostRoles();
  137. }
  138. }