using System; using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; //图鉴和皮肤 public partial class HeroUIManager : GameSystemManager { public Dictionary> heroCollectDict { get; private set; } = new Dictionary>(); //武将图鉴按品质列表 public List heroCollectList = new List(); //武将图鉴列表 public List selectHeroCollectList = new List(); //武将列表界面 筛选 public int selectCollectHeroID; //选中的武将id 用于升级 public int selectForPreviewHeroID; //选中的武将id 用于预览 //图鉴和皮肤的激活情况 Dictionary heroCollectInfoDic = new Dictionary(); // public int allHeroBookPer; //全体武将的图鉴激活百分比 public event Action OnHeroCollectEvent; public void UpdateHeroCollectInfo(HB122_tagSCHeroInfo netPack) { for (int i = 0; i < netPack.HeroCnt; i++) { heroCollectInfoDic[(int)netPack.HeroInfoList[i].HeroID] = netPack.HeroInfoList[i]; } // allHeroBookPer = GetHeroCollectBookPer(); OnHeroCollectEvent?.Invoke(); UpdateHeroBookRedpoint(); } // public int GetHeroCollectBookPer() // { // int per = 0; // foreach (var kv in heroCollectInfoDic) // { // var config = HeroQualityConfig.Get(HeroConfig.Get(kv.Key).Quality); // if (kv.Value.BookInitState != 2) // continue; // per += config.BookInitAddPer; // per += kv.Value.BookStarLV * config.BookStarAddPer; // per += kv.Value.BookBreakLV * config.BookBreakLVAddPer; // } // return per; // } public bool TryGetHeroBookInfo(int heroID, out HB122_tagSCHeroInfo.tagSCHero heroData) { if (heroCollectInfoDic.ContainsKey(heroID)) { heroData = heroCollectInfoDic[heroID]; return true; } heroData = new HB122_tagSCHeroInfo.tagSCHero(); return false; } public void SortHeroCollectList() { var heroIDs = HeroConfig.GetKeys().ToList(); int job = 0; int country = 0; int hurtType = 0; int fightAttrType = 0; int specialAttrType = 0; if (!selectHeroCollectList.IsNullOrEmpty()) { job = selectHeroCollectList[0]; country = selectHeroCollectList[1]; hurtType = selectHeroCollectList[2]; fightAttrType = selectHeroCollectList[3]; specialAttrType = selectHeroCollectList[4]; } heroCollectDict.Clear(); foreach (var heroID in heroIDs) { HeroConfig heroConfig = HeroConfig.Get(heroID); if (heroConfig.PlayerCanUse == 0) continue; if (!heroCollectDict.ContainsKey(heroConfig.Quality)) { heroCollectDict[heroConfig.Quality] = new List(); } //0代表全部, 同级别是可复选,不同级别为且的关系 bool isMatch = true; if (job != 0) { isMatch = isMatch && (job & (1 << heroConfig.Class)) > 0; } if (country != 0) { isMatch = isMatch && (country & (1 << heroConfig.Country)) > 0; } if (hurtType != 0) { isMatch = isMatch && (hurtType & (1 << heroConfig.HurtType)) > 0; } if (fightAttrType != 0) { isMatch = isMatch && (fightAttrType & (1 << heroConfig.Specialty)) > 0; } if (specialAttrType != 0) { bool isMatch2 = false; for (int i = 0; i < heroConfig.Specialty2.Length; i++) { isMatch2 = (specialAttrType & (1 << heroConfig.Specialty2[i])) > 0; if (isMatch2) break; } isMatch = isMatch && isMatch2; } if (!isMatch) { continue; } heroCollectDict[heroConfig.Quality].Add(heroID); } heroCollectList.Clear(); //按品质倒序加入 var _list = heroCollectDict.Keys.ToList(); _list.Reverse(); foreach (var quality in _list) { heroCollectList.AddRange(heroCollectDict[quality]); } } //图鉴总上限等级 = 图鉴星级上限 + 图鉴突破上限 public int GetHeroBookMaxLevel(int heroID, int quality) { return GetMaxStarCount(heroID, quality) + HeroBreakConfig.GetMaxBreakLv(heroID); } public int GetHeroBookLevel(int heroID) { if (heroCollectInfoDic.ContainsKey(heroID)) { return heroCollectInfoDic[heroID].BookStarLV + heroCollectInfoDic[heroID].BookBreakLV; } return 0; } //分为0未获得、1可激活、2常规、3突破升级、4、星升级、5已满级 public int GetHeroBookState(int heroID, int quality) { int funcState = 0; HB122_tagSCHeroInfo.tagSCHero colData; TryGetHeroBookInfo(heroID, out colData); // int maxBreakLV = colData.BookBreakLVH; //历史最高突破等级 // int maxStarLV = colData.BookStarLVH; //历史最高星级 if (colData.BookInitState == 0) { funcState = 0; } else if (colData.BookInitState == 1) { funcState = 1; } else { funcState = 2; } // else if (colData.BookInitState == 2) // { // if (GetHeroBookMaxLevel(heroID, quality) == colData.BookBreakLV + colData.BookStarLV) // { // funcState = 5; // } // else if (maxBreakLV + maxStarLV == colData.BookBreakLV + colData.BookStarLV) // { // funcState = 2; // } // else // { // //优先突破升级 // if (colData.BookBreakLV < colData.BookBreakLVH) // { // funcState = 3; // } // else // { // funcState = 4; // } // } // } return funcState; } //找到可以操作的图鉴武将 public int FindHeroIDCanAddCollectAttr(int excludeHeroID = 0) { foreach (var kv in heroCollectInfoDic) { if (kv.Key == excludeHeroID) continue; var state = GetHeroBookState(kv.Key, HeroConfig.Get(kv.Key).Quality); if (state == 1 || state == 3 || state == 4) { return kv.Key; } } return 0; } // public int GetHeroBookPer(int heroID) // { // var config = HeroQualityConfig.Get(HeroConfig.Get(heroID).Quality); // HB122_tagSCHeroInfo.tagSCHero heroData; // TryGetHeroBookInfo(heroID, out heroData); // if (heroData.BookInitState < 2) // { // return 0; // } // return config.BookInitAddPer + heroData.BookStarLV * config.BookStarAddPer + heroData.BookBreakLV * config.BookBreakLVAddPer; // } }