public void ResetLevel() { StopAllCoroutines(); Time.timeScale = 1f; scoreSystem.ResetScore(); gui.gameObject.SetActive(true); //TODO only enable the ui upon player control gui.LevelReset(); pauseMenu.gameObject.SetActive(false); cameraShakeModule.StopAllShaking(); playArea.SetCamsToMode(initialMode); playArea.SetAreaToMode(initialMode); playArea.SetMode(initialMode); levelTrackFollower.LevelReset(); // enemySpawner.LevelReset(); // enemySpawner.SetMode(initialMode); enemySystem.LevelReset(); worldObstacleContainer.LevelReset(); foreach (ObjectPool pool in objectPools) { pool.ResetPool(); } for (int i = 0; i < players.Length; i++) { Player player = players[i]; player.gameObject.SetActive(true); player.LevelResetInit(playerMaxLives); player.Mode = initialMode; player.transform.parent = playArea.transform; playArea.PutPlayerObjectToSpawnPoint(player.gameObject, playerOffsets[i]); playerRespawnStartTimes[i] = 0f; playerGameover[i] = false; player.enabled = false; player.SetRegularComponentsActive(false); StartCoroutine(playArea.TransitionPlayerWhileRespawning(player.gameObject, playerOffsets[i], levelResetPlayerControlDelay)); StartCoroutine(WaitAndEnablePlayerControl(player, levelResetPlayerControlDelay)); } }