Ejemplo n.º 1
0
        private IEnumerator LaunchGame(string levelPath, ulong level, WorkshopItemSource type, int checkpoint, int subObjectives, Action onComplete)
        {
            object obj = stateLock;

            Monitor.Enter(obj);
            try
            {
                if (state == AppSate.Menu || state == AppSate.PlayLevel || state == AppSate.ClientJoin || state == AppSate.ClientLobby || state == AppSate.ClientPlayLevel || state == AppSate.ClientWaitServerLoad || state == AppSate.ServerLobby || state != AppSate.ServerPlayLevel)
                {
                }
                bool ui = state == AppSate.Menu || state == AppSate.ServerLobby || state == AppSate.ClientLobby || state == AppSate.ClientJoin;
                if (ui)
                {
                    MenuSystem.instance.FadeOutActive();
                }
                if (isServer || isClient)
                {
                    MenuCameraEffects.FadeToBlack((!ui) ? 0.02f : 0.2f);
                    Dialogs.ShowLoadLevelProgress(level);
                }
                if (isServer)
                {
                    state = AppSate.ServerLoadLevel;
                }
                else if (isClient)
                {
                    state = AppSate.ClientLoadLevel;
                }
                else
                {
                    state = AppSate.LoadLevel;
                }
                queueAfterLevelLoad = null;
                if (ui)
                {
                    yield return(new WaitForSeconds(0.2f));
                }
                NetStream.DiscardPools();
                Game.instance.BeginLoadLevel(levelPath, level, checkpoint, subObjectives, delegate
                {
                    lock (stateLock)
                    {
                        if (state == AppSate.LoadLevel || state == AppSate.ServerLoadLevel || state != AppSate.ClientLoadLevel)
                        {
                        }
                        MenuSystem.instance.ExitMenus();
                        NetStream.DiscardPools();
                        ResumeDeltasAfterLoad();
                        if (onComplete != null)
                        {
                            onComplete();
                        }
                        if (queueAfterLevelLoad != null)
                        {
                            Action action       = queueAfterLevelLoad;
                            queueAfterLevelLoad = null;
                            if (NetGame.netlog)
                            {
                                UnityEngine.Debug.Log("Executing queue");
                            }
                            action();
                        }
                    }
                }, type);
            }
            finally
            {
            }
        }