using UnityEngine;
namespace Core.UI
{
///
/// Abstract base class for all modals
///
[RequireComponent(typeof(CanvasGroup))]
public abstract class Modal : MonoBehaviour
{
///
/// The attached CanvasGroup
///
public CanvasGroup canvasGroup;
///
/// Closes the modal
///
public virtual void CloseModal()
{
gameObject.SetActive(false);
DisableInteractivity();
}
///
/// Shows the modal
///
public virtual void Show()
{
LazyLoad();
gameObject.SetActive(true);
EnableInteractivity();
}
///
/// Allows interactions
///
protected virtual void EnableInteractivity()
{
canvasGroup.interactable = true;
}
///
/// Turns off interactions
///
protected virtual void DisableInteractivity()
{
canvasGroup.interactable = false;
}
///
/// Lazy loads the canvas group into the local variable
///
protected virtual void LazyLoad()
{
if (canvasGroup != null)
{
canvasGroup = GetComponent();
}
}
}
}