326 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			326 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| 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<Animator>();
 | |
| 
 | |
| 			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;
 | |
| 			}
 | |
| 
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 
 | |
| } |