ui/SettingsPanel2.razor
@using Sandbox;
@using Sandbox.UI;
@inherits Panel
@attribute [StyleSheet("SettingsPanel2.razor.scss")]

@{
	var manager = Manager.Instance;
}
<root>
	<div class="outer_container" style="height: @(manager.GameState == GameState.Menu ? 35f : 60f)%;">
		@* <div class="title" style="transform: rotate(@(Utils.FastSin(Time.Now * 0.9f) * 1.3f)) scale(@(0.95f + Utils.FastSin(Time.Now * 1.5f) * 0.02f));">Settings</div> *@

		<div class="options">
			<div class="volume_container">
				<div class="volume_title">Volume</div>

				<div class="volume_row muted">
					<div class="volume_label" style="opacity:@(manager.IsMuted ? 0.3f : 1f);">SFX</div>
					<SliderControl style="min-width: 300px;" Value:bind="@manager.SfxVolume" Min=@(0f) Max=@(100f) Step=@(1) OnValueChanged=@SetSfxVolume></SliderControl>
				</div>

				<div class="volume_row">
					<div class="volume_label" style="opacity:@(manager.IsMuted ? 0.3f : 1f);">Music</div>
					<SliderControl style="min-width: 300px;" Value:bind="@manager.MusicVolume" Min=@(0f) Max=@(100f) Step=@(1) OnValueChanged=@SetMusicVolume></SliderControl>
				</div>

				<div class="volume_row">
					<div class="volume_label" style="color:@(manager.IsMuted ? "#ff5555bb" : "#ffffffbb");">Mute</div>
					<SwitchControl Value:bind="@manager.IsMuted" OnValueChanged=@SetMute></SwitchControl>
				</div>
			</div>
		</div>

		<div class="button_container">
			@if(manager.GameState != GameState.Menu)
			{
				<div class="button" onmouseover=@(() => OnMouseOverButton() ) onclick=@(() => RestartButtonClicked() )>
					<div class="button_icon" style="background-image:url(@($"textures/ui_restart_border.png"));"></div>
					<div class="button_text">Restart</div>
				</div>

				<div class="button" onmouseover=@(() => OnMouseOverButton() ) onclick=@(() => MenuButtonClicked() )>
					<div class="button_icon" style="background-image:url(@($"textures/ui_door_border.png"));"></div>
					<div class="button_text">Main Menu</div>
				</div>
			}

			<div class="button" onmouseover=@(() => OnMouseOverButton() ) onclick=@(() => BackButtonClicked() )>
				<div class="button_icon" style="background-image:url(@($"textures/ui_x_border.png"));"></div>
				<div class="button_text">@(manager.GameState == GameState.Menu ? "Back" : "Close")</div>
			</div>
		</div>
	</div>
</root>

@code
{
	public void RestartButtonClicked()
	{
		Manager.Instance.PlaySfx("click_0");

		if(Manager.Instance.GameState == GameState.Playing)
		{
			Manager.Instance.IsLevelActive = false;
			Manager.Instance.ShouldRestart = true;
			Manager.Instance.ShouldReturnToMenu = false;
		}
		else
		{
			Manager.Instance.StartNewRun();
		}

		Manager.Instance.IsSettingsOpen = false;
	}

	public void MenuButtonClicked()
	{
		Manager.Instance.PlaySfx("click_0");

		if(Manager.Instance.GameState == GameState.Playing)
		{
			Manager.Instance.IsLevelActive = false;
			Manager.Instance.ShouldReturnToMenu = true;
			Manager.Instance.ShouldRestart = false;
		}
		else
		{
			Manager.Instance.StartMenu();
		}

		Manager.Instance.IsSettingsOpen = false;
	}

	public void BackButtonClicked()
	{
		Manager.Instance.PlaySfx("click_0");
		Manager.Instance.IsSettingsOpen = false;
	}

	void OnMouseOverButton()
	{
		Manager.Instance.PlaySfx("click_1");
	}

	protected override int BuildHash()
	{
		// todo
		return HashCode.Combine(
			Manager.Instance.IsMuted,
			Time.Now 
		);
	}

	void SetMusicVolume(float value)
	{
		if (Manager.Instance.IsMuted)
			return;

		Manager.Instance.RefreshMusicMixerVolume();
	}

	void SetSfxVolume(float value)
	{
		if (Manager.Instance.IsMuted)
			return;

		Manager.Instance.RefreshSfxMixerVolume();
	}

	void SetMute(bool value)
	{
		// Log.Info($"SetMute - Manager.Instance.IsMuted: {Manager.Instance.IsMuted} value: {value}");

		Manager.Instance.SetMute(value);

		Manager.Instance.PlaySfx("click_0");
	}
}