Debugging/StreamerDebugUI.razor
@using Sandbox;
@using Sandbox.UI;
@inherits PanelComponent
@namespace Sandbox

@*
    On-screen overlay: a cheat-sheet of the chat commands, the poop scoreboard, and - when we're connected
    to a stream - some live stats read straight off the static Streamer class.
*@

<root>
    <div class="Information">

        <ScoreBoard></ScoreBoard>

        @* The commands viewers can type in chat. These map to StreamGameManager / StreamPlayer. *@
        <div class="help">
            <div><div class="cmd">spawn</div><div class="action">Spawn / respawn your avatar</div></div>
            <div><div class="cmd">go</div><div class="action">Walk forward</div></div>
            <div><div class="cmd">back</div><div class="action">Walk backward</div></div>
            <div><div class="cmd">move</div><div class="action">Wander somewhere random</div></div>
            <div><div class="cmd">left</div><div class="action">Turn left</div></div>
            <div><div class="cmd">right</div><div class="action">Turn right</div></div>
            <div><div class="cmd">turn</div><div class="action">Turn around</div></div>
            <div><div class="cmd">duck</div><div class="action">Toggle ducking</div></div>
            <div><div class="cmd">poop</div><div class="action">Poop (scores a point)</div></div>
        </div>

        @* Streamer.IsActive is true once we're connected to a service like Twitch. *@
        @if ( Streamer.IsActive )
        {
            <div class="help">
                <div>
                    <div class="cmd">Viewers</div>
                    <div class="action">@Streamer.ViewerCount</div>
                </div>
                <div>
                    <div class="cmd">Title</div>
                    <div class="action">@Streamer.Title</div>
                </div>
                <div>
                    <div class="cmd">Length</div>
                    <div class="action">@((System.DateTime.Now - Streamer.StartedAt).Humanize( 1 ))</div>
                </div>
            </div>
        }
        else
        {
            <div>Not Connected</div>
        }

    </div>
</root>

@code
{
    /// <summary>
    /// Rebuild whenever the connection state or viewer count changes so the stats stay current.
    /// </summary>
    protected override int BuildHash() => System.HashCode.Combine( Streamer.IsActive, Streamer.ViewerCount, Streamer.Viewers );
}