void Init() { if (m_IsInited) { return; } int count = Tweens.Length; for (int i = 0; i < count; i++) { CocoTweenBase tween = Tweens [i]; if (!tween.enabled) { continue; } tween.startAutomatically = false; tween.tweenTime = showTime; tween.tweenWrapMode = WrapMode.ClampForever; tween.Init(showedOnStart); } m_Status = showedOnStart ? Status.Showed : Status.Hided; m_IsInited = true; }
void ShowOrHide(bool show, System.Action endAction) { Init(); Status targetStatus = show ? Status.Showed : Status.Hided; // already be target status if (m_Status == targetStatus) { if (endAction != null) { endAction(); } return; } // cancel last tween LeanTween.cancel(gameObject); // end action int usedFlags = 0; System.Action <int> tweenEndAction = (flag) => { usedFlags &= (~flag); if (usedFlags == 0) { m_Status = targetStatus; if (endAction != null) { endAction(); } } }; // start tween m_Status = show ? Status.Appear : Status.Disappear; int count = Tweens.Length; if (count > 32) { count = 32; } for (int i = 0; i < count; i++) { CocoTweenBase tween = Tweens [i]; if (!tween.enabled) { continue; } int flag = 1 << i; usedFlags |= flag; bool canRun = tween.TweenOnce(!show, false, () => { tweenEndAction(flag); }); if (!canRun) { usedFlags &= ~flag; } } // all unused if (usedFlags == 0) { m_Status = targetStatus; if (endAction != null) { endAction(); } } }