using UnityEngine; using UnityEngine.UI; #if UNITY_EDITOR using UnityEditor; using TMPro; #else using TMPro; #endif using System.Collections.Generic; namespace MegaKoop.UI { /// /// UGUI Main Menu controller (no UI Toolkit). Handles switching panels and basic settings. /// public class UGUIMainMenuController : MonoBehaviour { // Panels [Header("Optional Panel Refs (assign to override auto-find)")] [SerializeField] private GameObject panelMainRef; [SerializeField] private GameObject panelSettingsRef; [SerializeField] private GameObject panelLobbyRef; private GameObject panelMain; private GameObject panelSettings; private GameObject panelLobby; // Main buttons private Button btnNewGame; private Button btnContinue; private Button btnMultiplayer; private Button btnSettings; private Button btnQuit; // Settings controls private TMP_Dropdown ddQuality; private Toggle tgFullscreen; private TMP_Dropdown ddResolution; private Button btnApplySettings; private Button btnBackFromSettings; private Slider slMaster; private Slider slMusic; private Slider slSFX; private Dropdown ddQualityUI; private Dropdown ddResolutionUI; private void Awake() { // Panels (created by UGUIMenuBuilder) – najdi i když jsou neaktivní RefreshPanelReferences(); // Buttons btnNewGame = FindButton("Button_NewGame", panelMain ? panelMain.transform : this.transform); btnContinue = FindButton("Button_Continue", panelMain ? panelMain.transform : this.transform); btnMultiplayer = FindButton("Button_Multiplayer", panelMain ? panelMain.transform : this.transform); btnSettings = FindButton("Button_Settings", panelMain ? panelMain.transform : this.transform); btnQuit = FindButton("Button_Quit", panelMain ? panelMain.transform : this.transform); // Settings ddQuality = FindDropdown("Dropdown_Quality", panelSettings ? panelSettings.transform : this.transform); if (!ddQuality) ddQualityUI = FindUIDropdown("Dropdown_Quality", panelSettings ? panelSettings.transform : this.transform); tgFullscreen = FindToggle("Toggle_Fullscreen", panelSettings ? panelSettings.transform : this.transform); ddResolution = FindDropdown("Dropdown_Resolution", panelSettings ? panelSettings.transform : this.transform); if (!ddResolution) ddResolutionUI = FindUIDropdown("Dropdown_Resolution", panelSettings ? panelSettings.transform : this.transform); btnApplySettings = FindButton("Button_ApplySettings", panelSettings ? panelSettings.transform : this.transform); btnBackFromSettings = FindButton("Button_BackFromSettings", panelSettings ? panelSettings.transform : this.transform); slMaster = FindSlider("Slider_MasterVolume", panelSettings ? panelSettings.transform : this.transform); slMusic = FindSlider("Slider_MusicVolume", panelSettings ? panelSettings.transform : this.transform); slSFX = FindSlider("Slider_SFXVolume", panelSettings ? panelSettings.transform : this.transform); if (!btnApplySettings && panelSettings) btnApplySettings = FindButtonByLabel("APPLY", panelSettings.transform); if (!btnBackFromSettings && panelSettings) btnBackFromSettings = FindButtonByLabel("BACK", panelSettings.transform); WireEvents(); InitializeSettingsUI(); // Ensure initial panels ShowMainMenu(); } private Dropdown FindUIDropdown(string name, Transform scope = null) { if (scope != null) { var comps = scope.GetComponentsInChildren(true); foreach (var c in comps) { if (c && c.name == name) return c; } return null; } var all = Resources.FindObjectsOfTypeAll(); foreach (var c in all) { if (c && c.name == name && c.gameObject.scene.IsValid() && c.gameObject.scene.isLoaded) return c; } return null; } // Allow UGUIMenuBuilder to inject panel refs directly public void SetPanels(GameObject main, GameObject settings, GameObject lobby) { panelMainRef = main; panelSettingsRef = settings; panelLobbyRef = lobby; RefreshPanelReferences(); } private void RefreshPanelReferences() { panelMain = panelMainRef ? panelMainRef : (FindAnyInScene("Panel_MainMenu") ?? panelMain); panelSettings = panelSettingsRef ? panelSettingsRef : (FindAnyInScene("Panel_Settings") ?? panelSettings); panelLobby = panelLobbyRef ? panelLobbyRef : (FindAnyInScene("Panel_Lobby") ?? panelLobby); } private GameObject FindAnyInScene(string name) { // Najde i neaktivní objekty var all = Resources.FindObjectsOfTypeAll(); foreach (var t in all) { if (t.hideFlags != HideFlags.None) continue; var go = t.gameObject; if (!go.scene.IsValid() || !go.scene.isLoaded) continue; if (go.name == name) return go; } return null; } private Button FindButton(string name, Transform scope = null) { if (scope != null) { var comps = scope.GetComponentsInChildren