UI/ScoreboardRow.razor
@using Sandbox;
@using Sandbox.UI;
@inherits Panel
@namespace Sandbox

<root>
	<div class="player-info">
		<img src="@Player.AvatarUrl" alt="@Player.DisplayName avatar" class="avatar" />
		<span class="name">@Player.DisplayName</span>
		@if (Player.IsVR)
		{
			<span class="vr-tag">VR</span>
		}
	</div>
	<div class="stats">
		<span class="stat">K: @Player.Kills</span>
		<span class="stat">D: @Player.Deaths</span>
		<span class="stat">Ping: @GetPing(Player)</span>
	</div>
</root>

@code
{

	[Property] public PlayerSession Player { get; set; }

	private int GetPing(PlayerSession Player)
	{
		var connection = Connection.All.FirstOrDefault(c => c.Id == Player.Network.OwnerId);
		return connection?.Ping.CeilToInt() ?? -1;
	}

	/// <summary>
	/// the hash determines if the system should be rebuilt. If it changes, it will be rebuilt
	/// </summary>
	protected override int BuildHash() => System.HashCode.Combine( Player.AvatarUrl, Player.DisplayName, Player.Kills, Player.Deaths, Player.IsVR );
}