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