| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- /// Credit Adam Kapos (Nezz) - http://www.songarc.net
- /// Sourced from - https://github.com/YousicianGit/UnityMenuSystem
- /// Updated by SimonDarksideJ - Refactored to be a more generic component
- namespace UnityEngine.UI.Extensions
- {
- public abstract class Menu<T> : Menu where T : Menu<T>
- {
- public static T Instance { get; private set; }
- protected virtual void Awake()
- {
- Instance = (T)this;
- }
- protected virtual void OnDestroy()
- {
- Instance = null;
- }
- protected static void Open()
- {
- GameObject clonedGameObject = null;
- if (Instance == null)
- {
- MenuManager.Instance.CreateInstance(typeof(T).Name, out clonedGameObject);
- MenuManager.Instance.OpenMenu(clonedGameObject.GetMenu());
- }
- else
- {
- Instance.gameObject.SetActive(true);
- MenuManager.Instance.OpenMenu(Instance);
- }
- }
- protected static void Close()
- {
- if (Instance == null)
- {
- Debug.LogErrorFormat("Trying to close menu {0} but Instance is null", typeof(T));
- return;
- }
- MenuManager.Instance.CloseMenu(Instance);
- }
- public override void OnBackPressed()
- {
- Close();
- }
- }
- public abstract class Menu : MonoBehaviour
- {
- [Tooltip("Destroy the Game Object when menu is closed (reduces memory usage)")]
- public bool DestroyWhenClosed = true;
- [Tooltip("Disable menus that are under this one in the stack")]
- public bool DisableMenusUnderneath = true;
- public abstract void OnBackPressed();
- }
- }
|