ui/PanelComponents/MainMenu.razor
@using Sandbox;
@using Sandbox.UI;
@namespace SS1
@inherits PanelComponent

<root>
	<div class="title" style="color:@(Color.Lerp(new Color(0f, 0.5f, 0f), new Color(0.7f, 1f, 0.7f), 0.5f + Utils.FastSin(Time.Now * 2f) * 0.5f).Rgba);">Sausage Survivors</div>
	<div class="content">
		<div class="button-container">
			@if (State == MenuState.Main)
			{
				<div class="button" onclick="@(() => ButtonStart(true))">Play</div>
				<div class="button red" onclick="@(() => Quit())">Quit</div>

				@*<div class="button" onclick="@(() => ButtonStart(true))">Start Singleplayer</div>
			<div class="button" onclick="@(() => ButtonStart())">Start Multiplayer</div>
			<div class="button blue" onclick="@(() => ButtonLobbies())">Lobbies</div>
			<div class="button red" onclick="@(() => Quit())">Quit</div>*@
			}
			else if (State == MenuState.Lobbies)
			{
				<div class="button red" onclick="@(() => ButtonBack())">Back</div>
			}
		</div>
		@if (State == MenuState.Lobbies)
		{
			<div class="content-panel">
				<LobbyList />
			</div>
		}
		else if (State == MenuState.Stats)
		{
			<div class="content-panel">
			</div>
		}
	</div>

	<DifficultyPanel></DifficultyPanel>
	<LeaderboardPanel [email protected] IsSurvival=@(false) LabelText=@("Fastest Victory") style="right: 165px;"></LeaderboardPanel>
	@*<LeaderboardPanel [email protected] IsSurvival=@(true) LabelText=@("Longest Survival") style="right: 400px;"></LeaderboardPanel>*@

	@if (MenuManager.Instance.ElapsedTime < 0.75f)
	{
		<div class="fade_in" style="background-color:@(Color.Black.WithAlpha(Utils.Map(MenuManager.Instance.ElapsedTime, 0f, 0.75f, 1f, 0f)).Rgba);"></div>
	}
</root>

@code
{
	public static MainMenu Instance { get; private set; }
	public static bool IsSingleplayerGame { get; private set; } = true;

	public MenuState State = MenuState.Main;
	Angles cameraAngles = Angles.Zero;

	public enum MenuState
	{
		Main,
		Lobbies,
		Stats
	}

	protected override void OnAwake()
	{
		Instance = this;
	}

	protected override void OnStart()
	{
		cameraAngles = Scene.Camera.WorldRotation;
	}

	void ButtonStart(bool isSingleplayer = false)
	{
		IsSingleplayerGame = isSingleplayer;
		Game.ActiveScene.LoadFromFile("scenes/game.scene");
	}

	void ButtonLobbies()
	{
		State = MenuState.Lobbies;
		Sound.Play("ui.button.press");
	}

	void ButtonBack()
	{
		State = MenuState.Main;
		Sound.Play("ui.navigate.back");
	}

	void Quit()
	{
		if (Game.IsEditor)
		{
			Log.Info("Quit");
		}
		else
		{
			Game.Close();
		}
	}

	protected override int BuildHash()
	{
		float timeHash = MenuManager.Instance.ElapsedTime < 0.75f ? MenuManager.Instance.ElapsedTime : 0f;
		return HashCode.Combine(
			State,
			timeHash,
			Time.Now // todo
		);
	}
}