EquipData.cs 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297
  1. using FL.Data.Items;
  2. using FL.Network;
  3. using System;
  4. using System.Collections.Generic;
  5. using XGame.Database;
  6. using XGame.Framework.Data;
  7. namespace FL
  8. {
  9. public class EquipData : DataSingleton<EquipData>, IDisposable
  10. {
  11. private Dictionary<EEquipType, EquipAttr> _wearEquipMap = new Dictionary<EEquipType, EquipAttr>(); // 身上穿戴的装备数据
  12. private Dictionary<long, EquipAttr> _temporaryEquipMap = new Dictionary<long, EquipAttr>();// 开宝藏箱子掉落的临时装备数据
  13. private Dictionary<long, EquipAttr> _bagEquipMap = new Dictionary<long, EquipAttr>();// 装备背包中的装备数据
  14. /// <summary>
  15. /// 获得装备列表界面用到冒泡的装备uid
  16. /// </summary>
  17. public long BubblingEquipUid { set; get; }
  18. /// <summary>
  19. /// 获取身上穿戴的部位装备
  20. /// </summary>
  21. /// <param name="equipType"></param>
  22. /// <returns></returns>
  23. public EquipAttr GetWearEquipData(EEquipType equipType)
  24. {
  25. return _wearEquipMap.ContainsKey(equipType) ? _wearEquipMap[equipType] : null;
  26. }
  27. /// <summary>
  28. /// 更换装备
  29. /// </summary>
  30. /// <param name="equipType"></param>
  31. /// <param name="id"></param>
  32. public void AddWearEquip(EEquipType equipType, EquipAttr equipData)
  33. {
  34. _wearEquipMap.Add(equipType, equipData);
  35. }
  36. /// <summary>
  37. /// 身上该部位是否已穿戴装备
  38. /// </summary>
  39. /// <param name="equipType"></param>
  40. /// <returns></returns>
  41. public bool IsWear(EEquipType equipType)
  42. {
  43. return _wearEquipMap.ContainsKey(equipType);
  44. }
  45. /// <summary>
  46. /// 更换装备
  47. /// </summary>
  48. /// <param name="equipType"></param>
  49. /// <param name="id"></param>
  50. public void ChangeWearEquipData(EEquipType equipType, EquipAttr data)
  51. {
  52. if (_wearEquipMap.ContainsKey(equipType))
  53. {
  54. _wearEquipMap[equipType] = data;
  55. }
  56. else
  57. {
  58. _wearEquipMap.Add(equipType, data);
  59. }
  60. }
  61. /// <summary>
  62. /// 清除身上穿戴的装备数据
  63. /// </summary>
  64. public void ClearWearEquip()
  65. {
  66. foreach (EquipAttr item in _wearEquipMap.Values)
  67. {
  68. if (item != null)
  69. item.Dispose();
  70. }
  71. _wearEquipMap.Clear();
  72. }
  73. /// <summary>
  74. /// 装备背包新增一件装备
  75. /// </summary>
  76. /// <param name="equip"></param>
  77. public void AddEquip(EquipAttr equip)
  78. {
  79. _bagEquipMap.Add(equip.Id, equip);
  80. }
  81. /// <summary>
  82. /// 获取装备背包中的某件装备信息
  83. /// </summary>
  84. /// <param name="uid"></param>
  85. /// <returns></returns>
  86. public EquipAttr GetBagEquipItem(long uid)
  87. {
  88. return _bagEquipMap.ContainsKey(uid) ? _bagEquipMap[uid] : null;
  89. }
  90. /// <summary>
  91. /// 把更换下来的装备数据替换到装备背包中对应的
  92. /// </summary>
  93. /// <param name="wearEquip"></param>
  94. /// <param name="replaceEquipData"></param>
  95. public void UpdataBagEquipData(EquipAttr equipData)
  96. {
  97. if (_bagEquipMap.ContainsKey(equipData.Id))
  98. _bagEquipMap[equipData.Id] = equipData;
  99. else
  100. _bagEquipMap.Add(equipData.Id, equipData);
  101. }
  102. /// <summary>
  103. /// 移除装备背包中的某件装备
  104. /// </summary>
  105. /// <param name="id"></param>
  106. /// <param name="bDispose"></param>
  107. public void RemoveEquip(long id, bool bDispose = false)
  108. {
  109. if (bDispose)
  110. {
  111. _bagEquipMap[id]?.Dispose();
  112. }
  113. _bagEquipMap.Remove(id);
  114. }
  115. /// <summary>
  116. /// 清除装备背包数据
  117. /// </summary>
  118. public void ClearEquipBag()
  119. {
  120. foreach (var item in _bagEquipMap)
  121. {
  122. item.Value.Dispose();
  123. }
  124. _bagEquipMap.Clear();
  125. }
  126. /// <summary>
  127. /// 新增的掉落临时装备
  128. /// </summary>
  129. /// <param name="equip"></param>
  130. /// <param name="bAddBag">是否添加到装备背包中</param>
  131. public void AddTemporaryEquip(EquipAttr equip)
  132. {
  133. _temporaryEquipMap.Add(equip.Id, equip);
  134. }
  135. /// <summary>
  136. /// 获取装备掉落的临时背包中某个装备
  137. /// </summary>
  138. /// <param name="uid"></param>
  139. /// <returns></returns>
  140. public EquipAttr GetTemporaryEquipItem(long uid)
  141. {
  142. return _temporaryEquipMap.ContainsKey(uid) ? _temporaryEquipMap[uid] : null;
  143. }
  144. /// <summary>
  145. /// 获取背包的装备列表
  146. /// </summary>
  147. /// <param name="equipList"></param>
  148. public void GetBagEquipList(ref List<EquipAttr> equipList)
  149. {
  150. equipList.AddRange(_bagEquipMap.Values);
  151. }
  152. /// <summary>
  153. /// 装备背包是否为空
  154. /// </summary>
  155. /// <returns></returns>
  156. public bool IsEquipbagEmpty()
  157. {
  158. return _bagEquipMap.Count == 0;
  159. }
  160. /// <summary>
  161. /// 身上穿戴的装备列表是否为空
  162. /// </summary>
  163. /// <returns></returns>
  164. public bool IsWearEquipEmpty()
  165. {
  166. return _wearEquipMap.Count == 0;
  167. }
  168. /// <summary>
  169. /// 身上穿戴的装备信息
  170. /// </summary>
  171. /// <param name="equipData"></param>
  172. /// <returns></returns>
  173. public EquipAttr GetNewWearEquipData(ActEquipChuan equipData)
  174. {
  175. EquipmentTable equipInfo = EquipmentTableRepo.Get(equipData.equipId);
  176. EquipAttr _equipItem = new EquipAttr();
  177. _equipItem.Init(equipInfo, 0);
  178. _equipItem.Level = equipData.level;
  179. if (equipData?.eps?.Count > 0)
  180. {
  181. Attributes attr = _equipItem.Attributes;
  182. GetEquipAttributes(equipData.eps, ref attr);
  183. }
  184. //装备的属性列表
  185. var equipAttributes = new List<EAttributeType>();
  186. _equipItem.Attributes.GetAll(ref equipAttributes, 0);
  187. _equipItem.FightingPower = equipData.power;
  188. return _equipItem;
  189. }
  190. /// <summary>
  191. /// 装备属性
  192. /// </summary>
  193. /// <param name="equipEps"></param>
  194. /// <param name="attrs"></param>
  195. public void GetEquipAttributes(List<EpsSchema> equipEps, ref Attributes attrs)
  196. {
  197. foreach (var item in equipEps)
  198. {
  199. attrs.SetValue((EAttributeType)item.epid, item.val);
  200. }
  201. }
  202. /// <summary>
  203. /// 获取装备的数据信息
  204. /// </summary>
  205. /// <param name="equipData"></param>
  206. /// <returns></returns>
  207. public EquipAttr GetDropEquipData(ActEquipLsList equipData)
  208. {
  209. EquipmentTable equipInfo = EquipmentTableRepo.Get(equipData.equipId);
  210. EquipAttr _equipItem = new EquipAttr();
  211. _equipItem.Init(equipInfo, equipData.xhid);
  212. _equipItem.Level = equipData.level;
  213. if (equipData?.eps?.Count > 0)
  214. {
  215. Attributes attr = _equipItem.Attributes;
  216. GetEquipAttributes(equipData.eps, ref attr);
  217. }
  218. _equipItem.FightingPower = equipData.power;
  219. return _equipItem;
  220. }
  221. /// <summary>
  222. /// 身上穿戴的装备的战力值
  223. /// </summary>
  224. /// <param name="equipPart"></param>
  225. /// <returns></returns>
  226. public void GetWearEquipPower(ref Dictionary<EEquipType, long> wearEquipPowerMap)
  227. {
  228. foreach (var item in _wearEquipMap)
  229. {
  230. wearEquipPowerMap[item.Key] = item.Value.FightingPower;
  231. }
  232. }
  233. /// <summary>
  234. /// 获取身上部位的装备战力值
  235. /// </summary>
  236. /// <returns></returns>
  237. public long GetWearPartPower(EEquipType equipPart)
  238. {
  239. return _wearEquipMap.ContainsKey(equipPart) ? _wearEquipMap[equipPart].FightingPower : 0;
  240. }
  241. /// <summary>
  242. /// 清除临时掉落的装备列表
  243. /// </summary>
  244. public void ClearTemporaryEquipList()
  245. {
  246. if (_temporaryEquipMap?.Count > 0)
  247. {
  248. _temporaryEquipMap.Clear();
  249. }
  250. }
  251. void IDisposable.Dispose()
  252. {
  253. if (_wearEquipMap.Count > 0)
  254. {
  255. foreach (var item in _wearEquipMap.Values)
  256. {
  257. (item as IDisposable)?.Dispose();
  258. }
  259. _wearEquipMap.Clear();
  260. }
  261. ClearTemporaryEquipList();
  262. ClearEquipBag();
  263. }
  264. }
  265. }