UI/Warmup.razor
@using Sandbox;
@using Sandbox.UI;
@inherits PanelComponent
@implements ILocalPlayerEvent

<root>

    <div class="number">@Number</div>

</root>

@code
{
    string lastNumber = "";
    protected override int BuildHash() => HashCode.Combine(Number);

    void ILocalPlayerEvent.OnJump()
    {
        Panel.FlashClass("jump", 0.1f);
    }

    public string Number
    {
        get
        {
			var secondsLeft = GameSettings.WarmupTime - GameManager.Current.TimeElapsed;
            if (secondsLeft < 0.5f) return "GO";

            return secondsLeft.ToString("n0");
        }
    }

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

        var isHidden = GameManager.Current.TimeElapsed > GameSettings.WarmupTime || GameSettings.GameLoop == false;

        if (string.IsNullOrEmpty(lastNumber)) lastNumber = Number;
        if (!isHidden && Number != lastNumber)
        {
            lastNumber = Number;
            Panel.FlashClass("change", 0.1f);
            Sound.Play("clock-tick");
            if (Number == "GO")
            {
                Sound.Play("game-notification-1");
            }
        }
        Panel.SetClass("visible", !isHidden);
    }
}