DecomposeDataManager.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  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. public List<int> GetDecomposeDataByRarity(int rarity)
  39. {
  40. if (!_decomposeData.ContainsKey(rarity)) return null;
  41. return _decomposeData[rarity];
  42. }
  43. public List<int> GetRewardList()
  44. {
  45. if (_rewardList.Count == 0)
  46. {
  47. DecomposeCfg[] cfgs = DecomposeCfgArray.Instance.dataArray;
  48. for (int i = 0; i < cfgs.Length; i++)
  49. {
  50. for (int j = 0; j < cfgs[i].itemsArr.Length; j++)
  51. {
  52. if (_rewardList.IndexOf(cfgs[i].itemsArr[j][0]) < 0)
  53. {
  54. _rewardList.Add(cfgs[i].itemsArr[j][0]);
  55. }
  56. }
  57. }
  58. }
  59. return _rewardList;
  60. }
  61. //物品可分解的数量
  62. public long ItemCanDecomposeCount(int itemId)
  63. {
  64. return ItemDataManager.GetItemNum(itemId) - 1;
  65. }
  66. public void InitSuitSyntheticMaterias()
  67. {
  68. List<SuitCfg> suitCfgs = new List<SuitCfg>();
  69. suitCfgs.AddRange(new List<SuitCfg>(SuitCfgArray.Instance.GetCfgsBysyntheticType(1)));
  70. suitCfgs.AddRange(new List<SuitCfg>(SuitCfgArray.Instance.GetCfgsBysyntheticType(2)));
  71. suitCfgs.AddRange(new List<SuitCfg>(SuitCfgArray.Instance.GetCfgsBysyntheticType(3)));
  72. for (int i = 0; i < suitCfgs.Count; i++)
  73. {
  74. int suitId = suitCfgs[i].id;
  75. for (int j = 0; j < suitCfgs[i].partsArr.Length; j++)
  76. {
  77. ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(suitCfgs[i].partsArr[j]);
  78. for (int k = 0; k < itemCfg.syntheticMateriarsArr.Length; k++)
  79. {
  80. int materialId = itemCfg.syntheticMateriarsArr[k][0];
  81. if (!_suitSyntheticMaterials.ContainsKey(materialId))
  82. {
  83. _suitSyntheticMaterials[materialId] = new List<int>();
  84. }
  85. if (_suitSyntheticMaterials[materialId].IndexOf(suitId) < 0) _suitSyntheticMaterials[materialId].Add(suitId);
  86. }
  87. }
  88. }
  89. }
  90. /// <summary>
  91. /// 检测物品对应的套装是否全部合成
  92. /// </summary>
  93. /// <param name="itemId"></param>
  94. /// <returns></returns>
  95. public bool CheckIsItemForSuitSynthetic(int itemId)
  96. {
  97. if (!_suitSyntheticMaterials.ContainsKey(itemId)) return true;
  98. for (int i = 0; i < _suitSyntheticMaterials[itemId].Count; i++)
  99. {
  100. if (!DressUpMenuSuitDataManager.CheckHaveSuit(_suitSyntheticMaterials[itemId][i])) return false;
  101. }
  102. return true;
  103. }
  104. }
  105. }