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 int selectHeroCollectListJob = 0; //武将列表界面 筛选职业 public int selectHeroCollectListCountry = 0; //武将列表界面筛选国家 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(); 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(); } //过滤职业国家 if (selectHeroCollectListJob != 0 && selectHeroCollectListJob != heroConfig.Class) { continue; } if (selectHeroCollectListCountry != 0 && selectHeroCollectListCountry != heroConfig.Country) { 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 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; } }