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