using System.Collections.Generic; namespace GFGGame { public class DecomposeDataManager : SingletonBase { Dictionary> _decomposeData = new Dictionary>();//所有数量大于1的换装部件数据 Dictionary> _suitSyntheticMaterials = new Dictionary>();//materiasId,Lsit List _rewardList = new List(); public const int MaxCount = 999; public void Clear() { _decomposeData.Clear(); _suitSyntheticMaterials.Clear(); } public void Add(int itemId) { //初始化时禁止使用物品配置,会造成卡顿!!! int rarity = ItemDataManager.GetItemRarity(itemId); if (!_decomposeData.ContainsKey(rarity)) { _decomposeData.Add(rarity, new List()); } long count = ItemCanDecomposeCount(itemId); if (_decomposeData[rarity].IndexOf(itemId) < 0 && count > 0) { _decomposeData[rarity].Add(itemId); } } public void Remove(int itemId) { int rarity = ItemCfgArray.Instance.GetCfg(itemId).rarity; long count = ItemCanDecomposeCount(itemId); if (_decomposeData.ContainsKey(rarity) && _decomposeData[rarity].IndexOf(itemId) >= 0 && count <= 0) { _decomposeData[rarity].Remove(itemId); } } //分解需要扣去合成需要的数量 public int DeductSynthesisNeedNum(int itemId) { ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemId); if (itemCfg == null) return 0; int sum = 0; foreach (int syntheticId in itemCfg.syntheticSuitArr) { if (ItemDataManager.GetItemNum(syntheticId) <= 0) { ItemCfg syntheticItemCfg = ItemCfgArray.Instance.GetCfg(syntheticId); foreach (int[] MateriarsInfo in syntheticItemCfg.syntheticMateriarsArr) { if(MateriarsInfo[0] == itemId) sum += MateriarsInfo[1]; } } } return sum; } public List GetDecomposeDataByRarity(int rarity) { if (!_decomposeData.ContainsKey(rarity)) return null; return _decomposeData[rarity]; } public List GetRewardList() { if (_rewardList.Count == 0) { DecomposeCfg[] cfgs = DecomposeCfgArray.Instance.dataArray; for (int i = 0; i < cfgs.Length; i++) { for (int j = 0; j < cfgs[i].itemsArr.Length; j++) { if (_rewardList.IndexOf(cfgs[i].itemsArr[j][0]) < 0) { _rewardList.Add(cfgs[i].itemsArr[j][0]); } } } } return _rewardList; } //物品可分解的数量 public long ItemCanDecomposeCount(int itemId) { //合成需要的数量 int synthesisNum = DeductSynthesisNeedNum(itemId); return ItemDataManager.GetItemNum(itemId) - 1 - synthesisNum; } public void InitSuitSyntheticMaterias() { List suitCfgs = new List(); suitCfgs.AddRange(new List(SuitCfgArray.Instance.GetCfgsBysyntheticType(1))); suitCfgs.AddRange(new List(SuitCfgArray.Instance.GetCfgsBysyntheticType(2))); suitCfgs.AddRange(new List(SuitCfgArray.Instance.GetCfgsBysyntheticType(3))); for (int i = 0; i < suitCfgs.Count; i++) { int suitId = suitCfgs[i].id; for (int j = 0; j < suitCfgs[i].partsArr.Length; j++) { ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(suitCfgs[i].partsArr[j]); for (int k = 0; k < itemCfg.syntheticMateriarsArr.Length; k++) { int materialId = itemCfg.syntheticMateriarsArr[k][0]; if (!_suitSyntheticMaterials.ContainsKey(materialId)) { _suitSyntheticMaterials[materialId] = new List(); } if (_suitSyntheticMaterials[materialId].IndexOf(suitId) < 0) _suitSyntheticMaterials[materialId].Add(suitId); } } } } /// /// 检测物品对应的套装是否全部合成 /// /// /// public bool CheckIsItemForSuitSynthetic(int itemId) { if (!_suitSyntheticMaterials.ContainsKey(itemId)) return true; for (int i = 0; i < _suitSyntheticMaterials[itemId].Count; i++) { if (!DressUpMenuSuitDataManager.CheckHaveSuit(_suitSyntheticMaterials[itemId][i])) return false; } return true; } } }