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; }
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; }