ItemDataManager.cs 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. using System.Collections.Generic;
  2. using FairyGUI;
  3. using UnityEngine;
  4. namespace GFGGame
  5. {
  6. public class ItemDataManager
  7. {
  8. private static Dictionary<int, ItemData> _dataDic = new Dictionary<int, ItemData>();
  9. private static Dictionary<int, int> _prepareDic = new Dictionary<int, int>();
  10. public static void Add(int itemID, int itemNum, bool sendToServer = true)
  11. {
  12. switch (itemID)
  13. {
  14. case ConstItemID.EXP:
  15. RoleDataManager.exp += itemNum;
  16. return;
  17. case ConstItemID.POWER:
  18. RoleDataManager.power += itemNum;
  19. return;
  20. case ConstItemID.GOLD:
  21. RoleDataManager.gold += itemNum;
  22. return;
  23. case ConstItemID.DIAMOND_PURPLE:
  24. RoleDataManager.diaP += itemNum;
  25. return;
  26. case ConstItemID.DIAMOND_RED:
  27. RoleDataManager.diaR += itemNum;
  28. return;
  29. }
  30. ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemID);
  31. if (itemCfg == null)
  32. {
  33. Debug.LogError($"添加了一个不存在的物品 {itemID}");
  34. return;
  35. }
  36. ItemData itemData = null;
  37. if (_dataDic.ContainsKey(itemID))
  38. {
  39. itemData = _dataDic[itemID];
  40. if (itemCfg.itemType == ConstItemType.CARD)
  41. {
  42. return;//每张卡牌只有一张
  43. }
  44. }
  45. else
  46. {
  47. itemData = ItemDataPool.GetItemData(itemID);
  48. _dataDic.Add(itemID, itemData);
  49. }
  50. itemData.num += itemNum;
  51. if (ItemUtil.IsDressUpItem(itemID) && itemID % GameConst.MAX_COUNT_EVERY_TYPE_ITEM > 0)
  52. {
  53. DressUpMenuItemDataManager.Add(itemID);
  54. }
  55. //Debug.Log("itemid:"+ itemID);
  56. //Debug.Log("itemCfg:" + itemCfg);
  57. if (itemCfg.itemType == ConstItemType.CARD)
  58. {
  59. CardDataManager.Add(itemID);
  60. }
  61. if (sendToServer)
  62. {
  63. PrepareUpdateToServer(itemData.id, itemData.num);
  64. }
  65. EventAgent.DispatchEvent(ConstMessage.ITEM_CHANGED, itemID);
  66. }
  67. public static void Remove(int itemID, int itemNum)
  68. {
  69. switch (itemID)
  70. {
  71. case ConstItemID.EXP:
  72. RoleDataManager.exp -= itemNum;
  73. return;
  74. case ConstItemID.POWER:
  75. RoleDataManager.power -= itemNum;
  76. return;
  77. case ConstItemID.GOLD:
  78. RoleDataManager.gold -= itemNum;
  79. return;
  80. case ConstItemID.DIAMOND_PURPLE:
  81. RoleDataManager.diaP -= itemNum;
  82. return;
  83. case ConstItemID.DIAMOND_RED:
  84. RoleDataManager.diaR -= itemNum;
  85. return;
  86. }
  87. if (_dataDic.ContainsKey(itemID))
  88. {
  89. ItemData itemData = _dataDic[itemID];
  90. itemData.num -= itemNum;
  91. if (itemData.num <= 0)
  92. {
  93. itemData.num = 0;
  94. _dataDic.Remove(itemID);
  95. if (ItemUtil.IsDressUpItem(itemID))
  96. {
  97. DressUpMenuItemDataManager.Remove(itemID);
  98. }
  99. PrepareUpdateToServer(itemData.id, itemData.num);
  100. }
  101. EventAgent.DispatchEvent(ConstMessage.ITEM_CHANGED, itemID);
  102. }
  103. }
  104. public static int GetItemNum(int itemID)
  105. {
  106. switch (itemID)
  107. {
  108. case ConstItemID.EXP:
  109. return RoleDataManager.exp;
  110. case ConstItemID.POWER:
  111. return RoleDataManager.power;
  112. case ConstItemID.GOLD:
  113. return RoleDataManager.gold;
  114. case ConstItemID.DIAMOND_PURPLE:
  115. return RoleDataManager.diaP;
  116. case ConstItemID.DIAMOND_RED:
  117. return RoleDataManager.diaR;
  118. }
  119. if (_dataDic.ContainsKey(itemID))
  120. {
  121. ItemData itemData = _dataDic[itemID];
  122. return itemData.num;
  123. }
  124. return 0;
  125. }
  126. public static void InitServerData(List<RoleItem> list)
  127. {
  128. _dataDic.Clear();
  129. _prepareDic.Clear();
  130. if (list != null)
  131. {
  132. foreach (RoleItem roleItem in list)
  133. {
  134. Add(roleItem.itemId, roleItem.num, false);
  135. }
  136. }
  137. }
  138. private static void PrepareUpdateToServer(int itemId, int itemNum)
  139. {
  140. _prepareDic[itemId] = itemNum;
  141. if (!Timers.inst.Exists(UpdateToServer))
  142. {
  143. Timers.inst.Add(0.1f, 1, UpdateToServer);
  144. }
  145. }
  146. private static void UpdateToServer(object param)
  147. {
  148. List<RoleItem> list = new List<RoleItem>();
  149. foreach (KeyValuePair<int, int> item in _prepareDic)
  150. {
  151. RoleItem roleItem = new RoleItem();
  152. roleItem.itemId = item.Key;
  153. roleItem.num = item.Value;
  154. list.Add(roleItem);
  155. }
  156. GameProxy.ReqUpdateRoleItems(list);
  157. _prepareDic.Clear();
  158. }
  159. public static Dictionary<int, ItemData> GetItemDic()
  160. {
  161. return _dataDic;
  162. }
  163. public static void GetMainScore(int itemId, out int mainScore, out int mainScoreValue)
  164. {
  165. ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemId);
  166. //五个属性中最大的为主属性
  167. mainScore = 1;
  168. mainScoreValue = 0;
  169. if (itemCfg.score1 > mainScoreValue)
  170. {
  171. mainScoreValue = itemCfg.score1;
  172. mainScore = 1;
  173. }
  174. if (itemCfg.score2 > mainScoreValue)
  175. {
  176. mainScoreValue = itemCfg.score2;
  177. mainScore = 2;
  178. }
  179. if (itemCfg.score3 > mainScoreValue)
  180. {
  181. mainScoreValue = itemCfg.score3;
  182. mainScore = 3;
  183. }
  184. if (itemCfg.score4 > mainScoreValue)
  185. {
  186. mainScoreValue = itemCfg.score4;
  187. mainScore = 4;
  188. }
  189. }
  190. public static int GetItemScoreValue(int itemId, int scoreType)
  191. {
  192. ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemId);
  193. if (scoreType == 1)
  194. {
  195. return itemCfg.score1;
  196. }
  197. else if (scoreType == 2)
  198. {
  199. return itemCfg.score2;
  200. }
  201. else if (scoreType == 3)
  202. {
  203. return itemCfg.score3;
  204. }
  205. else if (scoreType == 4)
  206. {
  207. return itemCfg.score4;
  208. }
  209. return 0;
  210. }
  211. }
  212. }