UI/Panels/GameHud/PlayerHud/PlayerHud.razor
@using Sandbox;
@using Sandbox.UI;
@namespace Battlebugs
@inherits Panel
@attribute [StyleSheet]
<root>
<div class="player">
<img src="ui/player-banner.png" />
<div class="content">
@if (Board.Network.Owner is null)
{
<img src="ui/cpu.png" />
}
else
{
<img src=@($"avatar:{Board.Network.Owner.SteamId}") />
}
<span class="name">@Board.GameObject.Name</span>
<span class="score">🪙 @Board.Coins</span>
</div>
</div>
<div class="chat-container">
@if (Board == BoardManager.Local)
{
<TextEntry @ref="InputBox" onsubmit=@OnMessageSend AllowEmojiReplace=@(true) />
}
<div class="messages" @ref="ChatMessages" />
</div>
</root>
@code
{
public BoardManager Board { get; set; }
TextEntry InputBox { get; set; }
Panel ChatMessages { get; set; }
public static List<PlayerHud> Instances { get; private set; } = new List<PlayerHud>();
protected override void OnAfterTreeRender(bool firstTime)
{
base.OnAfterTreeRender(firstTime);
if (firstTime)
{
Instances.Add(this);
}
}
void OnMessageSend()
{
var message = InputBox.Text;
if (string.IsNullOrWhiteSpace(message))
{
InputBox.Blur();
return;
}
GameManager.Instance.SendChatMessage(message);
InputBox.Text = "";
}
public override void Tick()
{
base.Tick();
if (Input.Pressed("Chat"))
{
InputBox?.Focus();
}
}
public override void OnDeleted()
{
Instances.Remove(this);
}
public void AddChatMessage(string message)
{
var entry = new ChatEntry();
entry.Message = message;
ChatMessages.AddChild(entry);
StateHasChanged();
}
protected override int BuildHash() => System.HashCode.Combine(Board?.Coins, InputBox?.HasFocus);
}