UI/Panels/GameHud/GameHud.razor
@using System;
@using Sandbox;
@using Sandbox.UI;
@namespace Battlebugs
@inherits Panel
@attribute [StyleSheet]

<root>
	<div class="header">
		@if (GameManager.Instance.Boards.Count > 0)
		{
			<PlayerHud [email protected](0) />
		}
		<div class="middle">
			<div class="bar">
				@if (GameManager.Instance.Boards.Count > 0)
				{
					var fill = GameManager.Instance.Boards.ElementAt(0).GetScorePercent() * 100f;
					<div class="fill" style="width: @(fill)%" />
				}
			</div>
			<div class="banner">
				<label>@GetHeader()</label>
				<div class="timer-bar @(GameManager.Instance.IsFiring ? "show" : "")">
					<div class="fill" style="width: @(100f - GameManager.Instance.TimeSinceTurnStart / 15f * 100f)%" />
				</div>
			</div>
		</div>
		@if (GameManager.Instance.Boards.Count > 1)
		{
			<PlayerHud [email protected](1) />
		}
	</div>
</root>

@code
{
	public static GameHud Instance { get; private set; }

	protected override void OnAfterTreeRender(bool firstTime)
	{
		base.OnAfterTreeRender(firstTime);

		if (firstTime)
		{
			Instance = this;
		}
	}

	string GetHeader()
	{
		if (!BoardManager.Local.IsValid() && GameManager.Instance.Boards.Count >= 2)
		{
			if (GameManager.Instance.State == GameState.Placing)
			{
				return "Waiting for players to place bugs...";
			}
			else if (GameManager.Instance.CurrentPlayer == GameManager.Instance.Boards.FirstOrDefault())
			{
				return $"It's {GameManager.Instance.Boards.FirstOrDefault().GameObject.Name}'s turn!";
			}

			return $"It's {GameManager.Instance.Boards.LastOrDefault().GameObject.Name}'s turn!";
		}

		if (GameManager.Instance.State == GameState.Placing)
		{
			return "Place your bugs!";
		}
		if (GameManager.Instance.CurrentPlayer == BoardManager.Local)
		{
			return "It's your turn!";
		}
		return "Your opponent is thinking...";
	}

	protected override int BuildHash() => System.HashCode.Combine(GameManager.Instance.State, GameManager.Instance.IsFiring ? GameManager.Instance.TimeSinceTurnStart.ToString() : "");
}