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

<root>
	<div class="title">BATTLEBUGS</div>
	<div class="content">
		<div class="button-container">
			@if (State == MenuState.Main)
			{
				<div class="button" onclick="@(() => ButtonPlay())">Play</div>
				<div class="button blue" onclick="@(() => ButtonStats())">Stats</div>
				<div class="button red" onclick="@(() => Quit())">Quit</div>
			}
			else if (State == MenuState.Play)
			{
				<div class="button" onclick="@(() => StartGame(true))">Bot Match</div>
				<div class="button" onclick="@(() => StartGame(false))">Host Game</div>
				<div class="button red" onclick="@(() => ButtonBack())">Back</div>
			}
			else if (State == MenuState.Stats)
			{
				<div class="button red" onclick="@(() => ButtonBack())">Back</div>
			}
		</div>
		@if (State == MenuState.Play)
		{
			<div class="content-panel">
				<LobbyList />
			</div>
		}
		else if (State == MenuState.Stats)
		{
			<div class="content-panel">
				<StatsPanel />
			</div>
		}
	</div>
</root>

@code
{
	public static MainMenu Instance { get; private set; }

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

	public enum MenuState
	{
		Main,
		Play,
		Stats
	}

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

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

	protected override void OnUpdate()
	{
		var camAngles = cameraAngles + new Angles(Mouse.Position.y - (Screen.Height / 2f), -Mouse.Position.x - (-Screen.Width / 2f), 0) * 0.0015f;
		Scene.Camera.WorldRotation = Angles.Lerp(Scene.Camera.WorldRotation, camAngles, Time.Delta * 5.0f);
	}

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

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

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

	void StartGame(bool isCpuGame = false)
	{
		GameManager.CpuMode = isCpuGame;
		Game.ActiveScene.LoadFromFile("scenes/game.scene");
	}

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

	protected override int BuildHash() => System.HashCode.Combine(State);
}