A Razor UI component for the player's HUD. It renders a watermark, top-bar strings, build options for a selected object, a death notice, and a next-turn button, and it reads player UI state each update and sends a build or next-turn command to the GameManager.
@using System;
@using Forp.Game
@inherits PanelComponent
<root>
<watermark>Forp Infdev @(DateTime.Now.ToShortDateString())</watermark>
<static-bar>
@foreach (string TopMenuString in UiInfo.GetTopBarStrings())
{
<div>@TopMenuString</div>
}
</static-bar>
@if (UiInfo.AnythingSelected())
{
<build-unit-container>
@foreach (var (BuildString, Index) in UiInfo.BuildObjects.Select((v, i) => (v, i)))
{
<build-unit>
<button onclick="@(() => OnUnitBuildClick(Index))">@BuildString</button>
</build-unit>
}
</build-unit-container>
}
@if (GamePlayer.Local.IsDead())
{
<dead>YOU! ARE DEAD</dead>
}
<next-turn-button onclick="@OnNextTurnClick" style="background-color: @GetNextColour();">
@(GetNextTurnString())
</next-turn-button>
</root>
@code
{
protected override int BuildHash()
{
return HashCode.Combine(Time.Now);
}
private FPlayerUiInfo UiInfo;
protected override void OnUpdate()
{
base.OnUpdate();
if (!GamePlayer.Local.IsValid())
{
return;
}
GamePlayer.Local.GetPlayerUiInfo(out UiInfo);
}
private string GetNextColour()
{
return GameManager.Instance.WaitingForLocal() ? "red" : "black";
}
private void OnNextTurnClick()
{
GameManager.Instance.NextTurn();
}
private string GetNextTurnString()
{
GameManager.Instance.GetWaitingConnections(out var Waiting, out var Total);
return $"{Waiting}/{Total}";
}
private void OnUnitBuildClick(int Index)
{
var SelectedSplitStrings = UiInfo.BuildObjects[Index].Split(" ", 2);
var BuildId = SelectedSplitStrings[0];
var Cost = int.Parse(SelectedSplitStrings[1].TrimStart("\u00A3"));
GameManager.Instance.Server_QueueHexObject(BuildId, UiInfo.SelectedHex, Cost);
}
}