Add more info to escape menu (#5260)

This commit is contained in:
Tobias Berger 2026-01-25 14:42:09 +00:00 committed by GitHub
parent 2dc9dace20
commit 78e0a0943e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
10 changed files with 188 additions and 1 deletions

View File

@ -1,4 +1,6 @@
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using Content.Client._DV.UserInterfaces.BuildInfo; // DeltaV - More info in Escape Menu
using Content.Client.Credits; // DeltaV - More info in Escape Menu
using Content.Client.MainMenu.UI; using Content.Client.MainMenu.UI;
using Content.Client.UserInterface.Systems.EscapeMenu; using Content.Client.UserInterface.Systems.EscapeMenu;
using Robust.Client; using Robust.Client;
@ -48,6 +50,8 @@ namespace Content.Client.MainMenu
_mainMenuControl.DirectConnectButton.OnPressed += DirectConnectButtonPressed; _mainMenuControl.DirectConnectButton.OnPressed += DirectConnectButtonPressed;
_mainMenuControl.AddressBox.OnTextEntered += AddressBoxEntered; _mainMenuControl.AddressBox.OnTextEntered += AddressBoxEntered;
_mainMenuControl.ChangelogButton.OnPressed += ChangelogButtonPressed; _mainMenuControl.ChangelogButton.OnPressed += ChangelogButtonPressed;
_mainMenuControl.BuildInfoButton.OnPressed += BuildInfoButtonPressed; // DeltaV - More info in Escape Menu
_mainMenuControl.CreditsButton.OnPressed += CreditsButtonPressed; // DeltaV - More info in Escape Menu
_client.RunLevelChanged += RunLevelChanged; _client.RunLevelChanged += RunLevelChanged;
} }
@ -66,6 +70,18 @@ namespace Content.Client.MainMenu
_userInterfaceManager.GetUIController<ChangelogUIController>().ToggleWindow(); _userInterfaceManager.GetUIController<ChangelogUIController>().ToggleWindow();
} }
// Begin DeltaV - More info in Escape Menu
private void BuildInfoButtonPressed(BaseButton.ButtonEventArgs args)
{
_userInterfaceManager.GetUIController<BuildInfoUIController>().ToggleWindow();
}
private void CreditsButtonPressed(BaseButton.ButtonEventArgs args)
{
new CreditsWindow().Open();
}
// End DeltaV - More info in Escape Menu
private void OptionsButtonPressed(BaseButton.ButtonEventArgs args) private void OptionsButtonPressed(BaseButton.ButtonEventArgs args)
{ {
_userInterfaceManager.GetUIController<OptionsUIController>().ToggleWindow(); _userInterfaceManager.GetUIController<OptionsUIController>().ToggleWindow();

View File

@ -48,5 +48,18 @@
<clog:ChangelogButton <clog:ChangelogButton
Name="ChangelogButton" Name="ChangelogButton"
Access="Public"/> Access="Public"/>
<!-- Begin DeltaV - More info in Escape Menu -->
<Button
Name="CreditsButton"
Access="Public"
Text="{Loc server-info-credits-button}"
TextAlign="Center" />
<Button
Name="BuildInfoButton"
Access="Public"
Text="{Loc build-info-button}"
ToolTip="{Loc build-info-tooltip}"
TextAlign="Center" />
<!-- End DeltaV - More info in Escape Menu -->
</BoxContainer> </BoxContainer>
</Control> </Control>

View File

@ -17,5 +17,10 @@
<PanelContainer StyleClasses="LowDivider" Margin="0 2.5 0 2.5" /> <PanelContainer StyleClasses="LowDivider" Margin="0 2.5 0 2.5" />
<Button Access="Public" Name="DisconnectButton" Text="{Loc 'ui-escape-disconnect'}" /> <Button Access="Public" Name="DisconnectButton" Text="{Loc 'ui-escape-disconnect'}" />
<Button Access="Public" Name="QuitButton" Text="{Loc 'ui-escape-quit'}" StyleClasses="ButtonColorRed" /> <Button Access="Public" Name="QuitButton" Text="{Loc 'ui-escape-quit'}" StyleClasses="ButtonColorRed" />
<!-- Begin DeltaV - More info in Escape Menu -->
<PanelContainer StyleClasses="LowDivider" Margin="0 2.5 0 2.5" />
<Button Access="Public" Name="CreditsButton" Text="{Loc server-info-credits-button}" />
<Button Access="Public" Name="BuildInfoButton" Text="{Loc build-info-button}" ToolTip="{Loc build-info-tooltip}" />
<!-- End DeltaV - More info in Escape Menu -->
</BoxContainer> </BoxContainer>
</ui1:EscapeMenu> </ui1:EscapeMenu>

View File

@ -1,4 +1,6 @@
using Content.Client.Gameplay; using Content.Client._DV.UserInterfaces.BuildInfo; // DeltaV - More info in Escape Menu
using Content.Client.Credits; // DeltaV - More info in Escape Menu
using Content.Client.Gameplay;
using Content.Client.UserInterface.Controls; using Content.Client.UserInterface.Controls;
using Content.Client.UserInterface.Systems.Guidebook; using Content.Client.UserInterface.Systems.Guidebook;
using Content.Client.UserInterface.Systems.Info; using Content.Client.UserInterface.Systems.Info;
@ -25,6 +27,7 @@ public sealed class EscapeUIController : UIController, IOnStateEntered<GameplayS
[Dependency] private readonly InfoUIController _info = default!; [Dependency] private readonly InfoUIController _info = default!;
[Dependency] private readonly OptionsUIController _options = default!; [Dependency] private readonly OptionsUIController _options = default!;
[Dependency] private readonly GuidebookUIController _guidebook = default!; [Dependency] private readonly GuidebookUIController _guidebook = default!;
[Dependency] private readonly BuildInfoUIController _buildInfo = default!; // DeltaV - More info in Escape Menu
private Options.UI.EscapeMenu? _escapeWindow; private Options.UI.EscapeMenu? _escapeWindow;
@ -103,6 +106,19 @@ public sealed class EscapeUIController : UIController, IOnStateEntered<GameplayS
_guidebook.ToggleGuidebook(); _guidebook.ToggleGuidebook();
}; };
// Begin DeltaV - More info in Escape Menu
_escapeWindow.BuildInfoButton.OnPressed += _ =>
{
CloseEscapeWindow();
_buildInfo.OpenWindow();
};
_escapeWindow.CreditsButton.OnPressed += _ =>
{
new CreditsWindow().Open();
};
// End DeltaV - More info in Escape Menu
// Hide wiki button if we don't have a link for it. // Hide wiki button if we don't have a link for it.
_escapeWindow.WikiButton.Visible = _cfg.GetCVar(CCVars.InfoLinksWiki) != ""; _escapeWindow.WikiButton.Visible = _cfg.GetCVar(CCVars.InfoLinksWiki) != "";

