ui/Panels/DeathPanel.razor

A UI Razor panel for the death screen. It displays a victory or death label, a retry/restart button (disabled for proxy clients), shows a controller input hint when using a gamepad, and triggers Manager.Instance.Restart() when activated.

Native Interop
@using Sandbox;
@using Sandbox.UI;
@namespace SS1
@inherits Panel
@attribute [StyleSheet("DeathPanel.razor.scss")]

<root>
	<div class="death_panel">
		<div class="death_label">
			@(Manager.Instance.IsVictory ? "Victory!" : "You're dead...")
		</div>

		<div class="death_button @(Manager.Instance.IsProxy ? "disabled" : "")" onclick=@(() => DeathButtonClicked())>
			@if(Input.UsingController && !Manager.Instance.IsProxy) { <InputHint class="@(_retryButton.IsHeld ? "pressed" : "")" Button=@_retryButton.Action /> }
			@($"{(Manager.Instance.IsVictory ? "Restart" : "Retry")}{(Manager.Instance.IsProxy ? " (Host Only)" : "")}")
		</div>
	</div>
</root>

@code
{
	readonly GamepadButton _retryButton = new("reload");

	public override void Tick()
	{
		base.Tick();

		if ( _retryButton.Update( !Manager.Instance.IsPauseMenuOpen && !Manager.Instance.IsProxy ) )
			DeathButtonClicked();
	}

	protected override int BuildHash()
	{
		var seconds = MathX.FloorToInt(Manager.Instance.ElapsedTime.Relative);

		return HashCode.Combine(
			seconds,
			Input.UsingController,
			_retryButton.IsHeld
		);
	}

	void DeathButtonClicked()
	{
		if (Manager.Instance.IsProxy)
			return;

		Manager.Instance.Restart();
	}
}