Exemple #1
0
 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);
     }
 }
Exemple #2
0
    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);
    }
Exemple #3
0
    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();
    }
Exemple #4
0
 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);
     }
 }
Exemple #5
0
    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();
    }
Exemple #6
0
        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
            {
            }
        }