CardDataManager.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344
  1. 
  2. using System;
  3. using System.Collections;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using ET;
  7. using UnityEngine;
  8. namespace GFGGame
  9. {
  10. public class CardDataManager
  11. {
  12. private static Dictionary<int, Dictionary<int, CardData>> _cardDicByType = new Dictionary<int, Dictionary<int, CardData>>();
  13. public static Dictionary<int, Dictionary<int, int>> _selectList = new Dictionary<int, Dictionary<int, int>>();
  14. public static void Clear()
  15. {
  16. _cardDicByType.Clear();
  17. }
  18. public static void Add(CardInfoProto cardInfoProto)
  19. {
  20. CardData cardData = new CardData();
  21. ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(cardInfoProto.CardId);
  22. cardData.id = cardInfoProto.CardId;
  23. cardData.lv = cardInfoProto.Lvl;
  24. cardData.exp = cardInfoProto.Exp;
  25. cardData.star = cardInfoProto.Star;
  26. cardData.itemCfg = itemCfg;
  27. cardData.res = itemCfg.res;
  28. cardData.scores = new Dictionary<int, int>();
  29. for (int j = 0; j < cardInfoProto.KsAttribute.Count; j++)
  30. {
  31. cardData.scores.Add(cardInfoProto.KsAttribute[j], cardInfoProto.VsAttribute[j]);
  32. }
  33. cardData.mainScore = itemCfg.mainScore;// CardDataManager.GetMainScore(card.scores);
  34. cardData.resources = CardDataManager.GetCardResources(itemCfg);
  35. if (_cardDicByType.ContainsKey(0) == false)
  36. {
  37. _cardDicByType[0] = new Dictionary<int, CardData>();
  38. }
  39. if (_cardDicByType.ContainsKey(cardData.itemCfg.rarity) == false)
  40. {
  41. _cardDicByType[cardData.itemCfg.rarity] = new Dictionary<int, CardData>();
  42. }
  43. _cardDicByType[0].Add(cardData.id, cardData);
  44. _cardDicByType[cardData.itemCfg.rarity].Add(cardData.id, cardData);
  45. }
  46. // private static int GetMainScore(Dictionary<int, int> scores)
  47. // {
  48. // //五个属性中最大的为主属性
  49. // int mainScore = 1;
  50. // int mainScoreValue = 0;
  51. // ICollection keys = scores.Keys;
  52. // foreach (int key in keys)
  53. // {
  54. // if (scores[key] > mainScoreValue)
  55. // {
  56. // mainScore = key;
  57. // }
  58. // }
  59. // return mainScore;
  60. // }
  61. public static List<string> GetCardResources(ItemCfg itemCfg)
  62. {
  63. List<string> resources = new List<string>();
  64. resources.Add(itemCfg.res);
  65. if (itemCfg.cardRes! != "")
  66. {
  67. resources.Add(itemCfg.cardRes);
  68. }
  69. return resources;
  70. }
  71. private static void Refresh(CardData cardData)
  72. {
  73. _cardDicByType[0][cardData.id] = cardData;
  74. _cardDicByType[cardData.itemCfg.rarity][cardData.id] = cardData;
  75. GameProxy.ReqUpdateCardStatus(cardData);
  76. }
  77. private static void RefreshCardLvProperty(CardData lastCardData, int lv)
  78. {
  79. List<CardLvlCfg> cardLvCfgs = CardCfgManager.GetCardLvCfgsByRarity(lastCardData.itemCfg.rarity);
  80. for (int i = lastCardData.lv; i < lv; i++)
  81. {
  82. lastCardData.scores[ConstDressUpScoreType.SCORE_FENG] += cardLvCfgs[i - 1].score1;
  83. lastCardData.scores[ConstDressUpScoreType.SCORE_HUA] += cardLvCfgs[i - 1].score1;
  84. lastCardData.scores[ConstDressUpScoreType.SCORE_XUE] += cardLvCfgs[i - 1].score1;
  85. lastCardData.scores[ConstDressUpScoreType.SCORE_YUE] += cardLvCfgs[i - 1].score1;
  86. }
  87. }
  88. private static void RefreshCardStarProperty(CardData lastCardData, int star)
  89. {
  90. List<CardLvlCfg> cardLvCfgs = CardCfgManager.GetCardLvCfgsByRarity(lastCardData.itemCfg.rarity);
  91. for (int i = lastCardData.star; i < star; i++)
  92. {
  93. lastCardData.scores[ConstDressUpScoreType.SCORE_FENG] += cardLvCfgs[i - 1].score1;
  94. lastCardData.scores[ConstDressUpScoreType.SCORE_HUA] += cardLvCfgs[i - 1].score1;
  95. lastCardData.scores[ConstDressUpScoreType.SCORE_XUE] += cardLvCfgs[i - 1].score1;
  96. lastCardData.scores[ConstDressUpScoreType.SCORE_YUE] += cardLvCfgs[i - 1].score1;
  97. }
  98. // lastCardData.star = star + 1;
  99. // CardDataManager.Refresh(lastCardData);
  100. }
  101. private static List<CardData> SortItemList(List<CardData> arrayList)
  102. {
  103. arrayList.Sort((CardData a, CardData b) =>
  104. {
  105. int rarityA = a.itemCfg.rarity;
  106. int rarityB = b.itemCfg.rarity;
  107. if (rarityA < rarityB)
  108. {
  109. return 1;
  110. }
  111. else if (rarityA > rarityB)
  112. {
  113. return -1;
  114. }
  115. return string.Compare(a.itemCfg.res, b.itemCfg.res);
  116. });
  117. return arrayList;
  118. }
  119. /// <summary>
  120. /// 卡牌升级
  121. /// </summary>
  122. /// <param name="cardId"></param>
  123. public static void UpCardLv(int cardId, int lv, int exp)
  124. {
  125. CardData cardData = _cardDicByType[0][cardId];
  126. CardDataManager.RefreshCardLvProperty(cardData, lv);
  127. cardData.lv = lv;
  128. cardData.exp = exp;
  129. CardDataManager.Refresh(cardData);
  130. }
  131. /// <summary>
  132. /// 卡牌升星
  133. /// </summary>
  134. /// <param name="cardId"></param>
  135. public static void UpCardStar(int cardId)
  136. {
  137. CardData cardData = _cardDicByType[0][cardId];
  138. int star = cardData.star + 1;
  139. CardDataManager.RefreshCardStarProperty(cardData, star);
  140. cardData.star = star;
  141. CardDataManager.Refresh(cardData);
  142. }
  143. /// <summary>
  144. /// 替换卡面
  145. /// </summary>
  146. /// <param name="cardId"></param>
  147. /// <param name="res"></param>
  148. public static void SetShowCard(int cardId, string res)
  149. {
  150. _cardDicByType[0][cardId].res = res;
  151. CardDataManager.Refresh(_cardDicByType[0][cardId]);
  152. }
  153. /// <summary>
  154. /// 根据男主类型获取卡牌字典
  155. /// </summary>
  156. public static Dictionary<int, CardData> GetCardDicByRarity(int rarity)
  157. {
  158. if (rarity == 0)
  159. {
  160. return _cardDicByType.ContainsKey(0) ? _cardDicByType[0] : null;
  161. }
  162. else
  163. {
  164. return _cardDicByType.ContainsKey(rarity) ? _cardDicByType[rarity] : null;
  165. }
  166. }
  167. public static List<CardData> CardDicToList(Dictionary<int, CardData> cardDic)
  168. {
  169. CardData[] cardArray = new CardData[cardDic.Count];
  170. cardDic.Values.CopyTo(cardArray, 0);
  171. List<CardData> cardList = new List<CardData>(cardArray);
  172. cardList = CardDataManager.SortItemList(cardList);
  173. return cardList;
  174. }
  175. public static bool isFullLv(int cardId, int lv, bool showTips = true)
  176. {
  177. CardData cardData = _cardDicByType[0][cardId];
  178. if (lv > CardCfgManager.GetCardLvCfgsByRarity(cardData.itemCfg.rarity).Count)
  179. {
  180. if (showTips == true)
  181. {
  182. PromptController.Instance.ShowFloatTextPrompt("已达到最大等级");
  183. }
  184. return true;
  185. }
  186. else
  187. {
  188. return false;
  189. }
  190. }
  191. public static bool isFullStar(int cardId, int star, bool showTips = true)
  192. {
  193. CardData cardData = _cardDicByType[0][cardId];
  194. if (star >= CardCfgManager.GetCardStarCfgsByTypeAndRarity(cardData.itemCfg.subType, cardData.itemCfg.rarity).Count)
  195. {
  196. if (showTips == true)
  197. {
  198. PromptController.Instance.ShowFloatTextPrompt("已达到最大星级");
  199. }
  200. return true;
  201. }
  202. else
  203. {
  204. return false;
  205. }
  206. }
  207. /// <summary>
  208. /// 根据物品id获取卡牌数据
  209. /// </summary>
  210. /// <param name="itemId"></param>
  211. /// <returns></returns>
  212. public static CardData GetCardDataById(int itemId)
  213. {
  214. return _cardDicByType[0][itemId];
  215. }
  216. public static void GetPreViewLvAndExp(int rarity, int curLv, int curExp, int hasExp, out int showLv, out int showExp)
  217. {
  218. List<CardLvlCfg> listCardLvCfgs = CardCfgManager.GetCardLvCfgsByRarity(rarity);
  219. showLv = curLv;
  220. showExp = curExp + hasExp;
  221. CardLvlCfg tCurCfg = CardLvlCfgArray.Instance.GetCfg(showLv, rarity);
  222. while (showExp >= tCurCfg.needExp && showLv <= listCardLvCfgs.Count)
  223. {
  224. showLv++;
  225. if (showLv == listCardLvCfgs.Count)
  226. {
  227. //满级
  228. showLv = listCardLvCfgs.Count - 1;
  229. showExp = tCurCfg.needExp;
  230. break;
  231. }
  232. tCurCfg = CardLvlCfgArray.Instance.GetCfg(showLv, rarity);
  233. showExp -= tCurCfg.needExp;
  234. }
  235. }
  236. public static List<CardData> FilterCardList(List<CardData> cardList, Dictionary<int, Dictionary<int, int>> selectList)
  237. {
  238. List<CardData> _cardList = new List<CardData>();
  239. if (selectList.ContainsKey((int)EnumCardFilterType.SubType) == true && selectList[(int)EnumCardFilterType.SubType].Keys.Count > 0)
  240. {
  241. for (int i = cardList.Count - 1; i >= 0; i--)
  242. {
  243. if (selectList[(int)EnumCardFilterType.SubType].ContainsKey(cardList[i].itemCfg.subType) == false)
  244. {
  245. //稀有度
  246. cardList.RemoveAt(i);
  247. continue;
  248. }
  249. }
  250. }
  251. if (selectList.ContainsKey((int)EnumCardFilterType.PROPERTY) == true && selectList[(int)EnumCardFilterType.PROPERTY].Keys.Count > 0)
  252. {
  253. for (int i = cardList.Count - 1; i >= 0; i--)
  254. {
  255. if (selectList[(int)EnumCardFilterType.PROPERTY].ContainsKey(cardList[i].mainScore) == false)
  256. {
  257. cardList.RemoveAt(i);
  258. continue;
  259. }
  260. }
  261. }
  262. //属性
  263. if (selectList.ContainsKey((int)EnumCardFilterType.FOSTER) == true && selectList[(int)EnumCardFilterType.FOSTER].Keys.Count > 0)
  264. {
  265. for (int i = 0; i < cardList.Count; i++)
  266. {
  267. //培养度
  268. List<CardLvlCfg> cardLvCfgs = CardCfgManager.GetCardLvCfgsByRarity(cardList[i].itemCfg.rarity);
  269. List<CardStarCfg> cardStarCfgs = CardCfgManager.GetCardStarCfgsByTypeAndRarity(cardList[i].itemCfg.subType, cardList[i].itemCfg.rarity);
  270. ICollection keys = selectList[(int)EnumCardFilterType.FOSTER].Keys;
  271. foreach (int key in keys)
  272. {
  273. if (key == ConstCardState.STATE_FULL_LV && cardList[i].lv == cardLvCfgs.Count - 1 ||
  274. key == ConstCardState.STATE_LV && cardList[i].lv < cardLvCfgs.Count - 1 ||
  275. key == ConstCardState.STATE_FULL_STAR && cardList[i].star == cardStarCfgs.Count ||
  276. key == ConstCardState.STATE_STAR && cardList[i].star < cardStarCfgs.Count)
  277. {
  278. _cardList.Add(cardList[i]);
  279. continue;
  280. }
  281. //if ()
  282. //{
  283. //技能相关留空
  284. //}
  285. }
  286. }
  287. return _cardList;
  288. }
  289. else
  290. {
  291. return cardList;
  292. }
  293. }
  294. }
  295. }