ItemDataManager.cs 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Reflection;
  4. using ET;
  5. using FairyGUI;
  6. using UnityEngine;
  7. using static UnityEditor.Progress;
  8. namespace GFGGame
  9. {
  10. public class ItemDataManager
  11. {
  12. private static Dictionary<int, ItemData> _dataDic = new Dictionary<int, ItemData>();
  13. delegate object MemberGetDelegate(ItemCfg p);
  14. public static void Add(int itemID, int itemNum)
  15. {
  16. ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemID);
  17. if (itemCfg == null)
  18. {
  19. Debug.LogError($"添加了一个不存在的物品 {itemID}");
  20. return;
  21. }
  22. ItemData itemData = null;
  23. if (_dataDic.ContainsKey(itemID))
  24. {
  25. itemData = _dataDic[itemID];
  26. if (itemCfg.itemType == ConstItemType.CARD)
  27. {
  28. return;//每张卡牌只有一张
  29. }
  30. }
  31. else
  32. {
  33. itemData = ItemDataPool.GetItemData(itemID);
  34. _dataDic.Add(itemID, itemData);
  35. }
  36. itemData.num += itemNum;
  37. if (ItemUtilCS.IsDressUpItem(itemID) && itemID % GameConst.MAX_COUNT_EVERY_TYPE_ITEM > 0)
  38. {
  39. DressUpMenuItemDataManager.Add(itemID);
  40. }
  41. //Debug.Log("itemid:"+ itemID);
  42. //Debug.Log("itemCfg:" + itemCfg);
  43. if (itemCfg.itemType == ConstItemType.CARD)
  44. {
  45. CardDataManager.Add(itemID);
  46. }
  47. if (itemCfg.itemType == ConstItemType.DRESS_UP && !DressUpMenuItemDataManager.CheckIsSceneType(itemID))
  48. {
  49. DecomposeDataManager.Instance.Add(itemID);
  50. }
  51. PhotographDataManager.Instance.Add(itemID);
  52. EventAgent.DispatchEvent(ConstMessage.ITEM_CHANGED, itemID);
  53. }
  54. public static void Remove(int itemID, int itemNum)
  55. {
  56. if (_dataDic.ContainsKey(itemID))
  57. {
  58. ItemData itemData = _dataDic[itemID];
  59. itemData.num -= itemNum;
  60. if (itemData.num <= 0)
  61. {
  62. itemData.num = 0;
  63. _dataDic.Remove(itemID);
  64. if (ItemUtilCS.IsDressUpItem(itemID))
  65. {
  66. DressUpMenuItemDataManager.Remove(itemID);
  67. }
  68. }
  69. ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemID);
  70. if (itemCfg.itemType == ConstItemType.DRESS_UP && !DressUpMenuItemDataManager.CheckIsSceneType(itemID))
  71. {
  72. DecomposeDataManager.Instance.Remove(itemID);
  73. }
  74. EventAgent.DispatchEvent(ConstMessage.ITEM_CHANGED, itemID);
  75. }
  76. }
  77. public static int GetItemNum(int itemId)
  78. {
  79. int numericType = NumericUtil.GetNumericTypeByItemId(itemId);
  80. if (numericType != 0)
  81. {
  82. return GameGlobal.myNumericComponent.GetAsInt(numericType);
  83. }
  84. if (_dataDic.TryGetValue(itemId, out var itemData))
  85. {
  86. return itemData.num;
  87. }
  88. return 0;
  89. }
  90. public static void InitServerData(List<ItemInfoProto> items)
  91. {
  92. _dataDic.Clear();
  93. foreach (ItemInfoProto roleItem in items)
  94. {
  95. Add(roleItem.ConfigId, roleItem.Count);
  96. }
  97. }
  98. public static void InitServerDataItemAttribute(List<ItemAttributeProto> infos)
  99. {
  100. foreach(var info in infos)
  101. {
  102. if(_dataDic.TryGetValue(info.ConfigId, out var itemData))
  103. {
  104. itemData.SetAttributes(info.Ks, info.Vs);
  105. }
  106. }
  107. }
  108. public static void SetAttribute(int itemId, int key, int value)
  109. {
  110. if (_dataDic.TryGetValue(itemId, out var itemData))
  111. {
  112. itemData.SetAttribute(key, value);
  113. }
  114. }
  115. public static void GetMainScore(int itemId, out int mainScore, out int mainScoreValue)
  116. {
  117. ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemId);
  118. //五个属性中最大的为主属性
  119. mainScore = 1;
  120. mainScoreValue = 0;
  121. if (itemCfg.score1 > mainScoreValue)
  122. {
  123. mainScoreValue = itemCfg.score1;
  124. mainScore = 1;
  125. }
  126. if (itemCfg.score2 > mainScoreValue)
  127. {
  128. mainScoreValue = itemCfg.score2;
  129. mainScore = 2;
  130. }
  131. if (itemCfg.score3 > mainScoreValue)
  132. {
  133. mainScoreValue = itemCfg.score3;
  134. mainScore = 3;
  135. }
  136. if (itemCfg.score4 > mainScoreValue)
  137. {
  138. mainScoreValue = itemCfg.score4;
  139. mainScore = 4;
  140. }
  141. }
  142. public static int GetItemScoreValue(int itemId, int scoreType)
  143. {
  144. ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemId);
  145. if (scoreType == 1)
  146. {
  147. return itemCfg.score1;
  148. }
  149. else if (scoreType == 2)
  150. {
  151. return itemCfg.score2;
  152. }
  153. else if (scoreType == 3)
  154. {
  155. return itemCfg.score3;
  156. }
  157. else if (scoreType == 4)
  158. {
  159. return itemCfg.score4;
  160. }
  161. return 0;
  162. }
  163. public static int GetScore(int itemId, int scoreType)
  164. {
  165. if(_dataDic.TryGetValue(itemId, out var itemData))
  166. {
  167. return itemData.GetScore(scoreType);
  168. }
  169. return 0;
  170. }
  171. }
  172. }