Esempio n. 1
0
    public void SetStateImmediately(State nextState)
    {
        State prevState = CurrentState;

        if (m_currentState != null)
        {
            m_currentState.End(nextState);
        }
        m_currentState = CreateState(nextState);
        m_currentState.Begin(prevState);
    }
Esempio n. 2
0
    IEnumerator Start()
    {
        var obj = Instantiate(m_transitionPrefab);

        m_transition = obj.GetComponent <Transition>();
        DontDestroyOnLoad(m_transition);

        while (true)
        {
            if (m_currentState != null)
            {
                m_currentState.Update();
            }

            if (m_queuedState != State.None)
            {
                var prevState = CurrentState;
                var nextState = m_queuedState;

                EventManager.Instance.SendEvent(new EventChangeGameState(prevState, nextState));

                // Fade out previous state
                //yield return m_transition.StartCoroutine(m_transition.In());

                float start = Time.time;

                // Switch state
                if (m_currentState != null)
                {
                    m_currentState.End(nextState);
                }

                m_currentState = CreateState(nextState);
                m_currentState.Begin(prevState);

                // Take the hit of some expensive Start frames
                //	for (int i = 0; i < 5; ++i)
                //		yield return null;

                //float minimumSplashVisibleDuration = (nextState == State.Game || prevState == State.Game) ? 1.0f : 0.0f;
                //while (Time.time < start + minimumSplashVisibleDuration)
                //	yield return null;

                // Fade in next state
                //	yield return m_transition.StartCoroutine(m_transition.Out());

                m_queuedState = State.None;
            }

            // Wait one frame until next "Update"
            yield return(null);
        }
    }