View File

@ -0,0 +1,41 @@
using Content.Client._DV.UserInterfaces.BuildInfo.Controls;
using JetBrains.Annotations;
using Robust.Client.UserInterface.Controllers;
namespace Content.Client._DV.UserInterfaces.BuildInfo;
[UsedImplicitly]
public sealed class BuildInfoUIController : UIController
{
private BuildInfoWindow _changeLogWindow = default!;
public void OpenWindow()
{
EnsureWindow();
_changeLogWindow.OpenCentered();
_changeLogWindow.MoveToFront();
}
private void EnsureWindow()
{
if (_changeLogWindow is { Disposed: false })
{
// return; ADD THIS BACK WHEN I DON'T NEED HOT RELOAD
}
_changeLogWindow = UIManager.CreateWindow<BuildInfoWindow>();
}
public void ToggleWindow()
{
if (_changeLogWindow is { IsOpen: true })
{
_changeLogWindow.Close();
}
else
{
OpenWindow();
}
}
}

View File

@ -0,0 +1,7 @@
<ui:BuildInfoRow xmlns="https://spacestation14.io"
xmlns:ui="clr-namespace:Content.Client._DV.UserInterfaces.BuildInfo.Controls"
Orientation="Horizontal">
<Label Name="Label" HorizontalAlignment="Left" />
<Label Name="Value" HorizontalAlignment="Right" HorizontalExpand="True" Margin="4" />
<Button Name="CopyButton" HorizontalAlignment="Right" Text="{Loc ui-options-function-text-copy}" />
</ui:BuildInfoRow>

