UI/Nameplate.razor
@using Sandbox;
@using Sandbox.UI;
@inherits PanelComponent

@if (Player.IsValid() && !Player.IsLocalPlayer )
{
	<root>

		<div class="card">
			@if ( !Player.IsBot )
			{
				<div class="avatar" style="background-image: url( avatar:@Player.SteamId )"></div>
			}
			else
			{
				<label class="name">🤖</label>
			}
			<label class="name">@Player.DisplayName</label>
			@if ( IsVoicePlaying )
			{
				<div class="voice">volume_up</div>
			}
		</div>

	</root>
}

@code
{
	[Property] public Player Player;

    Sandbox.Voice voiceComponent;

    protected override void OnEnabled()
    {
        base.OnEnabled();
        voiceComponent = GameObject.Root.Components.GetInDescendantsOrSelf<Voice>();
    }

    public bool IsVoicePlaying
    {
        get
        {
            if (voiceComponent is null) return false;
            return voiceComponent.LastPlayed < 0.5f;
        }
    }

    /// <summary>
    /// Rebuild if the owner connection changes
    /// </summary>
    protected override int BuildHash() => System.HashCode.Combine(Network.Owner, IsVoicePlaying);
}