Example #1
0
        static PlayerTypeLoader CreatePlayerTypeLoader()
        {
            if (mPlayerType == EPlayerType.Creation)
            {
                return(new CreationPlayerTypeLoader());
            }
            else if (mPlayerType == EPlayerType.Multiple)
            {
                if (MultiPlayerTypeArchiveMgr.Instance.multiScenario == null)
                {
                    MultiPlayerTypeArchiveMgr.Instance.New();
                }


                MultiPlayerTypeLoader multiPlayerTypeLoader = MultiPlayerTypeArchiveMgr.Instance.multiScenario;

                // ???????????????????????????????????????????????BUG?????????
                // 影响多人除故事模式外的其它模式,在退出到大厅后无法进入游戏BUG。暂时屏蔽

                //if (!string.IsNullOrEmpty(yirdName))
                //{
                //    multiPlayerTypeLoader.SetYirdName(yirdName);
                //}
                //else
                multiPlayerTypeLoader.New(sceneMode, gameName);
                return(multiPlayerTypeLoader);
            }
            else if (mPlayerType == EPlayerType.Single)
            {
                ArchiveMgr.Instance.LoadAndCleanSwap(loadArchive);

                if (loadArchive == ArchiveMgr.ESave.New)
                {
                    SinglePlayerTypeArchiveMgr.Instance.New();

                    SinglePlayerTypeLoader singlePlayerTypeLoader = SinglePlayerTypeArchiveMgr.Instance.singleScenario;

                    singlePlayerTypeLoader.New(sceneMode, mapUID, gameName);
                }
                else
                {
                    SinglePlayerTypeArchiveMgr.Instance.Restore();

                    SinglePlayerTypeLoader singlePlayerTypeLoader = SinglePlayerTypeArchiveMgr.Instance.singleScenario;

                    if (!string.IsNullOrEmpty(targetYird))
                    {
                        singlePlayerTypeLoader.SetYirdName(targetYird);
                    }
                }

                return(SinglePlayerTypeArchiveMgr.Instance.singleScenario);
            }
            else if (mPlayerType == EPlayerType.Tutorial)
            {
                TutorialPlayerTypeLoader tutorialScenario = new TutorialPlayerTypeLoader();

                tutorialScenario.tutorialMode = tutorialMode;

                return(tutorialScenario);
            }
            else
            {
                return(null);
            }
        }
Example #2
0
        public static void Run()
        {
            BeforeLoad();
            PeLauncher.Instance.endLaunch = delegate()
            {
                if (IsMulti && !NetworkInterface.IsClient)
                {
                    return(true);
                }

                //if (!VFVoxelTerrain.TerrainVoxelComplete)
                if (!VFVoxelTerrain.TerrainColliderComplete)
                {
                    return(false);
                }

                SceneMan.self.StartWork();

                PeEntity mainPlayer = MainPlayer.Instance.entity;
                if (null == mainPlayer)
                {
                    return(false);
                }

                MotionMgrCmpt motion = mainPlayer.GetCmpt <MotionMgrCmpt>();
                if (motion == null)
                {
                    return(false);
                }

                if (motion.freezePhyStateForSystem)
                {
                    UnityEngine.Vector3 safePos;
                    if (PeGameMgr.IsMulti)
                    {
                        if (PlayerNetwork.mainPlayer != null && PlayerNetwork.mainPlayer._curSceneId == (int)Pathea.SingleGameStory.StoryScene.MainLand)
                        {
                            if (PETools.PE.FindHumanSafePos(mainPlayer.position, out safePos, 10))
                            {
                                mainPlayer.position = safePos;
                            }
                            else
                            {
                                mainPlayer.position += 10 * UnityEngine.Vector3.up;
                            }
                        }
                    }
                    else
                    {
                        if (PETools.PE.FindHumanSafePos(mainPlayer.position, out safePos, 10))
                        {
                            mainPlayer.position = safePos;
                        }
                        else
                        {
                            mainPlayer.position += 10 * UnityEngine.Vector3.up;
                        }
                    }


                    return(false);
                }

                if (mSceneMode == ESceneMode.Custom)
                {
                    PeCustom.PeCustomScene.Self.Notify(PeCustom.ESceneNoification.SceneBegin);
                }

                PostLoad();
                System.GC.Collect();
                return(true);
            };

            PlayerTypeLoader scenario = CreatePlayerTypeLoader();

            if (scenario == null)
            {
                return;
            }

            scenario.Load();

            SinglePlayerTypeLoader singlePlayerTypeLoader = scenario as SinglePlayerTypeLoader;

            if (singlePlayerTypeLoader != null)
            {
                //the data is from archive in single player mode
                sceneMode = singlePlayerTypeLoader.sceneMode;
                yirdName  = singlePlayerTypeLoader.yirdName;
                gameName  = singlePlayerTypeLoader.gameName;
            }
            else
            {
                MultiPlayerTypeLoader multiPlayerTypeLoader = scenario as MultiPlayerTypeLoader;
                if (multiPlayerTypeLoader != null)
                {
                    //the data is from archive in single player mode
                    sceneMode = multiPlayerTypeLoader.sceneMode;
                    yirdName  = multiPlayerTypeLoader.yirdName;
                    gameName  = multiPlayerTypeLoader.gameName;
                }
            }

            //zhujiangbo:bug here if a game switch from edited terrain to random terrain
            VFVoxelTerrain.RandomMap = randomMap;

            PeLauncher.Instance.StartLoad();
        }