InfoUIController.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. using Content.Client.Gameplay;
  2. using Content.Client.Info;
  3. using Content.Shared.Guidebook;
  4. using Content.Shared.Info;
  5. using Robust.Client.Console;
  6. using Robust.Client.UserInterface.Controllers;
  7. using Robust.Client.UserInterface.Controls;
  8. using Robust.Shared.Network;
  9. using Robust.Shared.Prototypes;
  10. namespace Content.Client.UserInterface.Systems.Info;
  11. public sealed class InfoUIController : UIController, IOnStateExited<GameplayState>
  12. {
  13. [Dependency] private readonly IClientConsoleHost _consoleHost = default!;
  14. [Dependency] private readonly INetManager _netManager = default!;
  15. [Dependency] private readonly IPrototypeManager _prototype = default!;
  16. [Dependency] private readonly ILogManager _logMan = default!;
  17. private RulesPopup? _rulesPopup;
  18. private RulesAndInfoWindow? _infoWindow;
  19. private ISawmill _sawmill = default!;
  20. [ValidatePrototypeId<GuideEntryPrototype>]
  21. private const string DefaultRuleset = "DefaultRuleset";
  22. public ProtoId<GuideEntryPrototype> RulesEntryId = DefaultRuleset;
  23. public override void Initialize()
  24. {
  25. base.Initialize();
  26. _sawmill = _logMan.GetSawmill("rules");
  27. _netManager.RegisterNetMessage<RulesAcceptedMessage>();
  28. _netManager.RegisterNetMessage<SendRulesInformationMessage>(OnRulesInformationMessage);
  29. _consoleHost.RegisterCommand("fuckrules",
  30. "",
  31. "",
  32. (_, _, _) =>
  33. {
  34. OnAcceptPressed();
  35. });
  36. }
  37. private void OnRulesInformationMessage(SendRulesInformationMessage message)
  38. {
  39. RulesEntryId = message.CoreRules;
  40. if (message.ShouldShowRules)
  41. ShowRules(message.PopupTime);
  42. }
  43. public void OnStateExited(GameplayState state)
  44. {
  45. if (_infoWindow == null)
  46. return;
  47. _infoWindow.Dispose();
  48. _infoWindow = null;
  49. }
  50. private void ShowRules(float time)
  51. {
  52. if (_rulesPopup != null)
  53. return;
  54. _rulesPopup = new RulesPopup
  55. {
  56. Timer = time
  57. };
  58. _rulesPopup.OnQuitPressed += OnQuitPressed;
  59. _rulesPopup.OnAcceptPressed += OnAcceptPressed;
  60. UIManager.WindowRoot.AddChild(_rulesPopup);
  61. LayoutContainer.SetAnchorPreset(_rulesPopup, LayoutContainer.LayoutPreset.Wide);
  62. }
  63. private void OnQuitPressed()
  64. {
  65. _consoleHost.ExecuteCommand("quit");
  66. }
  67. private void OnAcceptPressed()
  68. {
  69. _netManager.ClientSendMessage(new RulesAcceptedMessage());
  70. _rulesPopup?.Orphan();
  71. _rulesPopup = null;
  72. }
  73. public GuideEntryPrototype GetCoreRuleEntry()
  74. {
  75. if (!_prototype.TryIndex(RulesEntryId, out var guideEntryPrototype))
  76. {
  77. guideEntryPrototype = _prototype.Index<GuideEntryPrototype>(DefaultRuleset);
  78. _sawmill.Error($"Couldn't find the following prototype: {RulesEntryId}. Falling back to {DefaultRuleset}, please check that the server has the rules set up correctly");
  79. return guideEntryPrototype;
  80. }
  81. return guideEntryPrototype;
  82. }
  83. public void OpenWindow()
  84. {
  85. if (_infoWindow == null || _infoWindow.Disposed)
  86. _infoWindow = UIManager.CreateWindow<RulesAndInfoWindow>();
  87. _infoWindow?.OpenCentered();
  88. }
  89. }