using System; using DG.Tweening; using UnityEngine; using UnityEngine.UI; namespace Core { [RequireComponent(typeof(Canvas))] [RequireComponent(typeof(GraphicRaycaster))] [RequireComponent(typeof(CanvasGroup))] public abstract class PanelBase : BaseMonoBehaviour { [field: SerializeField] public bool AutoEnable { get; protected set; } protected bool IsOpen; private Canvas _c; private CanvasGroup _cGroup; protected Canvas Canvas { get { if (_c == null) _c = GetComponent(); return _c; } } protected CanvasGroup CanvasGroup { get { if (_cGroup == null) _cGroup = GetComponent(); return _cGroup; } } protected override void ReleaseReferences() { _c = null; _cGroup = null; } public virtual void Initialize() {} public virtual void OpenPanelImmediately() { IsOpen = true; Canvas.enabled = true; CanvasGroup.alpha = 1f; } public virtual void OpenPanel(Action callBack = null) { IsOpen = true; Canvas.enabled = true; CanvasGroup.alpha = 0f; CanvasGroup.DOFade(1f, Application.Parameters.panelFadeSpeed) .OnComplete(() => { callBack?.Invoke(); }); } public virtual void ClosePanelImmediately() { IsOpen = false; CanvasGroup.alpha = 0; Canvas.enabled = false; } public virtual void ClosePanel(Action callBack = null) { IsOpen = false; CanvasGroup.alpha = 1f; CanvasGroup.DOFade(0f, Application.Parameters.panelFadeSpeed) .OnComplete(() => { callBack?.Invoke(); Canvas.enabled = false; }); } public virtual void ResetPanel() {} } }