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