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); } }
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(); }