using System.Collections.Generic; using UnityEngine; namespace GFGGame { public class DropOutDataCache { private static Dictionary> _probDic = new Dictionary>(); // public static List GetDropItemDatas(int[] dropIds, bool doRandome) // { // List result = new List(); // foreach (int dropId in dropIds) // { // ItemData itemData = GetDropItemData(dropId, doRandome); // if (itemData != null) // { // result.Add(itemData); // } // } // return result; // } public static List GetDropItemDatas(int[] dropIds, bool doRandome) { List result = new List(); foreach (int dropId in dropIds) { GetDropItemData(dropId, result); } return result; } public static List GetDropItemData(int dropId, List result) { List dropOutCfgs = DropOutCfgArray.Instance.GetCfgs(dropId); for (int i = 0; i < dropOutCfgs.Count; i++) { List _dropOutCfgs = DropOutCfgArray.Instance.GetCfgs(dropOutCfgs[i].item); if (_dropOutCfgs.Count > 0) { GetDropItemData(dropOutCfgs[i].item, result); } else { ItemData itemData = ItemUtil.createItemData(dropOutCfgs[i].item, dropOutCfgs[i].maxNum);// GetDropItemData(dropId, doRandome); if (dropOutCfgs[i].item > 0 && itemData != null) { result.Add(itemData); } } } return result; } // public static List GetDropItemDatas(int dropId, int count) // { // List result = new List(); // int tryCount = 0; // while (result.Count < count && tryCount < 1000) // { // ItemData itemData = GetDropItemData(dropId, true); // if (itemData != null) // { // result.Add(itemData); // } // tryCount++; // } // return result; // } // public static ItemData GetDropItemData(int dropId, bool doRandome) // { // ItemData itemData = null; // List dropOutDatas = null; // if (!_probDic.ContainsKey(dropId)) // { // InitData(dropId); // } // dropOutDatas = _probDic[dropId]; // if (dropOutDatas != null) // { // float result = Random.Range(0, 1f); // foreach (DropOutData dropOutData in dropOutDatas) // { // if (result <= dropOutData.WeightEnd || !doRandome) // { // return GetItemData(dropOutData.dropOutCfg, doRandome); // } // } // } // return itemData; // } // private static void InitData(int dropId) // { // List dropOutDatas = new List(); // _probDic[dropId] = dropOutDatas; // var arr = DropOutCfgArray.Instance.GetCfgs(dropId); // List cfgs = new List(arr); // float totalWeight = 0; // foreach (DropOutCfg cfg in cfgs) // { // totalWeight += cfg.weight; // } // float weightEnd = 0; // foreach (DropOutCfg cfg in cfgs) // { // DropOutData dropOutData = new DropOutData(); // dropOutData.dropOutCfg = cfg; // weightEnd += cfg.weight; // dropOutData.WeightEnd = weightEnd / totalWeight; // dropOutDatas.Add(dropOutData); // } // } // private static ItemData GetItemData(DropOutCfg dropOutCfg, bool doRandomeNum) // { // if (dropOutCfg.item >= 10000000)//掉落id // { // return GetDropItemData(dropOutCfg.item, doRandomeNum); // } // else if (dropOutCfg.item > 0) // { // int num = dropOutCfg.maxNum; // if (doRandomeNum) // { // num = Random.Range(dropOutCfg.minNum, dropOutCfg.maxNum + 1); // } // if (num > 0) // { // ItemData itemData = ItemDataPool.GetItemData(dropOutCfg.item); // itemData.num = num; // return itemData; // } // } // return null; // } } }