| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- using System.Numerics;
- using Content.Client.Changelog;
- using Content.Client.Hands;
- using Content.Client.UserInterface.Controls;
- using Content.Client.UserInterface.Screens;
- using Content.Client.UserInterface.Systems.Gameplay;
- using Content.Client.Viewport;
- using Content.Shared.CCVar;
- using Robust.Client.Graphics;
- using Robust.Client.Input;
- using Robust.Client.UserInterface;
- using Robust.Client.UserInterface.Controls;
- using Robust.Client.UserInterface.CustomControls;
- using Robust.Shared.Configuration;
- using Robust.Shared.Timing;
- namespace Content.Client.Gameplay
- {
- [Virtual]
- public class GameplayState : GameplayStateBase, IMainViewportState
- {
- [Dependency] private readonly IEyeManager _eyeManager = default!;
- [Dependency] private readonly IOverlayManager _overlayManager = default!;
- [Dependency] private readonly IGameTiming _gameTiming = default!;
- [Dependency] private readonly IUserInterfaceManager _uiManager = default!;
- [Dependency] private readonly ChangelogManager _changelog = default!;
- [Dependency] private readonly IConfigurationManager _configurationManager = default!;
- private FpsCounter _fpsCounter = default!;
- private Label _version = default!;
- public MainViewport Viewport => _uiManager.ActiveScreen!.GetWidget<MainViewport>()!;
- private readonly GameplayStateLoadController _loadController;
- public GameplayState()
- {
- IoCManager.InjectDependencies(this);
- _loadController = _uiManager.GetUIController<GameplayStateLoadController>();
- }
- protected override void Startup()
- {
- base.Startup();
- LoadMainScreen();
- _configurationManager.OnValueChanged(CCVars.UILayout, ReloadMainScreenValueChange);
- // Add the hand-item overlay.
- _overlayManager.AddOverlay(new ShowHandItemOverlay());
- // FPS counter.
- // yeah this can just stay here, whatever
- _fpsCounter = new FpsCounter(_gameTiming);
- UserInterfaceManager.PopupRoot.AddChild(_fpsCounter);
- _fpsCounter.Visible = _configurationManager.GetCVar(CCVars.HudFpsCounterVisible);
- _configurationManager.OnValueChanged(CCVars.HudFpsCounterVisible, (show) => { _fpsCounter.Visible = show; });
- // Version number watermark.
- _version = new Label();
- _version.FontColorOverride = Color.FromHex("#FFFFFF20");
- _version.Text = _changelog.GetClientVersion();
- UserInterfaceManager.PopupRoot.AddChild(_version);
- _configurationManager.OnValueChanged(CCVars.HudVersionWatermark, (show) => { _version.Visible = VersionVisible(); }, true);
- _configurationManager.OnValueChanged(CCVars.ForceClientHudVersionWatermark, (show) => { _version.Visible = VersionVisible(); }, true);
- // TODO make this centered or something
- LayoutContainer.SetPosition(_version, new Vector2(70, 0));
- }
- // This allows servers to force the watermark on clients
- private bool VersionVisible()
- {
- var client = _configurationManager.GetCVar(CCVars.HudVersionWatermark);
- var server = _configurationManager.GetCVar(CCVars.ForceClientHudVersionWatermark);
- return client || server;
- }
- protected override void Shutdown()
- {
- _overlayManager.RemoveOverlay<ShowHandItemOverlay>();
- base.Shutdown();
- // Clear viewport to some fallback, whatever.
- _eyeManager.MainViewport = UserInterfaceManager.MainViewport;
- _fpsCounter.Dispose();
- _uiManager.ClearWindows();
- _configurationManager.UnsubValueChanged(CCVars.UILayout, ReloadMainScreenValueChange);
- UnloadMainScreen();
- }
- private void ReloadMainScreenValueChange(string _)
- {
- ReloadMainScreen();
- }
- public void ReloadMainScreen()
- {
- if (_uiManager.ActiveScreen?.GetWidget<MainViewport>() == null)
- {
- return;
- }
- UnloadMainScreen();
- LoadMainScreen();
- }
- private void UnloadMainScreen()
- {
- _loadController.UnloadScreen();
- _uiManager.UnloadScreen();
- }
- private void LoadMainScreen()
- {
- var screenTypeString = _configurationManager.GetCVar(CCVars.UILayout);
- if (!Enum.TryParse(screenTypeString, out ScreenType screenType))
- {
- screenType = default;
- }
- switch (screenType)
- {
- case ScreenType.Default:
- _uiManager.LoadScreen<DefaultGameScreen>();
- break;
- case ScreenType.Separated:
- _uiManager.LoadScreen<SeparatedChatGameScreen>();
- break;
- }
- _loadController.LoadScreen();
- }
- protected override void OnKeyBindStateChanged(ViewportBoundKeyEventArgs args)
- {
- if (args.Viewport == null)
- base.OnKeyBindStateChanged(new ViewportBoundKeyEventArgs(args.KeyEventArgs, Viewport.Viewport));
- else
- base.OnKeyBindStateChanged(args);
- }
- }
- }
|