Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using yaSingleton;
- [CreateAssetMenu(fileName="MenuManager", menuName="Systems/MenuManager")]
- public class MenuManager : Singleton<MenuManager> {
- // public GameObject pauseMenuPrefab;
- public GameObject pauseMenuPrefab;
- public GameObject saveMenuPrefab;
- public GameObject canvasPrefab;
- private Canvas _canvas;
- private List<GameMenu> activeMenus;
- protected override void Initialize() {
- base.Initialize();
- activeMenus = new List<GameMenu>();
- }
- public Canvas SceneCanvas {
- get {
- // Check if canvas variable is set
- if(_canvas == null) {
- // If not set, look in scene for canvas
- _canvas = FindObjectOfType<Canvas>();
- if(_canvas == null) {
- // If no canvas in scene, create one
- _canvas = Instantiate(canvasPrefab).GetComponent<Canvas>();
- }
- }
- // Return canvas
- return _canvas;
- }
- }
- public void CreateMenu(GameMenu menu) {
- // Creates a new game menu
- GameObject newMenu = Instantiate(menu.gameObject, SceneCanvas.transform);
- GameMenu menuComponent = newMenu.GetComponent<GameMenu>();
- System.Type type = menuComponent.GetType();
- if(type == typeof(PauseMenu)) {
- AddPauseMenuFunctionality((PauseMenu) menuComponent);
- } else if(type == typeof(SaveMenu)) {
- AddSaveMenuFunctionality((SaveMenu) menuComponent);
- }
- // Assign functionality to the buttons
- menuComponent.destroyMenuButton.onClick.AddListener(
- delegate { DestroyMenu(menuComponent); }
- );
- activeMenus.Add(menu);
- }
- public void AddPauseMenuFunctionality(PauseMenu pauseMenu) {
- pauseMenu.openSaveMenuButton.onClick.AddListener(
- delegate { ValidateAndCreateMenuPrefab(saveMenuPrefab); }
- );
- pauseMenu.openSaveMenuButton.onClick.AddListener(
- delegate { DestroyMenu(pauseMenu); }
- );
- }
- public void AddSaveMenuFunctionality(SaveMenu saveMenu) {
- }
- public void DestroyMenu(GameMenu menu) {
- if(menu != null) {
- activeMenus.Remove(menu);
- Destroy(menu.gameObject);
- }
- }
- /// <summary>
- /// Checking if the prefab has a GameMenu script.
- /// If so, then instantiate the prefab.
- /// </summary>
- /// <param name="prefab"></param>
- private void ValidateAndCreateMenuPrefab(GameObject prefab) {
- // Escape is down
- GameMenu menu = prefab.GetComponent<GameMenu>();
- if(menu != null) {
- CreateMenu(menu);
- } else {
- Debug.LogError("Pause Menu Prefab has no GameMenu script attached to it.");
- }
- }
- public override void OnUpdate() {
- if(Input.GetKeyDown(KeyCode.Escape)) {
- bool exists = false;
- // Checking to see if one exists
- foreach(GameMenu menu in activeMenus) {
- if(menu.GetType() == typeof(PauseMenu)) {
- exists = true;
- break;
- }
- }
- if(!exists) {
- // Escape is down
- ValidateAndCreateMenuPrefab(pauseMenuPrefab);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement