UI/PlayerHud.razor
@using Sandbox;
@using Sandbox.UI;
@using Sandbox.Network;
@inherits PanelComponent
@namespace Sandbox
<root>
<div class="header">
<div class="players">
@foreach (var player in Connection.All)
{
<div class="player">
@if( player.IsHost )
{
<div class="name">@player.DisplayName</div>
<div class="score">@HostScore</div>
}
else
{
<div class="name">@player.DisplayName</div>
<div class="score">@GuestScore</div>
}
</div>
}
@if ( Connection.All.Count < 2 )
{
<div class="player">
<div class="name">#hud.bot</div>
<div class="score">@GuestScore</div>
</div>
}
</div>
</div>
</root>
@code
{
public Connection PlayerHost { get; set; }
public Connection PlayerGuest { get; set; }
[Property] GameObject gameManager;
[Sync] public int HostScore {get; set;}
[Sync] public int GuestScore {get; set;}
protected override void OnEnabled()
{
gameManager = Scene.FindAllWithTag("GameManager")?.FirstOrDefault();
PlayerHost = Connection.All.FirstOrDefault( p => p.IsHost );
PlayerGuest = Connection.All.FirstOrDefault( p => !p.IsHost );
}
protected override void OnUpdate()
{
HostScore = gameManager.GetComponent<GameManager>().HostScore;
GuestScore = gameManager.GetComponent<GameManager>().GuestScore;
}
/// <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(
PlayerHost,
PlayerGuest,
HostScore,
GuestScore
);
}