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