using UnityEngine;
using UnityEngine.UIElements;
using UnityEngine.SceneManagement;
namespace MegaKoop.UI
{
///
/// Controller pro Main Menu s UI Toolkit
///
public class MainMenuController : MonoBehaviour
{
[Header("UI Document")]
[SerializeField] private UIDocument uiDocument;
[SerializeField] private StyleSheet mainMenuStyles;
[Header("Scene Names")]
[SerializeField] private string gameSceneName = "GameScene";
[Header("Controllers")]
[SerializeField] private MultiplayerLobbyController multiplayerLobbyController;
[Header("Audio")]
[SerializeField] private AudioSource audioSource;
[SerializeField] private AudioClip buttonClickSound;
[SerializeField] private AudioClip buttonHoverSound;
// Root element
private VisualElement root;
// Main Menu Elements
private Button newGameButton;
private Button continueButton;
private Button multiplayerButton;
private Button settingsButton;
private Button quitButton;
// Settings Panel Elements
private VisualElement settingsPanel;
private DropdownField qualityDropdown;
private Toggle fullscreenToggle;
private DropdownField resolutionDropdown;
private Slider masterVolumeSlider;
private Slider musicVolumeSlider;
private Slider sfxVolumeSlider;
private Button applyButton;
private Button backButton;
private void OnEnable()
{
// Získání UI Document
if (uiDocument == null)
uiDocument = GetComponent();
// If there's no UIDocument, this scene likely uses UGUI. Disable this Toolkit controller.
if (uiDocument == null)
{
Debug.LogWarning("[MainMenuController] UIDocument not found. This script is for UI Toolkit. If you use UGUI, remove this component.");
enabled = false;
return;
}
// Získání MultiplayerLobbyController
if (multiplayerLobbyController == null)
multiplayerLobbyController = GetComponent();
root = uiDocument.rootVisualElement;
if (root == null)
{
Debug.LogWarning("[MainMenuController] rootVisualElement is null. Disabling Toolkit controller.");
enabled = false;
return;
}
// Přidání USS stylů (pokud nejsou už v UXML)
if (mainMenuStyles != null && !root.styleSheets.Contains(mainMenuStyles))
{
root.styleSheets.Add(mainMenuStyles);
}
// Inicializace UI elementů
InitializeMenuButtons();
InitializeSettingsPanel();
// Registrace event handlerů
RegisterButtonEvents();
// Načtení nastavení
LoadSettings();
}
private void OnDisable()
{
// Odregistrování event handlerů
UnregisterButtonEvents();
}
#region Initialization
private void InitializeMenuButtons()
{
newGameButton = root.Q