/// <summary> /// Coroutine that handles the play time of a given level /// Pro tip don't run your game using a coroutine because any errors will kill it /// </summary> IEnumerator FinalCountdown() { completionTime = 0; CanvasManager.CM.pointsManager.scoreUIText.transform.parent.gameObject.SetActive(false); countdownSlider.gameObject.SetActive(false); CanvasManager.CM.PreventAllPlayerInput = true; CanvasManager.CM.player.PreventAttacks = true; CanvasManager.CM.player.InCutscene = true; if (!Application.isEditor && isGameLevel) { useCountdown = true; } if (useCountdown) { yield return(new WaitForSeconds(startCutsceneLength)); } if (CountdownCompleted != null) { CountdownCompleted(); } CanvasManager.CM.player.InCutscene = false; CanvasManager.CM.PreventAllPlayerInput = false; CanvasManager.CM.player.PreventAttacks = false; GameSceneManager.allowedToPause = true; if (CutsceneEnded is TimedEvent) { CutsceneEnded(); } AllowedToGainPoints = true; if (isGameLevel) { CanvasManager.CM.pointsManager.scoreUIText.transform.parent.gameObject.SetActive(true); } //Set up timer UI variables sliderFill.color = Color.white; countdownSlider.maxValue = maxSeconds; if (isGameLevel) { countdownSlider.gameObject.SetActive(true); } countdownStageCurrent = 1; countdownStagePrior = 1; int quarter = maxSeconds / 4; //manage game while (!hasWon && secondsElapsed < maxSeconds) { AnimateTimerBasedOnGameProgress(); secondsElapsed++; timerHandleOld = timerHandleGoal; timerHandleGoal = maxSeconds - secondsElapsed; perSecondLerp = 0; yield return(oneSecond); } if (timerSparks != null) { timerSparks.Stop(); } GameSceneManager.allowedToPause = false; GameResolved(); AllowedToGainPoints = false; CanvasManager.CM.player.PreventInput = true; CanvasManager.CM.movesetUI.transform.parent.gameObject.SetActive(false); CutsceneStarted(); //if they player wins, the character stops possessing a body and runs away //if they lose, they fall over dead if (hasWon) { CanvasManager.CM.player.HandleBodyExit(); CanvasManager.CM.player.InCutscene = true; } else { CanvasManager.CM.player.DiedInCutscene(); } if (!GameSceneManager.GameOverScreenShowing) { GameSceneManager.GameOverScreenShowing = true; } //after stopping inputs, wait a second before showing the end screen for a stronger effect on the player yield return(oneSecond); CanvasManager.CM.deathScreen.HideScreen(); //show game over screen gameOverScreen.gameObject.SetActive(true); if (hasWon) { gameOverScreen.AddHighScore(false, CanvasManager.CM.pointsManager.TotalPoints, secondsToMinutes(completionTime)); } else { gameOverScreen.AddHighScore(true, CanvasManager.CM.pointsManager.TotalPoints, ""); } CanvasManager.CM.inGameUIListener.ShowGameOverScreen(); }