public void StopTransition(ITransitionElement transitionElement, bool visible = false)
        {
            ITransitionStatusControl transitionStatusControl = GetTransitionStatusControl(transitionElement);

            if (transitionStatusControl != null)
            {
                StopCoroutine(transitionStatusControl.Coroutine);
                EndTransition(transitionElement, visible);
            }
        }
        private void CalculateTransitionPercent(ITransitionElement transitionElement, float percent)
        {
            ITransitionStatusControl transitionStatusControl = GetTransitionStatusControl(transitionElement);
            ITransitionDetails       transitionDetails       = GetTransitionDetails(transitionElement);

            if (transitionDetails.TransitionStyle.Contains(TransitionStyle.InOut))
            {
                transitionStatusControl.TransitionPercent = percent / 2 + transitionStatusControl.TransitionPercentBreak;
            }
            else
            {
                transitionStatusControl.TransitionPercent = percent;
            }
        }
        private void CleanTransitionTable()
        {
            ITransitionElement[] transitionTableKeys = new ITransitionElement[m_TransitionTable.Keys.Count];
            m_TransitionTable.Keys.CopyTo(transitionTableKeys, 0);

            foreach (ITransitionElement transitionElement in transitionTableKeys)
            {
                ITransitionStatusControl transitionStatusControl = m_TransitionTable[transitionElement];
                if (!transitionStatusControl.InTransition)
                {
                    m_TransitionTable.Remove(transitionElement);
                }
            }
        }
        private IEnumerator PLayFadeAnimation(ITransitionElement transitionElement, float alphaStart, float alphaEnd)
        {
            ITransitionStatusControl transitionStatusControl = GetTransitionStatusControl(transitionElement);

            if (transitionStatusControl != null)
            {
                ITransitionDetails transitionDetails = GetTransitionDetails(transitionElement);
                float lerpValue = 0f;
                while (lerpValue <= 1f && transitionStatusControl.InTransition)
                {
                    lerpValue += Time.deltaTime / transitionDetails.TransitionDuration;
                    CalculateTransitionPercent(transitionElement, lerpValue);
                    transitionDetails.TransitionOverlay.alpha = Mathf.Lerp(alphaStart, alphaEnd, transitionDetails.Interpolation.Evaluate(lerpValue));
                    yield return(null);
                }
            }
        }
        public void PlayTransition(ITransitionElement transitionElement, Handler handler = null)
        {
            if (!m_TransitionTable.ContainsKey(transitionElement))
            {
                m_TransitionTable.Add(transitionElement, new TransitionStatusControl());
            }
            else
            {
                if (GetTransitionStatus(transitionElement).InTransition)
                {
                    Debug.LogWarning(
                        "[TransitionScene] Element '" + transitionElement.Name +
                        "' already is in transition. Wait for it to finished."
                        );
                    return;
                }
            }

            if (handler != null)
            {
                this.AddObserver(handler, TransitionElementNotificationName(transitionElement));
            }

            ITransitionStatusControl transitionStatusControl = GetTransitionStatusControl(transitionElement);

            if (transitionStatusControl != null)
            {
                transitionStatusControl.Coroutine = SetUpTransition(transitionElement);
                StartCoroutine(transitionStatusControl.Coroutine);
            }
            ITransitionDetails transitionDetails = GetTransitionDetails(transitionElement);

            if (transitionDetails.TransitionElementChild != null)
            {
                PlayTransition(transitionDetails.TransitionElementChild);
            }
        }