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.
@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;
}
}