| using System; | 
| using System.Collections; | 
| using System.Collections.Generic; | 
| using System.Linq; | 
|   | 
| using UnityEngine; | 
|   | 
| //图鉴和皮肤 | 
| public partial class HeroUIManager : GameSystemManager<HeroUIManager> | 
| { | 
|   | 
|   | 
|     public Dictionary<int, List<int>> heroCollectDict { get; private set; } = new Dictionary<int, List<int>>();  //武将图鉴按品质列表 | 
|     public List<int> heroCollectList = new List<int>(); //武将图鉴列表 | 
|     public int selectHeroCollectListJob = 0;    //武将列表界面 筛选职业 | 
|     public int selectHeroCollectListCountry = 0;    //武将列表界面筛选国家 | 
|     public int selectCollectHeroID; //选中的武将id 用于升级 | 
|   | 
|     public int selectForPreviewHeroID; //选中的武将id 用于预览 | 
|   | 
|     //图鉴和皮肤的激活情况 | 
|     Dictionary<int, HB122_tagSCHeroInfo.tagSCHero> heroCollectInfoDic = new Dictionary<int, HB122_tagSCHeroInfo.tagSCHero>(); | 
|   | 
|     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<int>(); | 
|             } | 
|             //过滤职业国家 | 
|             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; | 
|     } | 
| } |