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 int CardResInitWidth = 1440; public static int CardResInitHight = 1920; 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, bool fromeList = false) { CardData cardData = new CardData(); cardData.id = cardInfoProto.CardId; cardData.lv = cardInfoProto.Lvl; cardData.exp = cardInfoProto.Exp; cardData.star = cardInfoProto.Star; cardData.mainScore = cardInfoProto.MainScore; cardData.resIndex = cardInfoProto.ResIndex; for (int i = 0; i < cardInfoProto.KsStarBonus.Count; i++) { cardData.starRewardsState[cardInfoProto.KsStarBonus[i]] = cardInfoProto.VsStarBonus[i]; } 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.mainScore) == false) { _cardDicByType[cardData.mainScore] = new Dictionary(); } _cardDicByType[0][cardData.id] = cardData; _cardDicByType[cardData.mainScore][cardData.id] = cardData; if(GameGlobal.AfterDataInited && !fromeList) { PreloadManager.Instance.PreloadCardAnimationRes(cardData.id); } } public static List GetCardResources(ItemCfg itemCfg) { List resources = new List(); resources.Add(itemCfg.res); if (itemCfg.cardRes != "") { resources.Add(itemCfg.cardRes); } return resources; } //默认词牌排序规则 :稀有度>星级>等级>种类(风>花>雪>月) public 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; } else { if (a.star < b.star) { return 1; } else if (a.star > b.star) { return -1; } else { if (a.lv < b.lv) return 1; else if (a.lv > b.lv) return -1; else { if (a.mainScore > b.mainScore) return 1; else if (a.mainScore < b.mainScore) return -1; } } } return string.Compare(a.itemCfg.res, b.itemCfg.res); }); return arrayList; } /// /// 根据词牌Id获取词牌升级升星数据,无数据返回null /// /// /// public static CardData GetCardDataById(int cardId) { if (_cardDicByType.Count == 0 || !_cardDicByType.ContainsKey(0) || !_cardDicByType[0].ContainsKey(cardId)) { return null; } return _cardDicByType[0][cardId]; } /// /// 根据男主类型获取词牌列表 /// public static List GetCardListByRoleType(int mainScore) { if (_cardDicByType.ContainsKey(mainScore)) { return _cardDicByType[mainScore].Values.ToList(); } return new List(); } public static bool isFullLv(int cardId, int lv, bool showTips = true) { CardData cardData = _cardDicByType[0][cardId]; int rarity = cardData.itemCfg.rarity; int maxLv = CardRarityCfgArray.Instance.GetCfg(rarity).maxCardLvl; if (lv >= maxLv && cardData.exp >= CardLvlCfgArray.Instance.GetCfgByrarityAndcardLvl(rarity, 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; CardData cardData = _cardDicByType[0][cardId]; int rarity = cardData.itemCfg.rarity; int maxLv = CardRarityCfgArray.Instance.GetCfg(rarity).maxCardLvl; CardLvlCfg tCurCfg = CardLvlCfgArray.Instance.GetCfgByrarityAndcardLvl(rarity, showLv); while (showExp >= tCurCfg.needExp && showLv <= maxLv) { showExp -= tCurCfg.needExp; if (showLv + 1 > maxLv) { //满级 showExp = tCurCfg.needExp; break; } showLv++; tCurCfg = CardLvlCfgArray.Instance.GetCfgByrarityAndcardLvl(rarity, showLv); } } 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 = CardRarityCfgArray.Instance.GetCfg(cardData.itemCfg.rarity).maxCardLvl; 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(); } //升星是否满足材料消耗 public static bool GetUpStarEnoughMaterial(int cardId) { CardData cardData = CardDataManager.GetCardDataById(cardId); CardStarCfg starCfg = CardStarCfgArray.Instance.GetCfgBycardIdAndstarLvl(cardId, cardData.star); for (int i = 0; i < starCfg.materiarsArr.Length; i++) { if (GameGlobal.myNumericComponent.GetAsInt(NumericType.IsAutoSelect) == 0 && ItemDataManager.GetItemNum(starCfg.materiarsArr[i][0]) < starCfg.materiarsArr[i][1]) return false; else if (GameGlobal.myNumericComponent.GetAsInt(NumericType.IsAutoSelect) == 1 && (i == 0 && (ItemDataManager.GetItemNum(6003001) + ItemDataManager.GetItemNum(starCfg.materiarsArr[i][0])) < starCfg.materiarsArr[i][1]) || (i == 1 && (ItemDataManager.GetItemNum(6003002) + ItemDataManager.GetItemNum(starCfg.materiarsArr[i][0])) < starCfg.materiarsArr[i][1])) return false; } return true; } /// /// 根据主属性获取有序牌ID列表(排序规则: 已获得词牌按稀有度从高到低 > 未获得词牌按稀有度从高到低 > 按词牌名字拼音) /// /// /// 0 - 全部 /// /// public static List GetAllCardIdListByRoleType(int mainScore) { List result = new List(); List itemCfgs = ItemCfgArray.Instance.GetCfgsByitemType(ConstItemType.CARD); itemCfgs.Sort((a, b) => { bool haveA = GetCardDataById(a.id) != null; bool haveB = GetCardDataById(b.id) != null; if (haveB && !haveA) { return 1; } else if (!haveB && haveA) { return -1; } if (a.rarity != b.rarity) { return a.rarity > b.rarity ? -1 : 1; } return a.res.CompareTo(b.res); }); for (int i = 0; i < itemCfgs.Count; i++) { if (itemCfgs[i].isHide > 0) { continue; } if (mainScore == 0 || itemCfgs[i].mainScore == mainScore) { result.Add(itemCfgs[i].id); } } return result; } public static void GetTotalProgress(out int haveCount, out int totalCount, int mainScore = 0) { totalCount = GlobalCfgArray.globalCfg.CardCount; if (mainScore != 0) { List itemCfgs = ItemCfgArray.Instance.GetCfgsByitemType(ConstItemType.CARD); totalCount = 0; for (int i = 0; i < itemCfgs.Count; i++) { if (itemCfgs[i].isHide > 0) { continue; } if (itemCfgs[i].mainScore == mainScore) { ++totalCount; } } } haveCount = _cardDicByType.ContainsKey(mainScore) ? _cardDicByType[mainScore].Count : 0; } public static int GetNextUpCardNeedRoleLv(int cardLv) { int roleLv = RoleDataManager.lvl; for (int i = roleLv + 1; i