2024-06-06 03:11:26 -04:00
using Content.Client.Gameplay ;
2022-10-12 01:16:23 -07:00
using Content.Client.Info ;
2024-06-07 00:05:58 +12:00
using Content.Shared.Guidebook ;
2024-06-06 03:11:26 -04:00
using Content.Shared.Info ;
using Robust.Client.Console ;
2022-10-12 01:16:23 -07:00
using Robust.Client.UserInterface.Controllers ;
2024-06-06 03:11:26 -04:00
using Robust.Client.UserInterface.Controls ;
using Robust.Shared.Network ;
using Robust.Shared.Prototypes ;
2022-10-12 01:16:23 -07:00
namespace Content.Client.UserInterface.Systems.Info ;
public sealed class InfoUIController : UIController , IOnStateExited < GameplayState >
{
2024-06-06 03:11:26 -04:00
[Dependency] private readonly IClientConsoleHost _consoleHost = default ! ;
[Dependency] private readonly INetManager _netManager = default ! ;
[Dependency] private readonly IPrototypeManager _prototype = default ! ;
2024-06-15 00:41:25 -04:00
[Dependency] private readonly ILogManager _logMan = default ! ;
2024-06-06 03:11:26 -04:00
private RulesPopup ? _rulesPopup ;
2022-10-12 01:16:23 -07:00
private RulesAndInfoWindow ? _infoWindow ;
2024-06-15 00:41:25 -04:00
private ISawmill _sawmill = default ! ;
[ValidatePrototypeId<GuideEntryPrototype>]
private const string DefaultRuleset = "DefaultRuleset" ;
public ProtoId < GuideEntryPrototype > RulesEntryId = DefaultRuleset ;
2022-10-12 01:16:23 -07:00
2024-06-06 03:11:26 -04:00
public override void Initialize ( )
{
base . Initialize ( ) ;
2024-06-15 00:41:25 -04:00
_sawmill = _logMan . GetSawmill ( "rules" ) ;
2024-06-07 15:53:20 -04:00
_netManager . RegisterNetMessage < RulesAcceptedMessage > ( ) ;
2024-06-15 00:41:25 -04:00
_netManager . RegisterNetMessage < SendRulesInformationMessage > ( OnRulesInformationMessage ) ;
2024-06-06 03:11:26 -04:00
_consoleHost . RegisterCommand ( "fuckrules" ,
"" ,
"" ,
( _ , _ , _ ) = >
{
OnAcceptPressed ( ) ;
} ) ;
}
2024-06-15 00:41:25 -04:00
private void OnRulesInformationMessage ( SendRulesInformationMessage message )
2024-06-06 03:11:26 -04:00
{
2024-06-15 00:41:25 -04:00
RulesEntryId = message . CoreRules ;
if ( message . ShouldShowRules )
ShowRules ( message . PopupTime ) ;
2024-06-06 03:11:26 -04:00
}
2022-10-12 01:16:23 -07:00
public void OnStateExited ( GameplayState state )
{
if ( _infoWindow = = null )
return ;
_infoWindow . Dispose ( ) ;
_infoWindow = null ;
}
2024-06-06 03:11:26 -04:00
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 ( )
{
2024-06-07 15:53:20 -04:00
_netManager . ClientSendMessage ( new RulesAcceptedMessage ( ) ) ;
2024-06-06 03:11:26 -04:00
_rulesPopup ? . Orphan ( ) ;
_rulesPopup = null ;
}
public GuideEntryPrototype GetCoreRuleEntry ( )
{
2024-06-15 00:41:25 -04:00
if ( ! _prototype . TryIndex ( RulesEntryId , out var guideEntryPrototype ) )
{
guideEntryPrototype = _prototype . Index < GuideEntryPrototype > ( DefaultRuleset ) ;
_sawmill . Error ( $"Couldn't find the following prototype: {RulesEntryId}. Falling back to {DefaultRuleset}, please check that the server has the rules set up correctly" ) ;
return guideEntryPrototype ;
}
2024-06-06 03:11:26 -04:00
return guideEntryPrototype ;
}
2022-10-12 01:16:23 -07:00
public void OpenWindow ( )
{
if ( _infoWindow = = null | | _infoWindow . Disposed )
_infoWindow = UIManager . CreateWindow < RulesAndInfoWindow > ( ) ;
_infoWindow ? . OpenCentered ( ) ;
}
}