using System; using System.Collections; using System.Collections.Generic; using DG.Tweening; using Sirenix.OdinInspector; using UnityEngine; using UnityEngine.Events; using UnityEngine.Serialization; namespace Ichni.UI { public class UIPageBase : SerializedMonoBehaviour { public CanvasGroup mainCanvasGroup; public UnityAction fadeInStartAction; public UnityAction fadeInFinishAction; public UnityAction fadeOutAction; protected virtual void Awake() { CanvasGroup group = GetComponent(); if (group != null) { mainCanvasGroup ??= group; } } public virtual void FadeIn(float duration = 0.5f, bool ignoreTimeScale = false, UnityAction action = null) { mainCanvasGroup.gameObject.SetActive(true); fadeInStartAction?.Invoke(); Tweener fade = mainCanvasGroup.DOFade(1f, duration).OnComplete(() => { mainCanvasGroup.interactable = true; mainCanvasGroup.blocksRaycasts = true; fadeInFinishAction?.Invoke(); action?.Invoke(); }); if (ignoreTimeScale) { fade.SetUpdate(true); } fade.Play(); } public virtual void FadeOut(float duration = 0.5f, bool ignoreTimeScale = false, UnityAction action = null) { mainCanvasGroup.interactable = false; mainCanvasGroup.blocksRaycasts = false; Tweener fade = mainCanvasGroup.DOFade(0f, duration).OnComplete(() => { fadeOutAction?.Invoke(); action?.Invoke(); mainCanvasGroup.gameObject.SetActive(false); }); if (ignoreTimeScale) { fade.SetUpdate(true); } fade.Play(); } } }