using System; using DG.Tweening; using UnityEngine; using UnityEngine.UI; namespace Panels { [RequireComponent(typeof(Canvas))] [RequireComponent(typeof(GraphicRaycaster))] [RequireComponent(typeof(CanvasGroup))] public abstract class PanelBase : MonoBehaviour { // Application.parameters.editor.panelsFadeSpeed [SerializeField] private float fadeSpeed = 1f; private Canvas _canvas; private CanvasGroup _canvasGroup; protected Canvas Canvas { get { if (_canvas == null) _canvas = GetComponent(); return _canvas; } } protected CanvasGroup CanvasGroup { get { if (_canvasGroup == null) _canvasGroup = GetComponent(); return _canvasGroup; } } public bool IsOpen { get; protected set; } public virtual void OpenPanel(Action callBack = null) { IsOpen = true; Canvas.enabled = true; CanvasGroup.alpha = 0f; CanvasGroup.DOFade(1f, fadeSpeed) .OnComplete(() => callBack?.Invoke()); } public virtual void OpenPanelImmediately() { IsOpen = true; Canvas.enabled = true; CanvasGroup.alpha = 1f; } public virtual void ClosePanelImmediately() { // if (permanent) return; IsOpen = false; CanvasGroup.alpha = 0; Canvas.enabled = false; } } }