Beispiel #1
0
        private IEnumerator ChangeToNewStateRoutine(StateMapping newState)
        {
            isInTransition = true;

            if (currentState != null)
            {
//				Debug.Log(currentState.state.ToString() + " exit");
                var exitRoutine = currentState.Exit();

                if (exitRoutine != null)
                {
                    yield return(StartCoroutine(exitRoutine));
                }
            }

            currentState = newState;

            if (currentState != null)
            {
//				Debug.Log(currentState.state.ToString() + " enter");
                var enterRoutine = currentState.Enter();

                if (enterRoutine != null)
                {
                    yield return(StartCoroutine(enterRoutine));
                }
            }

            isInTransition = false;
        }
Beispiel #2
0
        private IEnumerator ChangeToNewStateRoutine(StateMapping newState)
        {
            destinationState = newState;             //Chache this so that we can overwrite it and hijack a transition

            if (currentState != null)
            {
                exitRoutine = currentState.Exit();

                if (exitRoutine != null)
                {
                    yield return(StartCoroutine(exitRoutine));
                }

                exitRoutine = null;

                currentState.Finally();
            }

            currentState = destinationState;

            if (currentState != null)
            {
                enterRoutine = currentState.Enter();

                if (enterRoutine != null)
                {
                    yield return(StartCoroutine(enterRoutine));
                }

                enterRoutine = null;

                //Broadcast change only after enter transition has begun.
                if (Changed != null)
                {
                    Changed(currentState.state);
                }
            }

            isInTransition = false;
        }