Ejemplo n.º 1
0
    private IEnumerator RemoveConcurrentStateRoutine(StateMapping newState)
    {
        currentStates.Remove(newState);
        if (newState != null)
        {
            var exitRoutine = newState.Exit();

            if (exitRoutine != null)
            {
                yield return(StartCoroutine(exitRoutine));
            }
        }
    }
Ejemplo n.º 2
0
    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;
    }