using System; using System.Collections; using System.Collections.Generic; using System.Linq; using ET; using UnityEngine; namespace GFGGame { public class CardDataManager { private static Dictionary> _cardDicByType = new Dictionary>(); public static Dictionary> _selectList = new Dictionary>(); public static List _selectRoleList = new List(); public static List _selectRarityList = new List(); public static List _selectFosterList = new List(); public static bool isFilter = false;//是否筛选中 private static Dictionary> _cardStoryCfgDic = new Dictionary>(); public static void Clear() { _cardDicByType.Clear(); _cardStoryCfgDic.Clear(); } public static void Add(CardInfoProto cardInfoProto) { CardData cardData = new CardData(); ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(cardInfoProto.CardId); if (itemCfg == null) { ET.Log.Error(cardInfoProto.CardId + " ItemCfgArray配置不存在"); return; } cardData.mainScore = itemCfg.mainScore; cardData.resources = CardDataManager.GetCardResources(itemCfg); cardData.id = cardInfoProto.CardId; cardData.lv = cardInfoProto.Lvl; cardData.exp = cardInfoProto.Exp; cardData.star = cardInfoProto.Star; cardData.itemCfg = itemCfg; cardData.resIndex = cardInfoProto.ResIndex >= cardData.resources.Count ? 0 : cardInfoProto.ResIndex; cardData.scores = new Dictionary(); for (int j = 0; j < cardInfoProto.KsAttribute.Count; j++) { cardData.scores.Add(cardInfoProto.KsAttribute[j], cardInfoProto.VsAttribute[j]); } if (_cardDicByType.ContainsKey(0) == false) { _cardDicByType[0] = new Dictionary(); } if (_cardDicByType.ContainsKey(cardData.itemCfg.mainScore) == false) { _cardDicByType[cardData.itemCfg.mainScore] = new Dictionary(); } _cardDicByType[0][cardData.id] = cardData; _cardDicByType[cardData.itemCfg.mainScore][cardData.id] = cardData; } private static List GetCardResources(ItemCfg itemCfg) { List resources = new List(); resources.Add(itemCfg.res); if (itemCfg.cardRes != "") { resources.Add(itemCfg.cardRes); } return resources; } private static List SortItemList(List arrayList) { arrayList.Sort((CardData a, CardData b) => { int rarityA = a.itemCfg.rarity; int rarityB = b.itemCfg.rarity; if (rarityA < rarityB) { return 1; } else if (rarityA > rarityB) { return -1; } return string.Compare(a.itemCfg.res, b.itemCfg.res); }); return arrayList; } /// /// 根据卡牌Id获取卡牌升级升星数据,无数据返回null /// /// /// public static CardData GetCardDataById(int cardId) { if (!_cardDicByType.ContainsKey(0) || !_cardDicByType[0].ContainsKey(cardId)) return null; return _cardDicByType[0][cardId]; } /// /// 根据男主类型获取卡牌列表 /// public static List GetCardListByRarity(int mainScore) { if (_cardDicByType.ContainsKey(mainScore)) { Dictionary cardDic = _cardDicByType[mainScore]; CardData[] cardArray = new CardData[cardDic.Count]; cardDic.Values.CopyTo(cardArray, 0); List cardList = new List(cardArray); cardList = CardDataManager.SortItemList(cardList); return cardList; } return new List(); } public static bool isFullLv(int cardId, int lv, bool showTips = true) { CardData cardData = _cardDicByType[0][cardId]; int maxLv = CardLvlCfgArray.Instance.GetCfgsBycardId(cardId).Count; if (lv >= maxLv && cardData.exp >= CardLvlCfgArray.Instance.GetCfgBycardIdAndcardLvl(cardId, maxLv).needExp) { if (showTips == true) { PromptController.Instance.ShowFloatTextPrompt("已达到最大等级"); } return true; } else { return false; } } public static bool isFullStar(int cardId, int star, bool showTips = true) { CardData cardData = _cardDicByType[0][cardId]; if (CardStarCfgArray.Instance.GetCfgBycardIdAndstarLvl(cardData.id, star + 1) == null) { if (showTips == true) { PromptController.Instance.ShowFloatTextPrompt("已达到最大星级"); } return true; } else { return false; } } public static void GetPreViewLvAndExp(int cardId, int curLv, int curExp, int hasExp, out int showLv, out int showExp) { showLv = curLv; showExp = curExp + hasExp; int maxLv = CardLvlCfgArray.Instance.GetCfgsBycardId(cardId).Count; CardLvlCfg tCurCfg = CardLvlCfgArray.Instance.GetCfgBycardIdAndcardLvl(cardId, showLv); while (showExp >= tCurCfg.needExp && showLv <= maxLv) { showExp -= tCurCfg.needExp; if (showLv + 1 > maxLv) { //满级 // showLv = showLv - 1; showExp = tCurCfg.needExp; break; } showLv++; tCurCfg = CardLvlCfgArray.Instance.GetCfgBycardIdAndcardLvl(cardId, showLv); // if (showExp < tCurCfg.needExp) // { // showLv = showLv - 1; // break; // } } } public static List FilterCardList(List cardList) { List _cardList = new List(); for (int i = 0; i < cardList.Count; i++) { CardData cardData = cardList[i]; bool isRole = _selectRoleList.Count == 0 || _selectRoleList.IndexOf(cardData.itemCfg.subType) >= 0; bool isRarity = _selectRarityList.Count == 0 || _selectRarityList.IndexOf(cardData.itemCfg.rarity) >= 0; int maxLv = CardLvlCfgArray.Instance.GetCfgsBycardId(cardData.id).Count; bool isFoster = _selectFosterList.Count == 0 || _selectFosterList.IndexOf(ConstCardState.STATE_FULL_LV) >= 0 && cardList[i].lv == maxLv || _selectFosterList.IndexOf(ConstCardState.STATE_LV) >= 0 && cardList[i].lv < maxLv || _selectFosterList.IndexOf(ConstCardState.STATE_FULL_STAR) >= 0 && isFullStar(cardList[i].id, cardList[i].star, false) || _selectFosterList.IndexOf(ConstCardState.STATE_STAR) >= 0 && !isFullStar(cardList[i].id, cardList[i].star, false); if (isRole && isRarity && isFoster) { _cardList.Add(cardData); } } return _cardList; } public static List GetStoryCfgsById(int cardId) { if (_cardStoryCfgDic.Keys.Count == 0) { CardStoryCfg[] cardStoryCfgs = CardStoryCfgArray.Instance.dataArray; for (int i = 0; i < cardStoryCfgs.Length; i++) { int _cardId = cardStoryCfgs[i].cardId; if (_cardStoryCfgDic.ContainsKey(_cardId) == false) { _cardStoryCfgDic.Add(_cardId, new List()); } _cardStoryCfgDic[_cardId].Add(cardStoryCfgs[i]); } } return _cardStoryCfgDic.ContainsKey(cardId) ? _cardStoryCfgDic[cardId] : new List(); } } }