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 );
}