public void CreateStage(string typeName, List <string> avatarSpawnNameList, string baseWeatherName, bool isContinued = false) { MonoBasePerpStage component; StageEntry stageEntryByName = StageData.GetStageEntryByName(typeName); bool isBorn = this._activeStageEntry == null; Vector3 zero = Vector3.zero; MonoBasePerpStage.ContinueWeatherDataSettings continueData = null; if (this._activeStageEntry == null) { component = ((GameObject)UnityEngine.Object.Instantiate(Miscs.LoadResource(stageEntryByName.GetPerpStagePrefabPath(), BundleType.RESOURCE_FILE))).GetComponent <MonoBasePerpStage>(); SetPerpstageNodeVisibility(component, stageEntryByName, false, false); SetPerpstageNodeVisibility(component, stageEntryByName, true, true); } else if (this._activeStageEntry.PerpStagePrefabPath != stageEntryByName.PerpStagePrefabPath) { zero = this._perpStage.transform.position; continueData = this._perpStage.GetContinueWeatherDataSetup(); UnityEngine.Object.DestroyImmediate(this._perpStage.gameObject); Resources.UnloadUnusedAssets(); component = ((GameObject)UnityEngine.Object.Instantiate(Miscs.LoadResource(stageEntryByName.GetPerpStagePrefabPath(), BundleType.RESOURCE_FILE))).GetComponent <MonoBasePerpStage>(); SetPerpstageNodeVisibility(component, stageEntryByName, false, false); SetPerpstageNodeVisibility(component, stageEntryByName, true, true); } else { SetPerpstageNodeVisibility(this._perpStage, this._activeStageEntry, false, true); zero = -this._perpStage.transform.Find(this._activeStageEntry.LocationPointName).localPosition; continueData = this._perpStage.GetContinueWeatherDataSetup(); component = this._perpStage; SetPerpstageNodeVisibility(component, stageEntryByName, false, false); SetPerpstageNodeVisibility(component, stageEntryByName, true, true); } Vector3 offset = this.InitAfterCreateStage(stageEntryByName, component, zero, isBorn, baseWeatherName, continueData, isContinued); Singleton <AvatarManager> .Instance.PreloadTeamAvatars(); Singleton <EventManager> .Instance.FireEvent(new EvtStageCreated(avatarSpawnNameList, isBorn, offset), MPEventDispatchMode.Normal); }
private Vector3 InitAfterCreateStage(StageEntry stageEntry, MonoBasePerpStage perpStage, Vector3 preStagePos, bool isBorn, string baseWeatherName, MonoBasePerpStage.ContinueWeatherDataSettings continueData, bool isContinued) { Vector3 zero = Vector3.zero; Vector3 vector2 = Vector3.zero; if (!string.IsNullOrEmpty(stageEntry.LocationPointName)) { perpStage.transform.position = Vector3.zero; perpStage.transform.position = -perpStage.transform.Find(stageEntry.LocationPointName).localPosition; vector2 = perpStage.transform.position - preStagePos; } if (this._activeStageEntry == null) { perpStage.Init(stageEntry, baseWeatherName); } else { float renderingTimer = 0f; float weatherTimer = 0f; ConfigWeatherData fromWeatherData = null; ConfigWeatherData toWeatherData = null; string toWeatherName = null; if (continueData != null) { renderingTimer = continueData.renderingDataContinueTimer; weatherTimer = continueData.weatherContinueTimer; fromWeatherData = continueData.currentWeatherData; toWeatherData = continueData.continueWeatherData; toWeatherName = continueData.continueWeatherName; } if (this._activeStageEntry.PerpStagePrefabPath != stageEntry.PerpStagePrefabPath) { if (isContinued) { if (renderingTimer > 0f) { if (toWeatherName != null) { perpStage.Init(stageEntry, fromWeatherData, toWeatherName, renderingTimer, weatherTimer); } else { perpStage.Init(stageEntry, fromWeatherData, toWeatherData, renderingTimer, weatherTimer); } } else if (toWeatherName != null) { perpStage.Init(stageEntry, toWeatherName); } else { perpStage.Init(stageEntry, toWeatherData); } } else { perpStage.Init(stageEntry, baseWeatherName); } } else if (isContinued) { if (renderingTimer > 0f) { perpStage.TransitWeatherData(toWeatherData, renderingTimer, weatherTimer); } else { perpStage.Reset(stageEntry, toWeatherData); } } else { perpStage.Reset(stageEntry, WeatherData.GetWeatherDataConfig(baseWeatherName)); } this.CleanForStageTransit(); } GameObject obj2 = (GameObject)UnityEngine.Object.Instantiate(Miscs.LoadResource(stageEntry.GetEnvPrefabPath(), BundleType.RESOURCE_FILE)); obj2.transform.position = Vector3.zero; obj2.transform.rotation = Quaternion.identity; MonoStageEnv component = obj2.GetComponent <MonoStageEnv>(); Vector3 vector3 = new Vector3(0f, -0.05f, 0f); Transform transform = Miscs.FindFirstChildGivenLayerAndCollider(obj2.transform, LayerMask.NameToLayer("StageCollider")); if (transform != null) { transform.position += vector3; } this.RegisterStage(stageEntry, perpStage, component); return(vector2); }