Hud.razor
@using System;
@using Sandbox;
@using Sandbox.UI;
@inherits PanelComponent
@namespace NiuLai

<root class="root">
	@if ( GameFlow.Screen == GameScreen.Title )
	{
		<div class="screen title">
			<div class="title-tall"></div>
			<div class="title-stamp"></div>
			<div class="title-wash"></div>
			<div class="title-stack">
				<div class="seal">@GameInfo.DragonSeal</div>
				<div class="studio">@GameInfo.Studio · 手搓海报三张</div>
				<div class="loading">五年手搓加载中…… Five-year handmade loading……</div>
				<div class="title-cn">牛来</div>
				<div class="title-en">(Niu Lai)</div>
				<div class="tag">@GameInfo.Tagline</div>
				<div class="tag-en">@GameInfo.TaglineEn</div>
				<div class="poster-note">跟着牛来走完迁徙。建模有点歪。这是电影。</div>
				<div class="poster-note en">Walk the migration with Niu Lai. Model a bit crooked. This is the movie.</div>
				<div class="menu-links">
					<div class="btn primary" @onclick="@OnStart">开始 / START</div>
					<div class="btn" @onclick="@OnQuit">退出 / QUIT</div>
				</div>
			</div>
			<div class="ver">@GameInfo.Package · @GameInfo.VersionLabel · bootleg cut</div>
		</div>
	}
	else if ( GameFlow.Screen == GameScreen.Paused )
	{
		<div class="screen pause">
			<div class="panel">
				<div class="pause-stamp"></div>
				<div class="panel-title">暂停 / PAUSED</div>
				<div class="btn primary" @onclick="@OnResume">继续 / CONTINUE</div>
				<div class="btn" @onclick="@OnTitle">标题 / TITLE</div>
			</div>
		</div>
	}
	else if ( GameFlow.Screen == GameScreen.Ending )
	{
		<div class="screen ending">
			<div class="end-poster"></div>
			<div class="end-card">
				<div class="end-stamp"></div>
				<div class="end-title">雨后轻风有香</div>
				<div class="end-sub">After Rain, Light Wind Have Fragrance · 孙丽芳</div>
				<div class="end-sub">片尾曲正在播放 · ending song from the movie</div>
				@foreach ( var line in Lines.Ending )
				{
					<div class="end-line">@line.Cn</div>
					<div class="end-line en">@line.En</div>
				}
				<div class="end-stat">勇气 @GameState.Courage · 草 @GameState.GrassEaten 丛 · @GameState.ChapterCn</div>
				<div class="btn primary" @onclick="@OnTitle">再看一遍 / WATCH AGAIN</div>
			</div>
		</div>
	}
	else
	{
		<div class="play">
			<div class="top">
				<div class="quest">
					<div class="q-cn">@GameState.QuestLine.Cn</div>
					<div class="q-en">@GameState.QuestLine.En</div>
				</div>
				<div class="meters">
					<div class="meter">
						<div class="m-k">章节 CHAPTER</div>
						<div class="m-v">@GameState.ChapterCn</div>
					</div>
					<div class="meter">
						<div class="m-k">勇气 COURAGE</div>
						<div class="m-v">@GameState.Courage</div>
					</div>
					<div class="meter">
						<div class="m-k">草 GRASS</div>
						<div class="m-v">@GameState.GrassBag@(GameState.HasMilk ? " · 奶" : "")</div>
					</div>
					<div class="meter">
						<div class="m-k">名场面 SCENES</div>
						<div class="m-v">@GameState.SceneScore / @GameState.SceneTotal</div>
					</div>
				</div>
			</div>

			@if ( GameState.InVoid )
			{
				<div class="banner">纯黑的梦 · THE BLACK DREAM</div>
			}

			@if ( GameState.Talking )
			{
				<div class="talk">
					<div class="who">@GameState.Speaker</div>
					<div class="cn">@GameState.CurrentLine.Cn</div>
					<div class="en">@GameState.CurrentLine.En</div>
					<div class="next">E / Enter 继续 continue</div>
				</div>
			}
			else if ( Chatter.Visible )
			{
				<div class="bark">
					<div class="who">@Chatter.Who</div>
					<div class="cn">@Chatter.Cn</div>
					<div class="en">@Chatter.En</div>
				</div>
			}

			@if ( !GameState.Talking && !string.IsNullOrEmpty( GameState.PromptCn ) )
			{
				<div class="prompt">
					<div class="cn">@GameState.PromptCn</div>
					<div class="en">@GameState.PromptEn</div>
				</div>
			}

			<div class="help">WASD 走 · 鼠标看 · 空格跳 · E 互动 · F 哞 · Esc 暂停</div>
		</div>
	}

	@if ( FilmCut.Playing )
	{
		<div class="letter-top"></div>
		<div class="letter-bot"></div>
		@if ( !string.IsNullOrEmpty( FilmCut.CardCn ) )
		{
			<div class="cut-card">
				<div class="cut-k">院线录音 · THEATER TAPE</div>
				<div class="cut-cn">@FilmCut.CardCn</div>
				<div class="cut-en">@FilmCut.CardEn</div>
				<div class="cut-skip">E 跳过 / skip this handmade shot</div>
			</div>
		}
	}

	@if ( Trophies.ToastVisible && Trophies.Toast is TrophyDef ach )
	{
		<div class="ach">
			<div class="ach-k">成就 ACHIEVEMENT</div>
			<div class="ach-t">@ach.Title</div>
			<div class="ach-d">@ach.Description</div>
		</div>
	}
</root>

@code
{
	int _sig;

	protected override void OnUpdate()
	{
		var sig = HashCode.Combine(
			HashCode.Combine(
				(int)GameFlow.Screen,
				(int)GameState.Beat,
				GameState.Courage,
				GameState.GrassBag,
				GameState.GrassEaten,
				GameState.SceneScore,
				GameState.Talking,
				GameState.DialogueIndex
			),
			GameState.PromptCn,
			GameState.InVoid,
			Trophies.Version,
			FilmCut.Version,
			Chatter.Version
		);
		if ( sig == _sig )
			return;

		_sig = sig;
		StateHasChanged();
	}

	void OnStart()
	{
		GameFlow.StartNewGame();
	}

	void OnResume()
	{
		GameFlow.SetScreen( GameScreen.Playing );
	}

	void OnTitle()
	{
		GameFlow.BackToTitle();
	}

	void OnQuit()
	{
		Game.Close();
	}
}