using Content.Client.Gameplay; using Content.Client.Info; using Content.Shared.CCVar; using Content.Shared.Guidebook; using Content.Shared.Info; using Robust.Client.Console; using Robust.Client.UserInterface.Controllers; using Robust.Client.UserInterface.Controls; using Robust.Shared.Configuration; using Robust.Shared.Network; using Robust.Shared.Prototypes; namespace Content.Client.UserInterface.Systems.Info; public sealed class InfoUIController : UIController, IOnStateExited { [Dependency] private readonly IConfigurationManager _cfg = default!; [Dependency] private readonly IClientConsoleHost _consoleHost = default!; [Dependency] private readonly INetManager _netManager = default!; [Dependency] private readonly IPrototypeManager _prototype = default!; private RulesPopup? _rulesPopup; private RulesAndInfoWindow? _infoWindow; public override void Initialize() { base.Initialize(); _netManager.RegisterNetMessage(); _netManager.RegisterNetMessage(OnShowRulesPopupMessage); _consoleHost.RegisterCommand("fuckrules", "", "", (_, _, _) => { OnAcceptPressed(); }); } private void OnShowRulesPopupMessage(ShowRulesPopupMessage message) { ShowRules(message.PopupTime); } public void OnStateExited(GameplayState state) { if (_infoWindow == null) return; _infoWindow.Dispose(); _infoWindow = null; } private void ShowRules(float time) { if (_rulesPopup != null) return; _rulesPopup = new RulesPopup { Timer = time }; _rulesPopup.OnQuitPressed += OnQuitPressed; _rulesPopup.OnAcceptPressed += OnAcceptPressed; UIManager.WindowRoot.AddChild(_rulesPopup); LayoutContainer.SetAnchorPreset(_rulesPopup, LayoutContainer.LayoutPreset.Wide); } private void OnQuitPressed() { _consoleHost.ExecuteCommand("quit"); } private void OnAcceptPressed() { _netManager.ClientSendMessage(new RulesAcceptedMessage()); _rulesPopup?.Orphan(); _rulesPopup = null; } public GuideEntryPrototype GetCoreRuleEntry() { var guide = _cfg.GetCVar(CCVars.RulesFile); var guideEntryPrototype = _prototype.Index(guide); return guideEntryPrototype; } public void OpenWindow() { if (_infoWindow == null || _infoWindow.Disposed) _infoWindow = UIManager.CreateWindow(); _infoWindow?.OpenCentered(); } }