UI/StatsScreen.razor
@using System;
@using Sandbox;
@using Sandbox.UI;

@* Level up / stats, laid out like the Flash game: heading, stats with +, skill points, tick.
   Your gladiator stands in the 3D hall. *@
<root class="screen">
	<div class="head">
		<div class="title outlined">@(Gm.Heading ?? $"{P.Name}, level {P.Level} {(P.Enslaved ? "slave" : "gladiator")}")</div>
		<div class="sub outlined">@(Gm.Notice ?? Subtitle)</div>
	</div>

	<div class="sas-panel stats-panel">
		<StatsList></StatsList>
	</div>

	<div class="sas-panel points-panel">
		<div class="sas-label">skill points</div>
		<div class="points-number">@P.StatPoints</div>
	</div>

	<div class="sas-panel derived-panel">
		<div>@($"health {Catalog.MaxHealth( P.Vitality )}")</div>
		<div>@($"energy {Catalog.MaxEnergy( P.Stamina )}")</div>
		<div>@($"magicka {Catalog.MaxMagicka( P.Magicka )}")</div>
		<div>@($"armour {P.ArmourPoints()}")</div>
		<div>@($"{Catalog.Weapons[P.Weapon].Name}: {Catalog.Weapons[P.Weapon].Min + P.Strength * 2}-{Catalog.Weapons[P.Weapon].Max + P.Strength * 2}")</div>
	</div>

	<div class="gold-bar"><div class="coin"></div>@P.Gold</div>
	<div class="sas-round tick done" onclick=@(() => Gm.Go( Gm.StatsReturn ))><div class="mark"></div></div>
</root>

@code
{
	GameManager Gm => GameManager.Instance;
	Profile P => Profile.Current;

	static readonly string[] Sayings =
	{
		"A journey of a thousand miles begins with a single step.",
		"The crowd remembers the bold.",
		"Steel sharpens steel.",
		"Fortune favours the brave."
	};

	string Subtitle => Sayings[Math.Abs( P.Level ) % Sayings.Length];

	protected override int BuildHash() => HashCode.Combine( P?.StatPoints, P?.Vitality, P?.Stamina, P?.Magicka, P?.Strength, Gm?.Notice, Gm?.Heading );
}