UI/GameHud.razor
@using System;
@using Sandbox;
@using Sandbox.UI;
@inherits PanelComponent

@* Every place is a lit 3D scene (World3D); the screens are just the Flash-game UI drawn over it. *@
<root>
	<div class="stage">
		@if ( Gm.IsValid() )
		{
			var s = Gm.Screen;
			if ( s == GameScreen.Title ) { <TitleScreen></TitleScreen> }
			else if ( s == GameScreen.Create ) { <CreateScreen></CreateScreen> }
			else if ( s == GameScreen.Intro ) { <IntroScreen></IntroScreen> }
			else if ( s == GameScreen.Town ) { <TownScreen></TownScreen> }
			else if ( s == GameScreen.Weaponsmith ) { <ShopScreen Armoury=@false></ShopScreen> }
			else if ( s == GameScreen.Armoury ) { <ShopScreen Armoury=@true></ShopScreen> }
			else if ( s == GameScreen.Magic ) { <MagicScreen></MagicScreen> }
			else if ( s == GameScreen.Church ) { <ChurchScreen></ChurchScreen> }
			else if ( s == GameScreen.Stats ) { <StatsScreen></StatsScreen> }
			else if ( s == GameScreen.Arena ) { <ArenaView></ArenaView><FightHud></FightHud> }
			else if ( s == GameScreen.Fitting ) { <FittingScreen></FittingScreen> }
		}
	</div>
</root>

@code
{
	GameManager Gm => GameManager.Instance;

	protected override void OnUpdate()
	{
		// draw everything on a fixed 1920x1080 stage, scaled to fit any window
		var sp = GetComponent<ScreenPanel>();
		if ( sp.IsValid() && Screen.Width > 0 && Screen.Height > 0 )
		{
			sp.AutoScreenScale = false;
			sp.Scale = MathF.Min( Screen.Width / 1920f, Screen.Height / 1080f );
		}
	}

	protected override int BuildHash() => HashCode.Combine( Gm?.Screen );
}