UI/PauseMenu.razor

A Razor UI component for the in-game pause menu. It shows pause controls (Resume, Quit), displays WM and Tofu counts, high score, best time, and simple how-to-play text. It toggles pause on Escape and sets Scene.TimeScale to freeze/unfreeze the game, and can load a specified scene on Quit.

File Access
@using Sandbox;
@using Sandbox.UI;
@inherits PanelComponent
@namespace Sandbox

<root class="@(IsPaused ? "" : "hide")">
	<h2>PAUSED</h2>
	<div class="options">
		<div class="button" onclick=@OnResume>
			Resume
			</div>
			
		    <div class="button" onclick=@Quit>
			Quit
		    </div>

   </div>
</root>

<root>
	<div class="totalWM">
		<p>🍉 @ScoreManager.WMCount/10</p>

	</div>

	

</root>

<root>
	<div class="totaltofu">
		<p>⬜ @ScoreManager.TofuCount/10</p>

	</div>

	

</root>
<root>
	<div class="highscore">

		<p>High Score: @ScoreManager.HighScore</p>
	</div>
</root>
<root>
	<div class="besttime">

		<p>Best Time: @BestTimeString()</p>
	</div>
</root>
<root>
	<div class="howtoplay">

		<p>Press A & D to move.</p>
		<p>Press Space to jump.</p>
		<p>Press Shift to dodge.</p>
	</div>
</root>

@code
{
	[Property] public SceneFile nextscene { get; set; }
	public bool IsPaused { get; set; } 

	protected override void OnUpdate()
	{
		base.OnUpdate();

		if(Input.EscapePressed)
		{
			IsPaused = !IsPaused;
		}

		Scene.TimeScale = IsPaused ? 0 : 1;
	}

	void OnResume()
	{
		IsPaused = false;
	}

	

	void Quit()
	{
		Scene.Load(nextscene);
	}
	public string BestTimeString()
	{
		var time = ScoreManager.BestTime;
		var minutes = (int)time / 60;
		var seconds = (int)time % 60;
		return $"{minutes:00}:{seconds:00}";
	}


	protected override int BuildHash() => System.HashCode.Combine(IsPaused);
}