public ITransitionStatus GetTransitionStatus(ITransitionElement transitionElement)
 {
     if (!m_TransitionTable.ContainsKey(transitionElement))
     {
         return(null);
     }
     return(m_TransitionTable[transitionElement]);
 }
        public void StopTransition(ITransitionElement transitionElement, bool visible = false)
        {
            ITransitionStatusControl transitionStatusControl = GetTransitionStatusControl(transitionElement);

            if (transitionStatusControl != null)
            {
                StopCoroutine(transitionStatusControl.Coroutine);
                EndTransition(transitionElement, visible);
            }
        }
 public TransitionDetailsBase(
     AnimationCurve interpolation,
     float transitionDuration,
     CanvasGroup transitionOverlay,
     ITransitionElement transitionElementChild
     )
 {
     m_Interpolation          = interpolation;
     m_TransitionDuration     = transitionDuration;
     m_TransitionOverlay      = transitionOverlay;
     m_TransitionElementChild = transitionElementChild as TransitionElement;
 }
 private IEnumerator PLayFadeAnimation(ITransitionElement transitionElement, bool forward)
 {
     if (forward)
     {
         GetTransitionStatusControl(transitionElement).TransitionFading = false;
         yield return(StartCoroutine(PLayFadeAnimation(transitionElement, m_AlphaMin, m_AlphaMax)));
     }
     else
     {
         GetTransitionStatusControl(transitionElement).TransitionFading = true;
         yield return(StartCoroutine(PLayFadeAnimation(transitionElement, m_AlphaMax, m_AlphaMin)));
     }
 }
        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 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;
            }
        }
 public TransitionDetails(
     AnimationCurve interpolation,
     float transitionDuration,
     CanvasGroup transitionOverlay,
     ITransitionElement transitionElementChild,
     bool transitionOnWake,
     TransitionStyle transitionStyle,
     bool transitionLoop,
     bool visibleAfterTransition
     ) : base(interpolation, transitionDuration, transitionOverlay, transitionElementChild)
 {
     m_TransitionOnWake       = transitionOnWake;
     m_TransitionStyle        = transitionStyle;
     m_TransitionLoop         = transitionLoop;
     m_VisibleAfterTransition = visibleAfterTransition;
 }
        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);
                }
            }
        }
        private void EndTransition(ITransitionElement transitionElement, bool visible = false)
        {
            ITransitionDetails transitionDetails = GetTransitionDetails(transitionElement);

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

            if (!visible && !transitionDetails.VisibleAfterTransition)
            {
                SetTransitionCanvasEnable(transitionDetails.TransitionOverlay, false);
            }
            GetTransitionStatusControl(transitionElement).InTransition = false;
            this.PostNotification(TransitionElementNotificationName(transitionElement), transitionElement);
            m_TransitionTable.Remove(transitionElement);
        }
        private IEnumerator SetUpTransition(ITransitionElement transitionElement)
        {
            StartTransition(transitionElement);
            {
                ITransitionDetails transitionDetails = transitionElement.TransitionDetails;
                do
                {
                    GetTransitionStatusControl(transitionElement).TransitionPercentBreak = 0f;
                    switch (transitionDetails.TransitionStyle)
                    {
                    case TransitionStyle.In:
                    {
                        yield return(StartCoroutine(PLayFadeAnimation(transitionElement, true)));

                        break;
                    }

                    case TransitionStyle.Out:
                    {
                        yield return(StartCoroutine(PLayFadeAnimation(transitionElement, false)));

                        break;
                    }

                    case TransitionStyle.InOut:
                    {
                        yield return(StartCoroutine(PLayFadeAnimation(transitionElement, true)));

                        GetTransitionStatusControl(transitionElement).TransitionPercentBreak = 0.5f;
                        yield return(StartCoroutine(PLayFadeAnimation(transitionElement, false)));

                        break;
                    }

                    default:
                    {
                        break;
                    }
                    }
                } while (transitionDetails.TransitionLoop);
            }
            EndTransition(transitionElement);
        }
        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);
            }
        }
 private ITransitionDetails GetTransitionDetails(ITransitionElement transitionElement)
 {
     return(transitionElement.TransitionDetails);
 }
 private ITransitionStatusControl GetTransitionStatusControl(ITransitionElement transitionElement)
 {
     return(GetTransitionStatus(transitionElement) as ITransitionStatusControl);
 }
 private string TransitionElementNotificationName(ITransitionElement transitionElement)
 {
     return(TransitionSceneNotification + transitionElement.GetHashCode().ToString());
 }
 public static void StopTransition(this ITransitionElement obj, bool visible)
 {
     TransitionSceneManager.Instance.StopTransition(obj, visible);
 }
 public static ITransitionStatus GetTransitionStatus(this ITransitionElement obj)
 {
     return(TransitionSceneManager.Instance.GetTransitionStatus(obj));
 }
        public static bool InTransitionSafe(this ITransitionElement obj)
        {
            ITransitionStatus transitionStatus = TransitionSceneManager.Instance.GetTransitionStatus(obj);

            return(transitionStatus != null ? transitionStatus.InTransition : false);
        }
 public static void PlayTransition(this ITransitionElement obj, Handler handler)
 {
     TransitionSceneManager.Instance.PlayTransition(obj, handler);
 }
 private void StartTransition(ITransitionElement transitionElement)
 {
     GetTransitionStatusControl(transitionElement).InTransition = true;
     SetTransitionCanvasEnable(GetTransitionDetails(transitionElement).TransitionOverlay, true);
 }
 public static void PlayTransition(this ITransitionElement obj)
 {
     TransitionSceneManager.Instance.PlayTransition(obj);
 }