UI/CountdownNumber.razor

A UI Razor panel that displays a countdown number or the text "GO" when value is zero or less. It tracks changes to Value each Tick, toggles a "pulse" CSS class to animate changes, and plays a "countdown" sound when the value changes. It also overrides BuildHash to depend on Value.

Networking
@using Sandbox;
@using Sandbox.UI;

@namespace Machines.UI
@inherits Panel

<root>
    @(Value > 0 ? Value.ToString() : "GO")
</root>

@code
{
    public int Value { get; set; }
    private int _lastValue = -1;
    private bool _needsReset;

    public override void Tick()
    {
        if ( _needsReset )
        {
            _needsReset = false;
            AddClass( "pulse" );
            return;
        }

        if ( Value == _lastValue )
            return;

        _lastValue = Value;
        RemoveClass( "pulse" );
        _needsReset = true;
        Sound.Play( "countdown" );
    }

    protected override int BuildHash() => Value;
}