/// <summary> /// Enter a new game state. /// </summary> /// <param name="newGameStateInstance">The new game state instance.</param> protected void EnterGameState(GameStateInstance newGameStateInstance) { // Stop game state change coroutine if (enterGameStateCoroutine != null) { StopCoroutine(enterGameStateCoroutine); } // Update the game state currentGameState = newGameStateInstance.gameState; // Freeze time if applicable if (newGameStateInstance.freezeTimeOnEntry) { Time.timeScale = 0; AudioListener.pause = true; } else { Time.timeScale = 1; AudioListener.pause = false; } SetCursorVisible(newGameStateInstance.showCursor); if (newGameStateInstance.centerCursorAtStart) { CenterCursor(); } SetCursorLock(newGameStateInstance.lockCursor); // Call event onEnteredGameState.Invoke(newGameStateInstance.gameState); }
IEnumerator PauseBeforeEntryCoroutine(float pause, GameStateInstance nextState) { enteringState = true; yield return(new WaitForSeconds(pause)); enteringState = false; EnterGameState(nextState); }