using UnityEngine; using UnityEngine.UI; #if UNITY_EDITOR using UnityEditor; using TMPro; #else using TMPro; #endif 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 void Awake() { // Panels (created by UGUIMenuBuilder) – najdi i když jsou neaktivní RefreshPanelReferences(); // Buttons btnNewGame = FindButton("Button_NewGame"); btnContinue = FindButton("Button_Continue"); btnMultiplayer = FindButton("Button_Multiplayer"); btnSettings = FindButton("Button_Settings"); btnQuit = FindButton("Button_Quit"); // Settings ddQuality = FindDropdown("Dropdown_Quality"); tgFullscreen = FindToggle("Toggle_Fullscreen"); ddResolution = FindDropdown("Dropdown_Resolution"); btnApplySettings = FindButton("Button_ApplySettings"); btnBackFromSettings = FindButton("Button_BackFromSettings"); WireEvents(); // Ensure initial panels ShowMainMenu(); } // 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) { var go = GameObject.Find(name); return go ? go.GetComponent