1
0

GameplayState.cs 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. using System.Numerics;
  2. using Content.Client.Changelog;
  3. using Content.Client.Hands;
  4. using Content.Client.UserInterface.Controls;
  5. using Content.Client.UserInterface.Screens;
  6. using Content.Client.UserInterface.Systems.Gameplay;
  7. using Content.Client.Viewport;
  8. using Content.Shared.CCVar;
  9. using Robust.Client.Graphics;
  10. using Robust.Client.Input;
  11. using Robust.Client.UserInterface;
  12. using Robust.Client.UserInterface.Controls;
  13. using Robust.Client.UserInterface.CustomControls;
  14. using Robust.Shared.Configuration;
  15. using Robust.Shared.Timing;
  16. namespace Content.Client.Gameplay
  17. {
  18. [Virtual]
  19. public class GameplayState : GameplayStateBase, IMainViewportState
  20. {
  21. [Dependency] private readonly IEyeManager _eyeManager = default!;
  22. [Dependency] private readonly IOverlayManager _overlayManager = default!;
  23. [Dependency] private readonly IGameTiming _gameTiming = default!;
  24. [Dependency] private readonly IUserInterfaceManager _uiManager = default!;
  25. [Dependency] private readonly ChangelogManager _changelog = default!;
  26. [Dependency] private readonly IConfigurationManager _configurationManager = default!;
  27. private FpsCounter _fpsCounter = default!;
  28. private Label _version = default!;
  29. public MainViewport Viewport => _uiManager.ActiveScreen!.GetWidget<MainViewport>()!;
  30. private readonly GameplayStateLoadController _loadController;
  31. public GameplayState()
  32. {
  33. IoCManager.InjectDependencies(this);
  34. _loadController = _uiManager.GetUIController<GameplayStateLoadController>();
  35. }
  36. protected override void Startup()
  37. {
  38. base.Startup();
  39. LoadMainScreen();
  40. _configurationManager.OnValueChanged(CCVars.UILayout, ReloadMainScreenValueChange);
  41. // Add the hand-item overlay.
  42. _overlayManager.AddOverlay(new ShowHandItemOverlay());
  43. // FPS counter.
  44. // yeah this can just stay here, whatever
  45. _fpsCounter = new FpsCounter(_gameTiming);
  46. UserInterfaceManager.PopupRoot.AddChild(_fpsCounter);
  47. _fpsCounter.Visible = _configurationManager.GetCVar(CCVars.HudFpsCounterVisible);
  48. _configurationManager.OnValueChanged(CCVars.HudFpsCounterVisible, (show) => { _fpsCounter.Visible = show; });
  49. // Version number watermark.
  50. _version = new Label();
  51. _version.FontColorOverride = Color.FromHex("#FFFFFF20");
  52. _version.Text = _changelog.GetClientVersion();
  53. UserInterfaceManager.PopupRoot.AddChild(_version);
  54. _configurationManager.OnValueChanged(CCVars.HudVersionWatermark, (show) => { _version.Visible = VersionVisible(); }, true);
  55. _configurationManager.OnValueChanged(CCVars.ForceClientHudVersionWatermark, (show) => { _version.Visible = VersionVisible(); }, true);
  56. // TODO make this centered or something
  57. LayoutContainer.SetPosition(_version, new Vector2(70, 0));
  58. }
  59. // This allows servers to force the watermark on clients
  60. private bool VersionVisible()
  61. {
  62. var client = _configurationManager.GetCVar(CCVars.HudVersionWatermark);
  63. var server = _configurationManager.GetCVar(CCVars.ForceClientHudVersionWatermark);
  64. return client || server;
  65. }
  66. protected override void Shutdown()
  67. {
  68. _overlayManager.RemoveOverlay<ShowHandItemOverlay>();
  69. base.Shutdown();
  70. // Clear viewport to some fallback, whatever.
  71. _eyeManager.MainViewport = UserInterfaceManager.MainViewport;
  72. _fpsCounter.Dispose();
  73. _uiManager.ClearWindows();
  74. _configurationManager.UnsubValueChanged(CCVars.UILayout, ReloadMainScreenValueChange);
  75. UnloadMainScreen();
  76. }
  77. private void ReloadMainScreenValueChange(string _)
  78. {
  79. ReloadMainScreen();
  80. }
  81. public void ReloadMainScreen()
  82. {
  83. if (_uiManager.ActiveScreen?.GetWidget<MainViewport>() == null)
  84. {
  85. return;
  86. }
  87. UnloadMainScreen();
  88. LoadMainScreen();
  89. }
  90. private void UnloadMainScreen()
  91. {
  92. _loadController.UnloadScreen();
  93. _uiManager.UnloadScreen();
  94. }
  95. private void LoadMainScreen()
  96. {
  97. var screenTypeString = _configurationManager.GetCVar(CCVars.UILayout);
  98. if (!Enum.TryParse(screenTypeString, out ScreenType screenType))
  99. {
  100. screenType = default;
  101. }
  102. switch (screenType)
  103. {
  104. case ScreenType.Default:
  105. _uiManager.LoadScreen<DefaultGameScreen>();
  106. break;
  107. case ScreenType.Separated:
  108. _uiManager.LoadScreen<SeparatedChatGameScreen>();
  109. break;
  110. }
  111. _loadController.LoadScreen();
  112. }
  113. protected override void OnKeyBindStateChanged(ViewportBoundKeyEventArgs args)
  114. {
  115. if (args.Viewport == null)
  116. base.OnKeyBindStateChanged(new ViewportBoundKeyEventArgs(args.KeyEventArgs, Viewport.Viewport));
  117. else
  118. base.OnKeyBindStateChanged(args);
  119. }
  120. }
  121. }