public void RestartLevel(bool reset = true) { if (currentLevel.respawnLocked) { return; } SignalManager.BeginReset(); currentCheckpointNumber = 0; currentCheckpointSubObjectives = 0; if (currentLevel.prerespawn != null) { currentLevel.prerespawn(-1, startingLevel: false); } RespawnAllPlayers(); if (reset) { currentLevel.Reset(currentCheckpointNumber, currentCheckpointSubObjectives); if (NetGame.isServer) { NetSceneManager.ResetLevel(currentCheckpointNumber, currentCheckpointSubObjectives); } } currentLevel.BeginLevel(); SignalManager.EndReset(); if (reset) { currentLevel.PostEndReset(currentCheckpointNumber); } }
public void AfterLoad(int checkpointNumber, int subobjectives) { MenuCameraEffects menuCameraEffects = MenuCameraEffects.instance; if ((bool)menuCameraEffects && currentLevelNumber >= 0 && currentLevelNumber < levels.Length) { string text = levels[currentLevelNumber]; if (text != null && text == "Halloween") { menuCameraEffects.ForceDisableOcclusion(forceDisableOcclusion: true); } else { menuCameraEffects.ForceDisableOcclusion(forceDisableOcclusion: false); } } state = GameState.PlayingLevel; defaultLight.gameObject.SetActive(value: false); currentCheckpointNumber = Mathf.Min(checkpointNumber, currentLevel.checkpoints.Length - 1); currentCheckpointSubObjectives = subobjectives; currentLevel.BeginLevel(); if (currentLevel.prerespawn != null) { currentLevel.prerespawn(currentCheckpointNumber, startingLevel: true); } RespawnAllPlayers(); currentLevel.Reset(currentCheckpointNumber, currentCheckpointSubObjectives); CheckpointLoaded(checkpointNumber); SignalManager.EndReset(); currentLevel.PostEndReset(currentCheckpointNumber); }
private IEnumerator ReloadBundleCoroutine() { SignalManager.BeginReset(); if (workshopLevel != null) { MenuCameraEffects.instance.RemoveOverride(); workshopLevel.Reload(); } Time.timeScale = 0f; SceneManager.LoadScene("Empty"); yield return(null); yield return(null); yield return(null); bundle = FileTools.LoadBundle(workshopLevel.dataPath); string[] scenePath = bundle.GetAllScenePaths(); SceneManager.LoadScene(Path.GetFileNameWithoutExtension(scenePath[0])); yield return(null); SubtitleManager.instance.SetProgress(ScriptLocalization.TUTORIAL.LOADING, 1f, 1f); yield return(null); FixupLoadedBundle(SceneManager.GetActiveScene()); bundle.Unload(unloadAllLoadedObjects: false); currentLevel.BeginLevel(); ResetAllPLayers(); Time.timeScale = 1f; SignalManager.EndReset(); FixAssetBundleImport(); }
public void RestartCheckpoint(int checkpointNumber, int subObjectives) { if (!currentLevel.respawnLocked) { currentCheckpointNumber = Mathf.Min(checkpointNumber, currentLevel.checkpoints.Length - 1); currentCheckpointSubObjectives = subObjectives; SignalManager.BeginReset(); if (currentLevel.prerespawn != null) { currentLevel.prerespawn(checkpointNumber, startingLevel: false); } RespawnAllPlayers(); currentLevel.Reset(currentCheckpointNumber, currentCheckpointSubObjectives); if (NetGame.isServer) { NetSceneManager.ResetLevel(currentCheckpointNumber, currentCheckpointSubObjectives); } currentLevel.BeginLevel(); CheckpointLoaded(currentCheckpointNumber); SignalManager.EndReset(); currentLevel.PostEndReset(currentCheckpointNumber); } }
private IEnumerator LoadLevel(string levelId, ulong levelNumber, int checkpointNumber, int checkpointSubObjectives, Action onComplete, WorkshopItemSource levelType) { bool localLevel = false; NetScope.ClearAllButPlayers(); BeforeLoad(); skyColor = RenderSettings.ambientLight; skyboxMaterial = RenderSettings.skybox; state = GameState.LoadingLevel; bool isBundle = !string.IsNullOrEmpty(levelId) || (levelNumber > 16 && levelNumber != ulong.MaxValue); if (isBundle) { if (string.IsNullOrEmpty(levelId)) { bool loaded2 = false; WorkshopRepository.instance.levelRepo.GetLevel(levelNumber, levelType, delegate(WorkshopLevelMetadata l) { workshopLevel = l; loaded2 = true; }); while (!loaded2) { yield return(null); } } else { localLevel = levelId.StartsWith("lvl:"); workshopLevel = WorkshopRepository.instance.levelRepo.GetItem(levelId); } RatingMenu.instance.LoadInit(); if (!localLevel && workshopLevel != null) { App.StartPlaytimeForItem(workshopLevel.workshopId); RatingMenu.instance.QueryRatingStatus(workshopLevel.workshopId); } } App.StartPlaytimeLocalPlayers(); if (currentLevelNumber != (int)levelNumber) { Level oldLevel = currentLevel; SubtitleManager.instance.SetProgress(ScriptLocalization.TUTORIAL.LOADING); Application.backgroundLoadingPriority = ThreadPriority.Low; string sceneName = string.Empty; currentLevelType = levelType; switch (levelType) { case WorkshopItemSource.BuiltIn: sceneName = levels[levelNumber]; break; case WorkshopItemSource.EditorPick: Debug.Log("Loading editor pick level"); sceneName = editorPickLevels[(uint)levelNumber]; break; } Debug.Log("scename = " + sceneName); if (!isBundle) { if (string.IsNullOrEmpty(sceneName)) { sceneName = levels[levelNumber]; } } else { if (!localLevel && workshopLevel != null) { bool loaded = false; WorkshopRepository.instance.levelRepo.LoadLevel(workshopLevel.workshopId, delegate(WorkshopLevelMetadata l) { workshopLevel = l; loaded = true; }); while (!loaded) { yield return(null); } } bundle = null; if (workshopLevel != null) { bundle = FileTools.LoadBundle(workshopLevel.dataPath); } if (bundle == null) { SubtitleManager.instance.ClearProgress(); Debug.Log("Level load failed."); App.instance.ServerFailedToLoad(); SignalManager.EndReset(); yield break; } string[] scenePath = bundle.GetAllScenePaths(); if (string.IsNullOrEmpty(sceneName)) { sceneName = Path.GetFileNameWithoutExtension(scenePath[0]); } } instance.HasSceneLoaded = false; SwitchAssetBundle.LoadingCurrentScene loader2 = SwitchAssetBundle.LoadSceneAsync(sceneName); if (loader2 == null) { AsyncOperation sceneLoader2 = SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Single); while (!sceneLoader2.isDone || !instance.HasSceneLoaded) { yield return(null); } sceneLoader2 = null; SubtitleManager.instance.SetProgress(ScriptLocalization.TUTORIAL.LOADING, 1f, 1f); currentLevelNumber = (int)levelNumber; } else { while (!loader2.isDone || !instance.HasSceneLoaded) { yield return(null); } loader2 = null; SubtitleManager.instance.SetProgress(ScriptLocalization.TUTORIAL.LOADING, 1f, 1f); currentLevelNumber = (int)levelNumber; } } if (currentLevel == null) { SignalManager.EndReset(); onComplete?.Invoke(); yield break; } if (isBundle) { FixupLoadedBundle(SceneManager.GetActiveScene()); bundle.Unload(unloadAllLoadedObjects: false); } if (currentLevelNumber >= 0 && !isBundle) { HumanAnalytics.instance.LoadLevel(levels[currentLevelNumber], (int)levelNumber, checkpointNumber, 0f); } FixAssetBundleImport(); AfterLoad(checkpointNumber, checkpointSubObjectives); if (NetGame.isLocal) { if (levelType == WorkshopItemSource.BuiltIn && currentLevelNumber < levelCount - 1) { GameSave.PassCheckpointCampaign((uint)currentLevelNumber, checkpointNumber, checkpointSubObjectives); } if (levelType == WorkshopItemSource.EditorPick) { GameSave.PassCheckpointEditorPick((uint)currentLevelNumber, checkpointNumber, checkpointSubObjectives); } } onComplete?.Invoke(); }
private IEnumerator EnterLobbyAsync(bool asServer, Action callback = null) { NetScope.ClearAllButPlayers(); object obj = stateLock; Monitor.Enter(obj); try { state = ((!asServer) ? AppSate.ClientLoadLobby : AppSate.ServerLoadLobby); SuspendDeltasForLoad(); Game.instance.HasSceneLoaded = false; string sceneName = null; if (Game.multiplayerLobbyLevel < 128) { sceneName = WorkshopRepository.GetLobbyFilename(Game.multiplayerLobbyLevel); goto IL_01fb; } bool loaded = false; WorkshopLevelMetadata workshopLevel = null; WorkshopRepository.instance.levelRepo.LoadLevel(Game.multiplayerLobbyLevel, delegate(WorkshopLevelMetadata l) { workshopLevel = l; loaded = true; }); while (!loaded) { yield return(null); } if (workshopLevel != null) { lobbyAssetbundle = FileTools.LoadBundle(workshopLevel.dataPath); string[] allScenePaths = lobbyAssetbundle.GetAllScenePaths(); sceneName = Path.GetFileNameWithoutExtension(allScenePaths[0]); StopPlaytimeForItem(previousLobbyID); StartPlaytimeForItem(workshopLevel.workshopId); previousLobbyID = workshopLevel.workshopId; goto IL_01fb; } if (NetGame.isServer) { goto IL_01fb; } SubtitleManager.instance.ClearProgress(); UnityEngine.Debug.Log("Level load failed."); instance.ServerFailedToLoad(); SignalManager.EndReset(); goto end_IL_0055; IL_01fb: if (string.IsNullOrEmpty(sceneName)) { sceneName = WorkshopRepository.GetLobbyFilename(0uL); Game.multiplayerLobbyLevel = 0uL; } AsyncOperation loader = SceneManager.LoadSceneAsync(sceneName); if (loader != null) { while (!loader.isDone || !Game.instance.HasSceneLoaded) { yield return(null); } } if (state != AppSate.ServerLoadLobby && state != AppSate.ClientLoadLobby) { UnityEngine.Debug.Log("Exiting wrong app state (" + state.ToString() + ")"); } state = ((!asServer) ? AppSate.ClientLobby : AppSate.ServerLobby); ResumeDeltasAfterLoad(); if (!RatingMenu.instance.ShowRatingMenu()) { MenuSystem.instance.ShowMainMenu <MultiplayerLobbyMenu>(); } Game.instance.state = GameState.Inactive; UpdateJoinable(); callback?.Invoke(); if (queueAfterLevelLoad != null) { Action action = queueAfterLevelLoad; queueAfterLevelLoad = null; if (NetGame.netlog) { UnityEngine.Debug.Log("Executing queue"); } action(); } if (lobbyAssetbundle != null) { lobbyAssetbundle.Unload(unloadAllLoadedObjects: false); lobbyAssetbundle = null; } Game.instance.FixAssetBundleImport(lobby: true); end_IL_0055 :; } finally { } }