HeavenStudioPlus/Assets/Plugins/com.unity.uiextensions/Runtime/Scripts/MenuSystem/Menu.cs
2022-01-05 19:11:33 -05:00

65 lines
No EOL
1.7 KiB
C#

/// 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();
}
}