using System.Collections;
using OctoCore.Navigation.Data;
using OctoCore.UI;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
namespace OctoCore.Navigation
{
///
/// Main menu manager.
/// Handles Play, Quit and optional extra buttons.
/// Relies on OctoCore.Navigation for scene loading.
///
public class OctoMainMenu : MonoBehaviour
{
[Header("Scene Settings")]
[SerializeField, Tooltip("First scene to load on Play")]
private OctoSceneData _firstSceneData;
[Header("UI Settings")]
[SerializeField, Tooltip("Optional panel to show/hide (options, credits...)")]
private GameObject _optionalPanel;
[SerializeField] private GameObject _loadingScreen;
[SerializeField] private GameObject _loadingWheel;
[SerializeField] private Button _optionalPanelFirstButton;
[SerializeField] private Button _mainPanelDefaultButton;
private bool _isLoading = false;
void Awake()
{
// Hide optional panel on start if assigned
if (_optionalPanel)
_optionalPanel.SetActive(false);
// Make sure cursor is visible in main menu
Cursor.visible = true;
Cursor.lockState = CursorLockMode.None;
}
void Update()
{
if (_isLoading && _loadingWheel)
_loadingWheel.transform.Rotate(0, 0, -200f * Time.deltaTime);
}
///
/// Load the first scene. Called by the Play button.
///
public void OnPlayButton()
{
if (!OctoCore.Instance)
{
Debug.LogError("[OctoMainMenu] OctoCore instance not found");
return;
}
if (_firstSceneData == null)
{
Debug.LogError("[OctoMainMenu] FirstSceneData is null");
return;
}
_ = PlayRoutine();
}
private async Awaitable PlayRoutine()
{
_isLoading = true;
if (_loadingScreen) _loadingScreen.SetActive(true);
await System.Threading.Tasks.Task.Delay(5000);
#if !UNITY_EDITOR
Shader.WarmupAllShaders();
#endif
_isLoading = false;
OctoCore.Instance.Navigation.LoadScene(_firstSceneData);
}
///
/// Quit the application. Called by the Quit button.
///
public void OnQuitButton()
{
Application.Quit();
#if UNITY_EDITOR
UnityEditor.EditorApplication.isPlaying = false;
#endif
}
///
/// Toggle an optional panel (options, credits...). Called by any extra button.
///
public void OnTogglePanel()
{
if (_optionalPanel)
_optionalPanel.SetActive(!_optionalPanel.activeSelf);
}
// --- Add your custom button methods below ---
public void SelectDebugFirstButton()
{
EventSystem.current.SetSelectedGameObject(_optionalPanelFirstButton.gameObject);
}
public void SelectMainDefaultButton()
{
EventSystem.current.SetSelectedGameObject(_mainPanelDefaultButton.gameObject);
}
}
}