namespace XmobiTea.UIEffect.Effect { using System.Collections; using DG.Tweening; using UnityEngine; using XmobiTea.UIEffect.Component.Base; public class BaseEffect : BaseView { [SerializeField] protected Ease _showEase = Ease.OutBack; [SerializeField] protected Ease _hideEase = Ease.InBack; [SerializeField] protected float _delay = 0; [SerializeField] private bool _randomDelay = false; [SerializeField] protected float _time = 0.5f; public bool IsShow { get; private set; } public float Delay { get { return _delay; } set { _delay = value; } } public float Time { get { return _time; } } /// /// Gets the total of delay + time. /// public float FullTime { get { return _delay + _time; } } private bool _isInitalizeEffect = false; protected override void OnDisable() { base.OnDisable(); IsShow = false; } protected override void OnActive() { base.OnActive(); ShowEffect(); } public void ShowEffect() { if (!_isInitalizeEffect) { _isInitalizeEffect = true; OnInitEffect(); } IsShow = true; if (!gameObject.activeSelf) { gameObject.SetActive(true); } var tween = OnShowEffect().SetDelay(_randomDelay ? UnityEngine.Random.Range(0.1f, 0.5f) + _delay : _delay).SetEase(_showEase).SetUpdate(UpdateType.Normal, true); } public void HideEffect(bool instantly = false) { IsShow = false; if (instantly) { gameObject.SetActive(false); } else { var tween = OnHideEffect().SetEase(_hideEase).OnComplete(() => { gameObject.SetActive(false); }).SetUpdate(UpdateType.Normal, true); //StartCoroutine(T_HideObject()); } } public Tween CustomHideEffect() { return OnHideEffect().SetEase(_hideEase).SetUpdate(UpdateType.Normal, true); } protected virtual void OnInitEffect() { } private IEnumerator T_HideObject() { yield return new WaitForSeconds(_delay + _time); gameObject.SetActive(false); } protected virtual Tween OnShowEffect() { return null; } protected virtual Tween OnHideEffect() { return null; } } }