using UnityEngine; using System.Collections; using UnityEngine.UI; using TMPro; using UnityEngine.SceneManagement; namespace SlimUI.ModernMenu { public class UIMenuManager : MonoBehaviour { private Animator CameraObject; // campaign button sub menu [Header("MENUS")] [Tooltip("The Menu for when the MAIN menu buttons")] public GameObject mainMenu; [Tooltip("THe first list of buttons")] public GameObject firstMenu; [Tooltip("The Menu for when the PLAY button is clicked")] public GameObject playMenu; [Tooltip("The Menu for when the EXIT button is clicked")] public GameObject exitMenu; [Tooltip("Optional 4th Menu")] public GameObject extrasMenu; public enum Theme { custom1, custom2, custom3 }; [Header("THEME SETTINGS")] public Theme theme; private int themeIndex; public ThemedUIData themeController; [Header("PANELS")] [Tooltip("The UI Panel parenting all sub menus")] public GameObject mainCanvas; [Tooltip("The UI Panel that holds the CONTROLS window tab")] public GameObject PanelControls; [Tooltip("The UI Panel that holds the VIDEO window tab")] public GameObject PanelVideo; [Tooltip("The UI Panel that holds the GAME window tab")] public GameObject PanelGame; [Tooltip("The UI Panel that holds the KEY BINDINGS window tab")] public GameObject PanelKeyBindings; [Tooltip("The UI Sub-Panel under KEY BINDINGS for MOVEMENT")] public GameObject PanelMovement; [Tooltip("The UI Sub-Panel under KEY BINDINGS for COMBAT")] public GameObject PanelCombat; [Tooltip("The UI Sub-Panel under KEY BINDINGS for GENERAL")] public GameObject PanelGeneral; // highlights in settings screen [Header("SETTINGS SCREEN")] [Tooltip("Highlight Image for when GAME Tab is selected in Settings")] public GameObject lineGame; [Tooltip("Highlight Image for when VIDEO Tab is selected in Settings")] public GameObject lineVideo; [Tooltip("Highlight Image for when CONTROLS Tab is selected in Settings")] public GameObject lineControls; [Tooltip("Highlight Image for when KEY BINDINGS Tab is selected in Settings")] public GameObject lineKeyBindings; [Tooltip("Highlight Image for when MOVEMENT Sub-Tab is selected in KEY BINDINGS")] public GameObject lineMovement; [Tooltip("Highlight Image for when COMBAT Sub-Tab is selected in KEY BINDINGS")] public GameObject lineCombat; [Tooltip("Highlight Image for when GENERAL Sub-Tab is selected in KEY BINDINGS")] public GameObject lineGeneral; [Header("LOADING SCREEN")] [Tooltip("If this is true, the loaded scene won't load until receiving user input")] public bool waitForInput = true; public GameObject loadingMenu; [Tooltip("The loading bar Slider UI element in the Loading Screen")] public Slider loadingBar; public TMP_Text loadPromptText; public KeyCode userPromptKey; [Header("SFX")] [Tooltip("The GameObject holding the Audio Source component for the HOVER SOUND")] public AudioSource hoverSound; [Tooltip("The GameObject holding the Audio Source component for the AUDIO SLIDER")] public AudioSource sliderSound; [Tooltip("The GameObject holding the Audio Source component for the SWOOSH SOUND when switching to the Settings Screen")] public AudioSource swooshSound; void Start() { CameraObject = transform.GetComponent(); playMenu.SetActive(false); exitMenu.SetActive(false); if (extrasMenu) extrasMenu.SetActive(false); firstMenu.SetActive(true); mainMenu.SetActive(true); SetThemeColors(); } void SetThemeColors() { switch (theme) { case Theme.custom1: themeController.currentColor = themeController.custom1.graphic1; themeController.textColor = themeController.custom1.text1; themeIndex = 0; break; case Theme.custom2: themeController.currentColor = themeController.custom2.graphic2; themeController.textColor = themeController.custom2.text2; themeIndex = 1; break; case Theme.custom3: themeController.currentColor = themeController.custom3.graphic3; themeController.textColor = themeController.custom3.text3; themeIndex = 2; break; default: Debug.Log("Invalid theme selected."); break; } } public void PlayCampaign() { exitMenu.SetActive(false); if (extrasMenu) extrasMenu.SetActive(false); playMenu.SetActive(true); } public void PlayCampaignMobile() { exitMenu.SetActive(false); if (extrasMenu) extrasMenu.SetActive(false); playMenu.SetActive(true); mainMenu.SetActive(false); } public void ReturnMenu() { playMenu.SetActive(false); if (extrasMenu) extrasMenu.SetActive(false); exitMenu.SetActive(false); mainMenu.SetActive(true); } public void LoadScene(string scene) { StartCoroutine(LoadAsynchronously(scene)); } public void DisablePlayCampaign() { playMenu.SetActive(false); } public void Position2() { DisablePlayCampaign(); CameraObject.SetFloat("Animate", 1); } public void Position1() { CameraObject.SetFloat("Animate", 0); } void DisablePanels() { PanelControls.SetActive(false); PanelVideo.SetActive(false); PanelGame.SetActive(false); PanelKeyBindings.SetActive(false); lineGame.SetActive(false); lineControls.SetActive(false); lineVideo.SetActive(false); lineKeyBindings.SetActive(false); PanelMovement.SetActive(false); lineMovement.SetActive(false); PanelCombat.SetActive(false); lineCombat.SetActive(false); PanelGeneral.SetActive(false); lineGeneral.SetActive(false); } public void GamePanel() { DisablePanels(); PanelGame.SetActive(true); lineGame.SetActive(true); } public void VideoPanel() { DisablePanels(); PanelVideo.SetActive(true); lineVideo.SetActive(true); } public void ControlsPanel() { DisablePanels(); PanelControls.SetActive(true); lineControls.SetActive(true); } public void KeyBindingsPanel() { DisablePanels(); MovementPanel(); PanelKeyBindings.SetActive(true); lineKeyBindings.SetActive(true); } public void MovementPanel() { DisablePanels(); PanelKeyBindings.SetActive(true); PanelMovement.SetActive(true); lineMovement.SetActive(true); } public void CombatPanel() { DisablePanels(); PanelKeyBindings.SetActive(true); PanelCombat.SetActive(true); lineCombat.SetActive(true); } public void GeneralPanel() { DisablePanels(); PanelKeyBindings.SetActive(true); PanelGeneral.SetActive(true); lineGeneral.SetActive(true); } public void PlayHover() { hoverSound.Play(); } public void PlaySFXHover() { sliderSound.Play(); } public void PlaySwoosh() { swooshSound.Play(); } // Are You Sure - Quit Panel Pop Up public void AreYouSure() { exitMenu.SetActive(true); if (extrasMenu) extrasMenu.SetActive(false); DisablePlayCampaign(); } public void AreYouSureMobile() { exitMenu.SetActive(true); if (extrasMenu) extrasMenu.SetActive(false); mainMenu.SetActive(false); DisablePlayCampaign(); } public void ExtrasMenu() { playMenu.SetActive(false); if (extrasMenu) extrasMenu.SetActive(true); exitMenu.SetActive(false); } public void QuitGame() { #if UNITY_EDITOR UnityEditor.EditorApplication.isPlaying = false; #else Application.Quit(); #endif } // Load Bar synching animation IEnumerator LoadAsynchronously(string sceneName) { AsyncOperation operation = SceneManager.LoadSceneAsync(sceneName); operation.allowSceneActivation = false; mainCanvas.SetActive(false); loadingMenu.SetActive(true); while (!operation.isDone) { float progress = Mathf.Clamp01(operation.progress / .95f); loadingBar.value = progress; if (operation.progress >= 0.9f && waitForInput) { loadPromptText.text = "Press " + userPromptKey.ToString().ToUpper() + " to continue"; loadingBar.value = 1; if (Input.GetKeyDown(userPromptKey)) { operation.allowSceneActivation = true; } } else if (operation.progress >= 0.9f && !waitForInput) { operation.allowSceneActivation = true; } yield return null; } } } }