UI/GameState.razor
@using Sandbox;
@using System.Linq;

@inherits PanelComponent

<root>
    <div class="main">
        <div class="top">
            <div class="game">Deathmatch</div>
            <div class="timer">@TimeLeft</div>
        </div>

        @if ( !Player.Local.IsValid() )
        {
            return;
        }

        <div class="scorebars">
            @{
                var players = Scene.GetAll<PlayerData>().OrderByDescending(p => p.Kills).ToList();
                var localPlayer = Player.Local.PlayerData;
                var leader = players.FirstOrDefault();
                var secondBar = localPlayer == leader
                    ? players.Skip(1).FirstOrDefault()
                    : localPlayer;
            }

            @if (leader != null)
            {
                <GameStatePlayer [email protected] Player=@leader IsLocalPlayer=@(leader == localPlayer) />
            }

            @if (secondBar != null && secondBar != leader)
            {
                <GameStatePlayer [email protected] Player=@secondBar IsLocalPlayer=@(secondBar == localPlayer) />
            }
        </div>
    </div>
</root>

@code
{
    protected override int BuildHash() => HashCode.Combine(Time.Now);
    protected string TimeLeft => TimeSpan.FromSeconds(GameManager.Current.GameTimeRemaining).ToString(@"mm\:ss");

    private long GetSteamId(PlayerData player)
    {
        if (player.IsBot) return 76561198006096289;
        return player.SteamId;
    }
}