//房间配置寻路数据 public IEnumerator ConfigPathfinderData(GameResPackage.AsyncLoadPackageData loadData) { //寻路组件 Pathfinder finder = m_roomObj.AddComponent <Pathfinder>(); finder.MapStartPosition = new Vector2(m_locatorObj.transform.position.x, m_locatorObj.transform.position.z); finder.MapEndPosition = new Vector2(m_RTLocatorObj.transform.position.x, m_RTLocatorObj.transform.position.z); finder.Tilesize = GameSettings.Singleton.m_roomPathfinderTileSize; finder.CreateMap(m_obstacleData); for (int i = 0; i < m_gateList.Count; i++) { if (!m_gateList[i].isGateOpen) { continue; } if (null != m_gateList[i].BridgeData) { GameResPackage.AsyncLoadPackageData loadData2 = new GameResPackage.AsyncLoadPackageData(); IEnumerator e = m_gateList[i].BridgeData.nextRoomNode.ConfigPathfinderData(loadData2); while (true) { e.MoveNext(); if (loadData2.m_isFinish) { break; } yield return(e.Current); } } } loadData.m_isFinish = true; }
//协程-加载武器 public IEnumerator Coroutine_LoadWeapon(GameObject parentObj, int weaponID, GameResPackage.AsyncLoadPackageData loadData) { Transform t = Actor.S_LookupBone2(parentObj.transform, "LeftArmWeapon"); if (t != null) { PoolManager.Singleton.ReleaseObj(t.gameObject); } t = Actor.S_LookupBone2(parentObj.transform, "RightArmWeapon"); if (t != null) { PoolManager.Singleton.ReleaseObj(t.gameObject); } WeaponInfo weaponInfo = GameTable.WeaponInfoTableAsset.Lookup(weaponID); if (weaponInfo == null) { Debug.Log("WeaponInfo load error,id:" + weaponID); } else { if (weaponInfo.LeftModelID != 0) { Transform leftArmParentTrans = Actor.S_LookupBone2(parentObj.transform, weaponInfo.LeftPoint); GameResPackage.AsyncLoadPackageData data = new GameResPackage.AsyncLoadPackageData(); IEnumerator e = Coroutine_ArmLoad(leftArmParentTrans, "LeftArmWeapon", weaponInfo.LeftModelID, weaponInfo.IsHideLeftModel, data); while (true) { e.MoveNext(); if (data.m_isFinish) { break; } yield return(e.Current); } } if (weaponInfo.RightModelID != 0) { Transform rightArmParentTrans = Actor.S_LookupBone2(parentObj.transform, weaponInfo.RightPoint); GameResPackage.AsyncLoadPackageData data = new GameResPackage.AsyncLoadPackageData(); IEnumerator e = Coroutine_ArmLoad(rightArmParentTrans, "RightArmWeapon", weaponInfo.RightModelID, weaponInfo.IsHideRightModel, data); while (true) { e.MoveNext(); if (data.m_isFinish) { break; } yield return(e.Current); } } } loadData.m_isFinish = true; }
// 加载 public void Load(List <string> nameList, OnFinished finished) { if (nameList == null) { return; } m_nameList.Clear(); m_total = 1; m_cur = 1; m_finished = finished; PreResourceInfo info = null; foreach (string name in nameList) { if (m_nameList.Contains(name)) { continue; } m_list.TryGetValue(name, out info); m_nameList.Add(name); // 总共加载资源数 if (null != info) { m_total = m_total + info.m_list.Count + 1; } else { m_total = m_total + 1; } Debug.Log("Load----------" + name); } Debug.Log("m_total:" + m_total); if (m_nameList.Count <= 0) { return; } GameResPackage.AsyncLoadPackageData data = new GameResPackage.AsyncLoadPackageData(); MainGame.Singleton.StartCoroutine(Load(m_nameList[0], (int)Type.enPrefab, data)); }
IEnumerator Coroutine_LoadAll() { foreach (var item in AllGameResMap) { GameResPackage.AsyncLoadPackageData data = new GameResPackage.AsyncLoadPackageData(); IEnumerator e = item.Value.LoadPackageAsync(data); while (true) { e.MoveNext(); if (data.m_isFinish) { break; } yield return(e.Current); } } }
IEnumerator Coroutine_PreLoad() { foreach (var item in AllGameResMap) { if (item.Value.m_loadType != GameResPackage.ENLoadType.enPreLoad) { continue; } GameResPackage.AsyncLoadPackageData data = new GameResPackage.AsyncLoadPackageData(); IEnumerator e = item.Value.LoadPackageAsync(data); while (true) { e.MoveNext(); if (data.m_isFinish) { break; } yield return(e.Current); } } m_isPreLoadFinish = true; }
// 生成场景资源数据 public IEnumerator BuildSceneResObj(SERoomDataTree sce, GameResPackage.AsyncLoadPackageData loadData, int gateIndex = -1) { string obstacleFileName = "Prefabs/" + m_RoomPrefabName + "-bytes.bytes"; GameResPackage.AsyncLoadObjectData loadData2 = new GameResPackage.AsyncLoadObjectData(); IEnumerator e = PoolManager.Singleton.Coroutine_Load(obstacleFileName, loadData2, false, false); while (true) { e.MoveNext(); if (loadData2.m_isFinish) { break; } yield return(e.Current); } if (loadData2.m_obj != null) { TextAsset asset = loadData2.m_obj as TextAsset; if (asset == null) { Debug.Log("obstacleFileName=" + obstacleFileName); } else { m_obstacleData = new SceneObstacleData(); m_obstacleData.Load(asset.bytes); } } loadData2 = new GameResPackage.AsyncLoadObjectData(); e = PoolManager.Singleton.Coroutine_Load(GameData.GetPrefabPath(m_RoomPrefabName), loadData2, false, false); while (true) { e.MoveNext(); if (loadData2.m_isFinish) { break; } yield return(e.Current); } if (loadData2.m_obj != null) { sce.mRoomObj = loadData2.m_obj as GameObject; } string roomDataName = m_RoomPrefabName + "-data"; loadData2 = new GameResPackage.AsyncLoadObjectData(); e = PoolManager.Singleton.Coroutine_Load(GameData.GetPrefabPath(roomDataName), loadData2, false, false); while (true) { e.MoveNext(); if (loadData2.m_isFinish) { break; } yield return(e.Current); } if (loadData2.m_obj != null) { sce.mRoomData = loadData2.m_obj as GameObject; } sce.mRoomInfoTree = this; // for (int i = 0; i < m_gateList.Count; i++) // { // sce.mGateData[i] = new SEGateData(); // if (null != m_gateList[i].BridgeData) // { // SceneBridgeInfo bridgeInfo = GameTable.SceneBridgeTableAsset.Lookup(m_gateList[i].BridgeData.bridgeObjId); // if (null != bridgeInfo) // { // loadData2 = new GameResPackage.AsyncLoadObjectData(); // e = PoolManager.Singleton.Coroutine_Load(GameData.GetPrefabPath(bridgeInfo.bridgeHeadPrefab), loadData2, false, false); // while (true) // { // e.MoveNext(); // if (loadData2.m_isFinish) // { // break; // } // yield return e.Current; // } // if (loadData2.m_obj != null) // { // sce.mGateData[i].mBridgeHeadObj = loadData2.m_obj as GameObject; // } // loadData2 = new GameResPackage.AsyncLoadObjectData(); // e = PoolManager.Singleton.Coroutine_Load(GameData.GetPrefabPath(bridgeInfo.bridgeBodyPrefab), loadData2, false, false); // while (true) // { // e.MoveNext(); // if (loadData2.m_isFinish) // { // break; // } // yield return e.Current; // } // if (loadData2.m_obj != null) // { // sce.mGateData[i].mBridgeBodyObj = loadData2.m_obj as GameObject; // } // loadData2 = new GameResPackage.AsyncLoadObjectData(); // e = PoolManager.Singleton.Coroutine_Load(GameData.GetPrefabPath(bridgeInfo.bridgeTailPrefab), loadData2, false, false); // while (true) // { // e.MoveNext(); // if (loadData2.m_isFinish) // { // break; // } // yield return e.Current; // } // if (loadData2.m_obj != null) // { // sce.mGateData[i].mBridgeTailObj = loadData2.m_obj as GameObject; // } // //sce.mGateData[i].mBridgeHeadObj = GameData.LoadPrefab<GameObject>(bridgeInfo.bridgeHeadPrefab); // //sce.mGateData[i].mBridgeBodyObj = GameData.LoadPrefab<GameObject>(bridgeInfo.bridgeBodyPrefab); // } // sce.mGateData[i].mIsHaveTunnel = true; // sce.mGateData[i].mBridgeCenterLength = m_gateList[i].BridgeData.bridgeCenterLength; // sce.mGateData[i].mNextRoomNode = new SERoomDataTree(); // m_gateList[i].isGateOpen = true; // GameResPackage.AsyncLoadPackageData loadData3 = new GameResPackage.AsyncLoadPackageData(); // IEnumerator e6 = m_gateList[i].BridgeData.nextRoomNode.BuildSceneResObj(sce.mGateData[i].mNextRoomNode, loadData3, (i + 2) % 4);//一共四个门0对应2,1对应3。0+2%4= 2,1+2%4=3,2+2%4=0,3+2%4=1。· // while (true) // { // e6.MoveNext(); // if (loadData3.m_isFinish) // { // break; // } // yield return e6.Current; // } // } // else // {//当该房间的这个门是没有联通出去的路的,但是这个门是另外房间进来的门那这个门要有意义。否则无意义 // if (gateIndex == i) // { // m_gateList[i].isGateOpen = true; // m_gateList[i].gateOpenCondId = ENGateOpenCondType.enNone; // } // else // { // m_gateList[i].isGateOpen = false; // } // } // } loadData.m_isFinish = true; }
IEnumerator LoadInfo(string name, int type, GameResPackage.AsyncLoadPackageData loadData) { if (type == (int)Type.enEffect) { GameResPackage.AsyncLoadObjectData data = new GameResPackage.AsyncLoadObjectData(); IEnumerator e = PoolManager.Singleton.Coroutine_Load(GameData.GetEffectPath(name), data); while (true) { e.MoveNext(); if (data.m_isFinish) { break; } yield return(e.Current); } //yield return PoolManager.Singleton.LoadEffectWithPool(name); } else { GameResPackage.AsyncLoadObjectData data = new GameResPackage.AsyncLoadObjectData(); IEnumerator e = PoolManager.Singleton.Coroutine_Load(name, data); while (true) { e.MoveNext(); if (data.m_isFinish) { break; } yield return(e.Current); } //yield return PoolManager.Singleton.LoadObjWithoutDir(name, false); } m_cur++; Debug.Log("LoadInfo 更新m_cur " + m_cur + ",name:" + name); m_tempList.Remove(name); if (m_tempList.Count == 0) { // 移除第一个 m_nameList.RemoveAt(0); // 所有资源加载完成 if (m_nameList.Count == 0) { Debug.Log("所有资源加载完成"); if (null != m_finished) { m_finished(); } } else { GameResPackage.AsyncLoadPackageData loadData2 = new GameResPackage.AsyncLoadPackageData(); IEnumerator e = Load(m_nameList[0], 0, loadData2); while (true) { e.MoveNext(); if (loadData2.m_isFinish) { break; } yield return(e.Current); } //MainGame.Singleton.StartCoroutine(Load(m_nameList[0], 0)); } } else { GameResPackage.AsyncLoadPackageData loadData2 = new GameResPackage.AsyncLoadPackageData(); IEnumerator e = LoadInfo(m_tempList[0], 1, loadData2); while (true) { e.MoveNext(); if (loadData2.m_isFinish) { break; } yield return(e.Current); } //MainGame.Singleton.StartCoroutine(LoadInfo(m_tempList[0],1)); } loadData.m_isFinish = true; }
IEnumerator Load(string name, int type, GameResPackage.AsyncLoadPackageData loadData) { if (type == (int)Type.enEffect) { GameResPackage.AsyncLoadObjectData data = new GameResPackage.AsyncLoadObjectData(); IEnumerator e = PoolManager.Singleton.Coroutine_Load(GameData.GetEffectPath(name), data); while (true) { e.MoveNext(); if (data.m_isFinish) { break; } yield return(e.Current); } //yield return PoolManager.Singleton.LoadEffectWithPool(name); } else { GameResPackage.AsyncLoadObjectData data = new GameResPackage.AsyncLoadObjectData(); IEnumerator e = PoolManager.Singleton.Coroutine_Load(name, data); while (true) { e.MoveNext(); if (data.m_isFinish) { break; } yield return(e.Current); } //yield return PoolManager.Singleton.LoadObjWithoutDir(name, false); } m_cur++; Debug.Log("Load 更新 m_cur" + m_cur + ",name:" + name); PreResourceInfo info = null; m_list.TryGetValue(name, out info); m_tempList.Clear(); // 如果没有 子列表资源 if (null == info) { // 移除 m_nameList.RemoveAt(0); // 所有资源加载完成 if (m_nameList.Count == 0) { Debug.Log("所有资源加载完成"); if (null != m_finished) { m_finished(); } } else { //MainGame.Singleton.StartCoroutine(Load(m_nameList[0], (int)Type.enPrefab)); GameResPackage.AsyncLoadPackageData loadData2 = new GameResPackage.AsyncLoadPackageData(); IEnumerator e = Load(m_nameList[0], (int)Type.enPrefab, loadData2); while (true) { e.MoveNext(); if (loadData2.m_isFinish) { break; } yield return(e.Current); } } } else { foreach (KeyValuePair <string, int> item in info.m_list) { m_tempList.Add(item.Key); } if (m_tempList.Count == 0) { // 移除 m_nameList.RemoveAt(0); // 所有资源加载完成 if (m_nameList.Count == 0) { Debug.Log("所有资源加载完成"); if (null != m_finished) { m_finished(); } } else { //MainGame.Singleton.StartCoroutine(Load(m_nameList[0], (int)Type.enPrefab)); GameResPackage.AsyncLoadPackageData loadData2 = new GameResPackage.AsyncLoadPackageData(); IEnumerator e = Load(m_nameList[0], (int)Type.enPrefab, loadData2); while (true) { e.MoveNext(); if (loadData2.m_isFinish) { break; } yield return(e.Current); } } } else { //MainGame.Singleton.StartCoroutine(LoadInfo(m_tempList[0], (int)Type.enEffect)); GameResPackage.AsyncLoadPackageData loadData2 = new GameResPackage.AsyncLoadPackageData(); IEnumerator e = LoadInfo(m_tempList[0], (int)Type.enEffect, loadData2); while (true) { e.MoveNext(); if (loadData2.m_isFinish) { break; } yield return(e.Current); } } loadData.m_isFinish = true; } }
//协程-加载武器 IEnumerator Coroutine_ArmLoad(Transform parentTrans, string armWeaponName, int armModelID, bool isHideModel, GameResPackage.AsyncLoadPackageData loadData) { ModelInfo modelInfo = GameTable.ModelInfoTableAsset.Lookup(armModelID); if (modelInfo == null) { Debug.Log("ModelInfo load fail, id:" + armModelID); } else { GameResPackage.AsyncLoadObjectData data = new GameResPackage.AsyncLoadObjectData(); IEnumerator e = PoolManager.Singleton.Coroutine_Load(GameData.GetPrefabPath(modelInfo.ModelFile), data, true); while (true) { e.MoveNext(); if (data.m_isFinish) { break; } yield return(e.Current); } if (data.m_obj != null) { GameObject armObj = data.m_obj as GameObject; if (armObj != null) { armObj.layer = parentTrans.gameObject.layer; foreach (Transform t in armObj.transform.GetComponentsInChildren <Transform>()) { t.gameObject.layer = armObj.layer; } armObj.transform.parent = parentTrans; armObj.transform.LocalPositionY(0); armObj.transform.LocalPositionX(0); armObj.transform.LocalPositionZ(0); armObj.transform.LocalScaleX(1); armObj.transform.LocalScaleY(1); armObj.transform.LocalScaleZ(1); armObj.transform.localRotation = Quaternion.Euler(0, 0, 0); armObj.name = armWeaponName; armObj.SetActive(!isHideModel); } } else { Debug.LogError("load obj fail, name:" + modelInfo.ModelFile); } } loadData.m_isFinish = true; }
//协程-加载模型,并播放standby动画 IEnumerator Coroutine_LoadModel(string prefabName, int modelID, int weaponID, GameObject parentObj, GameResPackage.AsyncLoadObjectData data, bool isAutoActive = true) { IEnumerator e = PoolManager.Singleton.Coroutine_Load(prefabName, data, true); while (true) { e.MoveNext(); if (data.m_isFinish) { break; } yield return(e.Current); } if (null != data.m_obj) { GameObject obj = data.m_obj as GameObject; obj.layer = GameObject.Find("UI Root (2D)").layer; obj.SetActive(true); foreach (Transform t in obj.transform.GetComponentsInChildren <Transform>()) { t.gameObject.layer = obj.layer; } PreAnimationLoad.Singleton.LoadAnimation(obj, modelID, weaponID); Animation MainAnim = obj.GetComponent <Animation>(); if (null != MainAnim) { string mAnimName = ""; ModelInfo info = GameTable.ModelInfoTableAsset.Lookup(modelID); WeaponInfo wInfo = GameTable.WeaponInfoTableAsset.Lookup(weaponID); if (info != null && wInfo != null) { mAnimName = "a-" + info.modelType.ToString() + "-w" + ((int)wInfo.WeaponType).ToString() + "-"; } AnimInfo tempAnimData = GameTable.AnimationTableAsset.Lookup("standby"); if (null != tempAnimData) { mAnimName = mAnimName + tempAnimData.AnimName[UnityEngine.Random.Range(0, tempAnimData.AnimName.Length)]; } AnimationClip clip = MainAnim.GetClip(mAnimName); if (clip != null) { MainAnim.CrossFade(clip.name); } else { Debug.LogWarning("play model animation fail,prefabName:" + prefabName + ",animationName:" + mAnimName); } } obj.transform.parent = parentObj.transform; obj.transform.localPosition = Vector3.zero; obj.transform.localScale = Vector3.one; obj.transform.localRotation = Quaternion.Euler(0, 0, 0); if (weaponID != 0) { GameResPackage.AsyncLoadPackageData data2 = new GameResPackage.AsyncLoadPackageData(); IEnumerator e2 = Coroutine_LoadWeapon(obj, weaponID, data2); while (true) { e2.MoveNext(); if (data2.m_isFinish) { break; } yield return(e2.Current); } } obj.SetActive(isAutoActive); } }
public IEnumerator LoadDropItem(DropItemPerformanceType item) { yield return(new WaitForSeconds(0.2f)); GameResPackage.AsyncLoadPackageData loadData = new GameResPackage.AsyncLoadPackageData(); IEnumerator e = null; EventItemInfo eventInfo = GameTable.eventItemAsset.LookUp(item.m_intParam); DropItemPerformanceType.Type type = item.m_type; if (eventInfo != null) { type = (DropItemPerformanceType.Type)eventInfo.dropType; } switch (type) { // 卡牌 case DropItemPerformanceType.Type.enCard: { DropItemPerformanceCard cardItem = (DropItemPerformanceCard)item; foreach (int cardId in cardItem.m_cardList) { e = NewDropItem(loadData, item, cardId); while (true) { e.MoveNext(); if (loadData.m_isFinish) { break; } yield return(e.Current); } Debug.Log("....cardId:" + cardId); yield return(new WaitForSeconds(0.1f)); } // 卡牌的增长数目 Reward.Singleton.m_cardDesNum = Reward.Singleton.m_cardNum + cardItem.m_cardList.Count; break; } // 金钱 case DropItemPerformanceType.Type.enGold: { // 如果有钱则掉落金币 效果 if (item.m_intParam > 0) { int min = 15; int max = 30; WorldParamInfo worldInfo = GameTable.WorldParamTableAsset.Lookup((int)ENWorldParamIndex.enDropGoldMinMax); if (null != worldInfo) { List <int> cardList = ConvertorTool.StringToList_Int(worldInfo.StringTypeValue); if (null != cardList && cardList.Count >= 2) { min = cardList[0]; max = cardList[1]; } } // 金币增长的数目 int randomGold = UnityEngine.Random.Range(100, 1000); Reward.Singleton.m_goldDesNum = Reward.Singleton.m_goldNum + randomGold; int dropNum = UnityEngine.Random.Range(min, max); for (int i = 0; i < dropNum; i++) { e = NewDropItem(loadData, item); while (true) { e.MoveNext(); if (loadData.m_isFinish) { break; } yield return(e.Current); } yield return(new WaitForSeconds(0.01f)); } } break; } // 钥匙 case DropItemPerformanceType.Type.enKey: { e = NewDropItem(loadData, item, item.m_intParam); while (true) { e.MoveNext(); if (loadData.m_isFinish) { break; } yield return(e.Current); } break; } } }
// IEnumerator NewDropItem(GameResPackage.AsyncLoadPackageData loadData, DropItemPerformanceType item, int intParam = 0) { EventItemInfo eventInfo = GameTable.eventItemAsset.LookUp(item.m_intParam); DropItemPerformanceType.Type type = item.m_type; if (eventInfo != null) { type = (DropItemPerformanceType.Type)eventInfo.dropType; } // string objName = ""; switch (type) { case DropItemPerformanceType.Type.enGold: { objName = "Balk/p-b-gold"; break; } case DropItemPerformanceType.Type.enCard: { objName = "Balk/p-b-contract"; //DropItemPerformanceCard cardItem = (DropItemPerformanceCard)item; // 根据不同星级掉落不同 模型 HeroInfo heroInfo = GameTable.HeroInfoTableAsset.Lookup(intParam); if (null != heroInfo) { RarityRelativeInfo rarityInfo = GameTable.RarityRelativeAsset.LookUp(heroInfo.Rarity); if (null != rarityInfo) { ModelInfo modelInfo = GameTable.ModelInfoTableAsset.Lookup(rarityInfo.m_dropItemModelID); if (null != modelInfo) { objName = modelInfo.ModelFile; } } } break; } case DropItemPerformanceType.Type.enKey: { // 钥匙模型 objName = "Balk/p-b-gold"; EventItemInfo eventItemInfo = GameTable.eventItemAsset.LookUp(intParam); if (null != eventItemInfo) { ModelInfo modelInfo = GameTable.ModelInfoTableAsset.Lookup(eventItemInfo.modelId); if (null != modelInfo) { objName = modelInfo.ModelFile; } } break; } } float rotation = 30f; rotation = UnityEngine.Random.Range(0f, 360f); GameResPackage.AsyncLoadObjectData data = new GameResPackage.AsyncLoadObjectData(); IEnumerator e = PoolManager.Singleton.Coroutine_Load(GameData.GetPrefabPath(objName), data); while (true) { e.MoveNext(); if (data.m_isFinish) { break; } yield return(e.Current); } GameObject goldObj = data.m_obj as GameObject; goldObj.transform.parent = MainGame.Singleton.MainObject.transform; goldObj.transform.position = item.m_deadPos; goldObj.SetActive(true); goldObj.transform.localEulerAngles = new Vector3(item.m_eulerAngles.x, item.m_eulerAngles.y + rotation, item.m_eulerAngles.z); int dropIndex = AddDropItem(goldObj); Animation anim = goldObj.transform.Find("gold_body").GetComponent <Animation>(); PickUpCallback pickUpCallback = goldObj.transform.Find("gold_body").GetComponent <PickUpCallback>(); if (null != pickUpCallback) { pickUpCallback.Clear(); pickUpCallback.m_index = dropIndex; } // 随机动画 int animationCount = anim.GetComponent <Animation>().GetClipCount(); int animationIndex = UnityEngine.Random.Range(1, animationCount); int index = 1; foreach (AnimationState state in anim.GetComponent <Animation>()) { if (index == animationIndex) { anim.CrossFade(state.name); break; } index++; } loadData.m_isFinish = true; }