View File

@ -0,0 +1,38 @@
using Robust.Client.AutoGenerated;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.XAML;
namespace Content.Client._DV.UserInterfaces.BuildInfo.Controls;
[GenerateTypedNameReferences]
public sealed partial class BuildInfoRow : BoxContainer
{
[Dependency] private readonly IClipboardManager _clipboard = default!;
public string? LabelText
{
get => Label.Text;
set => Label.Text = value;
}
public string? ValueText
{
get => Value.Text;
set => Value.Text = value;
}
private void CopyValue(BaseButton.ButtonEventArgs args)
{
if (ValueText is { } value)
_clipboard.SetText(value);
}
public BuildInfoRow()
{
IoCManager.InjectDependencies(this);
RobustXamlLoader.Load(this);
CopyButton.OnPressed += CopyValue;
}
}

View File

@ -0,0 +1,14 @@
<buildInfo:BuildInfoWindow xmlns="https://spacestation14.io"
xmlns:buildInfo="clr-namespace:Content.Client._DV.UserInterfaces.BuildInfo.Controls"
Title="{Loc build-info-window-title}"
Resizable="True">
<BoxContainer Orientation="Vertical" Margin="4">
<buildInfo:BuildInfoRow Name="EngineVersion" LabelText="{Loc build-info-engine-version-label}" />
<buildInfo:BuildInfoRow Name="Fork" LabelText="{Loc build-info-fork-label}" />
<buildInfo:BuildInfoRow Name="Version" LabelText="{Loc build-info-version-label}" />
<buildInfo:BuildInfoRow Name="DownloadUrl" LabelText="{Loc build-info-download-url-label}" />
<buildInfo:BuildInfoRow Name="BuildHash" LabelText="{Loc build-info-build-hash-label}" />
<buildInfo:BuildInfoRow Name="BuildManifestUrl" LabelText="{Loc build-info-build-manifest-url-label}" />
<buildInfo:BuildInfoRow Name="BuildManifestHash" LabelText="{Loc build-info-build-manifest-hash-label}" />
</BoxContainer>
</buildInfo:BuildInfoWindow>

View File

@ -0,0 +1,27 @@
using Robust.Client.AutoGenerated;
using Robust.Client.UserInterface.CustomControls;
using Robust.Client.UserInterface.XAML;
using Robust.Shared;
using Robust.Shared.Configuration;
namespace Content.Client._DV.UserInterfaces.BuildInfo.Controls;
[GenerateTypedNameReferences]
public sealed partial class BuildInfoWindow : DefaultWindow
{
[Dependency] private readonly IConfigurationManager _cfg = default!;
public BuildInfoWindow()
{
IoCManager.InjectDependencies(this);
RobustXamlLoader.Load(this);
Version.ValueText = _cfg.GetCVar(CVars.BuildVersion);
EngineVersion.ValueText = _cfg.GetCVar(CVars.BuildEngineVersion);
Fork.ValueText = _cfg.GetCVar(CVars.BuildForkId);
DownloadUrl.ValueText = _cfg.GetCVar(CVars.BuildDownloadUrl);
BuildHash.ValueText = _cfg.GetCVar(CVars.BuildHash);
BuildManifestUrl.ValueText = _cfg.GetCVar(CVars.BuildManifestUrl);
BuildManifestHash.ValueText = _cfg.GetCVar(CVars.BuildManifestHash);
}
}

View File

@ -0,0 +1,10 @@
build-info-window-title = Build Info
build-info-button = Build Info
build-info-tooltip = Metadata about the game you're running
build-info-version-label = Game Version:
build-info-engine-version-label = Engine Version:
build-info-fork-label = Fork ID:
build-info-download-url-label = Client Download:
build-info-build-hash-label = Client Hash:
build-info-build-manifest-url-label = Manifest URL:
build-info-build-manifest-hash-label = Manifest Hash: