예제 #1
0
    private IEnumerator WaitFreshPrompts(List <UIPromptInfo> prompts)
    {
        m_PromptsBarAnimator.SetTrigger("Outro");
        yield return(new WaitForSeconds(0.5f));

        ClearPrompts();

        if (prompts == null)
        {
            m_CurrentScreen.SetPrompts(m_PromptsBar, m_PromptPrefab);
        }
        else
        {
            m_CurrentScreen.SetPrompts(m_PromptsBar, m_PromptPrefab, prompts);
        }

        m_PromptsBarAnimator.SetTrigger("Intro");
    }
예제 #2
0
    /// <summary>
    /// Transition Work Enumerator.
    /// Carries out the screen loading process and locks the system until a screen has been loaded.
    /// </summary>
    /// <param name="screenId"></param>
    /// <returns></returns>
    private IEnumerator DoScreenTransition(ScreenId screenId)
    {
        // if this is a new screen... (it should always be.)
        if (screenId != ScreenId.None)
        {
            m_InputLock = true;
            bool canNavigateBackwards = false;

            if (m_CurrentScreen != null)
            {
                canNavigateBackwards = m_CurrentScreen.CanNavigateBack;
                m_PromptsBarAnimator.SetTrigger("Outro");

                yield return(StartCoroutine(m_CurrentScreen.DoScreenAnimation(UIScreenAnimState.Outro)));

                UnloadCurrentScreen();
            }

            m_PrefabLoadingLock = true;
            UIBaseScreen loadedScreen = LoadScreen(screenId);

            if (loadedScreen != null)
            {
                while (m_PrefabLoadingLock)
                {
                    yield return(null);
                }

                // If the current screen doesn't support back navigation, remove it from the stack.
                if (!canNavigateBackwards && m_ScreenStack.Count > 0)
                {
                    m_ScreenStack.Pop();
                }

                m_CurrentScreen = loadedScreen;

                // Back transitions can't add the screen twice.
                if (m_ScreenStack.Count == 0 || (m_ScreenStack.Count > 0 && screenId != m_ScreenStack.Peek()))
                {
                    // Push the new screen onto the stack.
                    m_ScreenStack.Push(screenId);
                }

                yield return(StartCoroutine(m_CurrentScreen.DoScreenAnimation(UIScreenAnimState.Intro)));

                ClearPrompts();

                m_CurrentScreen.SetPrompts(m_PromptsBar, m_PromptPrefab);
                m_PromptsBarAnimator.SetTrigger("Intro");
            }
            m_InputLock = false;
        }
    }