DecomposeDataManager.cs 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. using System.Collections.Generic;
  2. namespace GFGGame
  3. {
  4. public class DecomposeDataManager : SingletonBase<DecomposeDataManager>
  5. {
  6. Dictionary<int, List<int>> _decomposeData = new Dictionary<int, List<int>>();//所有数量大于1的换装部件数据
  7. Dictionary<int, List<int>> _suitSyntheticMaterials = new Dictionary<int, List<int>>();//materiasId,Lsit<suitId>
  8. List<int> _rewardList = new List<int>();
  9. public const int MaxCount = 999;
  10. public void Clear()
  11. {
  12. _decomposeData.Clear();
  13. _suitSyntheticMaterials.Clear();
  14. }
  15. public void Add(int itemId)
  16. {
  17. //初始化时禁止使用物品配置,会造成卡顿!!!
  18. int rarity = ItemDataManager.GetItemRarity(itemId);
  19. if (!_decomposeData.ContainsKey(rarity))
  20. {
  21. _decomposeData.Add(rarity, new List<int>());
  22. }
  23. long count = ItemCanDecomposeCount(itemId);
  24. if (_decomposeData[rarity].IndexOf(itemId) < 0 && count > 0)
  25. {
  26. _decomposeData[rarity].Add(itemId);
  27. }
  28. }
  29. public void Remove(int itemId)
  30. {
  31. int rarity = ItemCfgArray.Instance.GetCfg(itemId).rarity;
  32. long count = ItemCanDecomposeCount(itemId);
  33. if (_decomposeData.ContainsKey(rarity) && _decomposeData[rarity].IndexOf(itemId) >= 0 && count <= 0)
  34. {
  35. _decomposeData[rarity].Remove(itemId);
  36. }
  37. }
  38. //分解需要扣去合成需要的数量
  39. public int DeductSynthesisNeedNum(int itemId)
  40. {
  41. ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemId);
  42. if (itemCfg == null)
  43. return 0;
  44. int sum = 0;
  45. foreach (int syntheticId in itemCfg.syntheticSuitArr)
  46. {
  47. if (ItemDataManager.GetItemNum(syntheticId) <= 0) {
  48. ItemCfg syntheticItemCfg = ItemCfgArray.Instance.GetCfg(syntheticId);
  49. foreach (int[] MateriarsInfo in syntheticItemCfg.syntheticMateriarsArr)
  50. {
  51. if(MateriarsInfo[0] == itemId)
  52. sum += MateriarsInfo[1];
  53. }
  54. }
  55. }
  56. return sum;
  57. }
  58. public List<int> GetDecomposeDataByRarity(int rarity)
  59. {
  60. if (!_decomposeData.ContainsKey(rarity)) return null;
  61. return _decomposeData[rarity];
  62. }
  63. public List<int> GetRewardList()
  64. {
  65. if (_rewardList.Count == 0)
  66. {
  67. DecomposeCfg[] cfgs = DecomposeCfgArray.Instance.dataArray;
  68. for (int i = 0; i < cfgs.Length; i++)
  69. {
  70. for (int j = 0; j < cfgs[i].itemsArr.Length; j++)
  71. {
  72. if (_rewardList.IndexOf(cfgs[i].itemsArr[j][0]) < 0)
  73. {
  74. _rewardList.Add(cfgs[i].itemsArr[j][0]);
  75. }
  76. }
  77. }
  78. }
  79. return _rewardList;
  80. }
  81. //物品可分解的数量
  82. public long ItemCanDecomposeCount(int itemId)
  83. {
  84. //合成需要的数量
  85. int synthesisNum = DeductSynthesisNeedNum(itemId);
  86. return ItemDataManager.GetItemNum(itemId) - 1 - synthesisNum;
  87. }
  88. public void InitSuitSyntheticMaterias()
  89. {
  90. List<SuitCfg> suitCfgs = new List<SuitCfg>();
  91. suitCfgs.AddRange(new List<SuitCfg>(SuitCfgArray.Instance.GetCfgsBysyntheticType(1)));
  92. suitCfgs.AddRange(new List<SuitCfg>(SuitCfgArray.Instance.GetCfgsBysyntheticType(2)));
  93. suitCfgs.AddRange(new List<SuitCfg>(SuitCfgArray.Instance.GetCfgsBysyntheticType(3)));
  94. for (int i = 0; i < suitCfgs.Count; i++)
  95. {
  96. int suitId = suitCfgs[i].id;
  97. for (int j = 0; j < suitCfgs[i].partsArr.Length; j++)
  98. {
  99. ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(suitCfgs[i].partsArr[j]);
  100. for (int k = 0; k < itemCfg.syntheticMateriarsArr.Length; k++)
  101. {
  102. int materialId = itemCfg.syntheticMateriarsArr[k][0];
  103. if (!_suitSyntheticMaterials.ContainsKey(materialId))
  104. {
  105. _suitSyntheticMaterials[materialId] = new List<int>();
  106. }
  107. if (_suitSyntheticMaterials[materialId].IndexOf(suitId) < 0) _suitSyntheticMaterials[materialId].Add(suitId);
  108. }
  109. }
  110. }
  111. }
  112. /// <summary>
  113. /// 检测物品对应的套装是否全部合成
  114. /// </summary>
  115. /// <param name="itemId"></param>
  116. /// <returns></returns>
  117. public bool CheckIsItemForSuitSynthetic(int itemId)
  118. {
  119. if (!_suitSyntheticMaterials.ContainsKey(itemId)) return true;
  120. for (int i = 0; i < _suitSyntheticMaterials[itemId].Count; i++)
  121. {
  122. if (!DressUpMenuSuitDataManager.CheckHaveSuit(_suitSyntheticMaterials[itemId][i])) return false;
  123. }
  124. return true;
  125. }
  126. }
  127. }