UI/MainMenu.razor
@using System;
@using Sandbox;
@using Sandbox.UI;
@using System.Runtime.CompilerServices
@inherits PanelComponent
@namespace Sandbox
<root>
<div class="header">
<div class="title">Hit the Ball</div>
</div>
<div class="body">
<div class="buttons">
<div class="button play" onclick="@(() => OnPlay(true))">#menu.play</div>
<div class="button settings" onclick="@(() => OnSettings(true))">#menu.settings</div>
<div class="button quit" onclick="@(() => OnQuit())">#menu.quit</div>
</div>
<div class="panel_background @(playVisible ? "" : "hidden")">
<div class="panel">
<div class="games">
<div class="button" onclick="@(() => Scene.LoadFromFile("scenes/Lobby.scene"))">
<img class="icon" src="" alt="p42"/>
<label class="name">#mode.twoplayers</label>
</div>
@* <div class="button">
<img class="icon" src="" alt="p44"/>
<label class="name">Pong for Four</label>
</div> *@
</div>
<div class="button back" onclick="@(() => OnPlay(false))">#menu.back</div>
</div>
</div>
<div class="panel_background @(settingsVisible ? "" : "hidden")">
<div class="panel">
<div class="option color">
<label class="option name">#settings.color</label>
<div class="button" onclick="@(() => TogglePalette())">
<div class="color @GameSettings.Color"></div>
</div>
</div>
<div class="option sens">
@* <div class="button reset" onclick="@(() => { ResetSens(1.0f); })">R</div> *@
<label class="option name">#settings.sensitivity</label>
<div class="adjuster">
<div class="option adjust" onclick=@(() => SetSens("decrement", 0.1f, 0.1f))><</div>
<div class="option value">@Sensitivity</div>
<div class="option adjust" onclick=@(() => SetSens("increment", 0.1f, 0.1f))>></div>
</div>
</div>
<div class="button back" onclick="@(() => OnSettings(false))">#menu.back</div>
</div>
<div class="palette @(paletteVisible ? "" : "hidden")">
<div class="colors">
<div class="color blue" onclick="@(() => PickColor("blue"))"></div>
<div class="color green" onclick="@(() => PickColor("green"))"></div>
<div class="color darkcyan" onclick="@(() => PickColor("darkcyan"))"></div>
<div class="color red" onclick="@(() => PickColor("red"))"></div>
<div class="color purple" onclick="@(() => PickColor("purple"))"></div>
<div class="color saddlebrown" onclick="@(() => PickColor("saddlebrown"))"></div>
<div class="color gray" onclick="@(() => PickColor("gray"))"></div>
<div class="color lightblue" onclick="@(() => PickColor("lightblue"))"></div>
<div class="color lightgreen" onclick="@(() => PickColor("lightgreen"))"></div>
<div class="color cyan" onclick="@(() => PickColor("cyan"))"></div>
<div class="color lightcoral" onclick="@(() => PickColor("lightcoral"))"></div>
<div class="color violet" onclick="@(() => PickColor("violet"))"></div>
<div class="color yellow" onclick="@(() => PickColor("yellow"))"></div>
<div class="color white" onclick="@(() => PickColor("white"))"></div>
</div>
<div class="button back" onclick="@(() => TogglePalette())">#menu.back</div>
</div>
</div>
</div>
</root>
@code
{
float Sensitivity = GameSettings.Sensitivity;
bool playVisible = false;
bool settingsVisible = false;
bool paletteVisible = false;
void OnPlay(bool setVisible)
{
if (settingsVisible) return;
playVisible = setVisible;
}
void OnSettings(bool setVisible)
{
if (playVisible) return;
settingsVisible = setVisible;
}
void TogglePalette()
{
if (paletteVisible)
paletteVisible = false;
else
paletteVisible = true;
}
void SetSens(string operation, float min, float step)
{
if (operation == "increment")
{
Sensitivity = MathF.Round(Math.Max(min, Sensitivity + step), 3);
GameSettings.Sensitivity = Sensitivity;
}
else if (operation == "decrement")
{
Sensitivity = MathF.Round(Math.Max(min, Sensitivity - step), 3);
GameSettings.Sensitivity = Sensitivity;
}
}
void ResetSens(float value)
{
Sensitivity = value;
GameSettings.Sensitivity = value;
}
void PickColor(string color)
{
GameSettings.Color = color;
paletteVisible = false;
Log.Info(GameSettings.Color);
}
void OnQuit()
{
Game.Close();
}
/// <summary>
/// the hash determines if the system should be rebuilt. If it changes, it will be rebuilt
/// </summary>
protected override int BuildHash() => System.HashCode.Combine( settingsVisible, playVisible, paletteVisible );
}