private IEnumerator RemoveConcurrentStateRoutine(StateMapping newState) { currentStates.Remove(newState); if (newState != null) { var exitRoutine = newState.Exit(); if (exitRoutine != null) { yield return(StartCoroutine(exitRoutine)); } } }
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; }