diff --git a/Content.Client/Ghost/GhostToggleSelfVisibility.cs b/Content.Client/Ghost/GhostToggleSelfVisibility.cs new file mode 100644 index 0000000000..321bd9d32a --- /dev/null +++ b/Content.Client/Ghost/GhostToggleSelfVisibility.cs @@ -0,0 +1,30 @@ +using Content.Shared.Ghost; +using Robust.Client.GameObjects; +using Robust.Shared.Console; + +namespace Content.Client.Ghost; + +public sealed class GhostToggleSelfVisibility : IConsoleCommand +{ + public string Command => "toggleselfghost"; + public string Description => "Toggles seeing your own ghost."; + public string Help => "toggleselfghost"; + public void Execute(IConsoleShell shell, string argStr, string[] args) + { + var attachedEntity = shell.Player?.AttachedEntity; + if (!attachedEntity.HasValue) + return; + + var entityManager = IoCManager.Resolve(); + if (!entityManager.HasComponent(attachedEntity)) + { + shell.WriteError("Entity must be a ghost."); + return; + } + + if (!entityManager.TryGetComponent(attachedEntity, out SpriteComponent? spriteComponent)) + return; + + spriteComponent.Visible = !spriteComponent.Visible; + } +} diff --git a/Content.Client/Replay/ContentReplayPlaybackManager.cs b/Content.Client/Replay/ContentReplayPlaybackManager.cs index a96752383a..cbb5117255 100644 --- a/Content.Client/Replay/ContentReplayPlaybackManager.cs +++ b/Content.Client/Replay/ContentReplayPlaybackManager.cs @@ -46,6 +46,8 @@ public sealed class ContentReplayPlaybackManager /// public Type? DefaultState; + public bool IsScreenshotMode = false; + private bool _initialized; public void Initialize() diff --git a/Content.Client/Replay/ReplayToggleScreenshotModeCommand.cs b/Content.Client/Replay/ReplayToggleScreenshotModeCommand.cs new file mode 100644 index 0000000000..40b1a135d4 --- /dev/null +++ b/Content.Client/Replay/ReplayToggleScreenshotModeCommand.cs @@ -0,0 +1,35 @@ +using Content.Client.UserInterface.Systems.Chat; +using Content.Shared.Chat; +using Robust.Client.Replays.Commands; +using Robust.Client.Replays.UI; +using Robust.Client.UserInterface; +using Robust.Shared.Console; + +namespace Content.Client.Replay; + +public sealed class ReplayToggleScreenshotModeCommand : BaseReplayCommand +{ + [Dependency] private readonly IUserInterfaceManager _userInterfaceManager = default!; + [Dependency] private readonly ContentReplayPlaybackManager _replayManager = default!; + + public override string Command => "replay_toggle_screenshot_mode"; + + public override void Execute(IConsoleShell shell, string argStr, string[] args) + { + var screen = _userInterfaceManager.ActiveScreen; + if (screen == null) + return; + + _replayManager.IsScreenshotMode = !_replayManager.IsScreenshotMode; + + var showReplayWidget = _replayManager.IsScreenshotMode; + screen.ShowWidget(showReplayWidget); + + foreach (var chatBox in _userInterfaceManager.GetUIController().Chats) + { + chatBox.ChatInput.Visible = !showReplayWidget; + if (!showReplayWidget) + chatBox.ChatInput.ChannelSelector.Select(ChatSelectChannel.Local); + } + } +} diff --git a/Content.Client/Replay/UI/ReplaySpectateEntityState.cs b/Content.Client/Replay/UI/ReplaySpectateEntityState.cs index f36c366dae..c64201bc03 100644 --- a/Content.Client/Replay/UI/ReplaySpectateEntityState.cs +++ b/Content.Client/Replay/UI/ReplaySpectateEntityState.cs @@ -12,6 +12,8 @@ namespace Content.Client.Replay.UI; [Virtual] public class ReplaySpectateEntityState : GameplayState { + [Dependency] private readonly ContentReplayPlaybackManager _replayManager = default!; + protected override void Startup() { base.Startup(); @@ -21,11 +23,13 @@ public class ReplaySpectateEntityState : GameplayState return; screen.ShowWidget(false); - SetAnchorAndMarginPreset(screen.GetOrAddWidget(), LayoutPreset.TopLeft, margin: 10); + var replayWidget = screen.GetOrAddWidget(); + SetAnchorAndMarginPreset(replayWidget, LayoutPreset.TopLeft, margin: 10); + replayWidget.Visible = !_replayManager.IsScreenshotMode; foreach (var chatbox in UserInterfaceManager.GetUIController().Chats) { - chatbox.ChatInput.Visible = false; + chatbox.ChatInput.Visible = _replayManager.IsScreenshotMode; } }