UI/PlayerHud/Components/PauseMenu.razor

A Razor UI component for the in-game pause menu. It shows Resume and Settings controls, lists selectable character classes as buttons, and a Main Menu option that disconnects and loads the menu scene. It also toggles mouse visibility while paused and forces rebuild every frame via BuildHash.

NetworkingFile Access
🌐 scenes/menu/menu.scene
@using System;
@using Sandbox.UI;
@using KOTH.PlayerExp;

@namespace KOTH.UI
@inherits Panel

@attribute [StyleSheet]

<root class="love">
	@if (PlayerState.IsPaused)
	{
		<div onclick="@(() => { PlayerState.IsPaused = false; })">Resume</div>
		<div @onclick="@(() => Game.Overlay.ShowSettingsModal())">Settings</div>

		@foreach (CharacterDefinition Class in ActiveClassList.ClassDefinitions)
		{
			<button class="class-button" onclick="@(() => SelectClass(Class))" style="width: 100%; cursor: pointer; color: white; padding: 24px; background: @(PlayerState.Local.RequestedCharacterDefinition == Class ? "rgb(20, 20, 20, 0.5)" : "rgb(20, 20, 20, 0.25)") ;">@Class.CharacterName</button>
		}

		<div onclick="@(() => GoToMenu())">Main Menu</div>
	}
</root>

@code
{
	private void GoToMenu()
	{
		Game.IsPaused = false;
		Networking.Disconnect();
		Game.ActiveScene.LoadFromFile("scenes/menu/menu.scene");
	}

	protected override int BuildHash()
	{
		return HashCode.Combine(Time.Now);
	}

	public override void Tick()
	{
		Mouse.Visibility = PlayerState.IsPaused ? MouseVisibility.Visible : MouseVisibility.Hidden;
	}

	public ClassList ActiveClassList { get => GameMode.Instance.Components.Get<ClassList>(); }

	private void SelectClass(CharacterDefinition Class)
	{
		PlayerState.Local.RequestCharacterDefinition(Class);
		PlayerState.IsPaused = false;
	}
}