| using System; | 
| using System.Collections; | 
| using System.Collections.Generic; | 
| using LitJson; | 
|   | 
| using UnityEngine; | 
| using UnityEngine.UI; | 
|   | 
| //天赋 | 
| public partial class HeroUIManager : GameSystemManager<HeroUIManager> | 
| { | 
|     public int normalGiftMaxCnt = 4;  //初始天赋格子数 | 
|     public const int giftMaxCnt = 8;    //关联界面排版问题,暂时写死,通过觉醒可以增加上限 | 
|     public int maxGiftLevel;    //单天赋最高等级,其他功能可能会增加这个上限 | 
|     public int starLevelCanAwake;   //x星可以觉醒 | 
|   | 
|     public int washItemID; | 
|     public int[] washByLockUseCounts; | 
|     public int canWashStarLevel;   //达到X星可以洗练 | 
|   | 
|     public string selectHeroGuidForGiftFunc;//武将主体GUID | 
|   | 
|     public int eatHeroIDForResult; //等待吞噬结果武将ID 为了弹成功界面使用 | 
|     public string selectHeroGuidForGiftFuncForSuccessWin;   //等待服务器返回的武将GUID 显示成功界面内容 | 
|     public List<int> heroBeforeGiftIDList = new List<int>();    //会有重复的ID,不要用字典 | 
|     public List<int> heroBeforeGiftLevelList = new List<int>(); | 
|   | 
|   | 
|     public event Action SelectEatHeroEvent; | 
|     string m_SelectEatHeroGuid; //被吞噬武将GUID | 
|     public string selectEatHeroGuid | 
|     { | 
|         get { return m_SelectEatHeroGuid; } | 
|         set | 
|         { | 
|             m_SelectEatHeroGuid = value; | 
|             SelectEatHeroEvent?.Invoke(); | 
|         } | 
|     } | 
|   | 
|     #region 洗炼 | 
|     public string selectWashHeroGUID; //被洗练武将GUID | 
|     public Action changeLockEvent; | 
|   | 
|     #endregion | 
|   | 
|     public List<string> heroEatList = new List<string>(); | 
|   | 
|   | 
|     void ParseGiftConfig() | 
|     { | 
|         var config = FuncConfigConfig.Get("HeroStarTalent"); | 
|         normalGiftMaxCnt = int.Parse(config.Numerical1); | 
|         maxGiftLevel = int.Parse(config.Numerical2); | 
|         starLevelCanAwake = int.Parse(config.Numerical4); | 
|   | 
|         config = FuncConfigConfig.Get("HeroWash"); | 
|         washItemID = int.Parse(config.Numerical1); | 
|         washByLockUseCounts = JsonMapper.ToObject<int[]>(config.Numerical2); | 
|         canWashStarLevel = int.Parse(config.Numerical3); | 
|     } | 
|   | 
|   | 
|     //根据天赋锁状态获取消耗的材料数量 | 
|     public int GetTalentLockUseWashCount(HeroInfo hero) | 
|     { | 
|         int heroTalentLockCount = hero.GetTalentLockCount(); | 
|         //不够取最后一个 | 
|         if (heroTalentLockCount >= washByLockUseCounts.Length) | 
|         { | 
|             heroTalentLockCount = washByLockUseCounts.Length - 1; | 
|         } | 
|         return washByLockUseCounts[heroTalentLockCount]; | 
|     } | 
|   | 
|   | 
|     //天赋格子总数上限  | 
|     public int GetGiftGirdMaxCount(int heroID) | 
|     { | 
|         //没有觉醒配置的 为默认4,否则8 | 
|         if (HeroAwakeConfig.GetHeroAwakeConfig(heroID, 1) == null) | 
|         { | 
|             return Instance.normalGiftMaxCnt; | 
|         } | 
|         return giftMaxCnt; | 
|     } | 
|   | 
|   | 
|   | 
|     //星最终上限由品质 和 觉醒决定 | 
|     public int GetMaxStarCount(int heroID, int quality) | 
|     { | 
|         if (HeroAwakeConfig.GetHeroAwakeConfig(heroID, 1) == null) | 
|         { | 
|             return HeroQualityConfig.Get(quality).InitStarUpper; | 
|   | 
|         } | 
|   | 
|         //根据觉醒累计提升星上限 | 
|         int addStarCount = 0; | 
|         for (int i = 1; i <= HeroAwakeConfig.GetMaxAwakeLV(heroID); i++) | 
|         { | 
|             addStarCount += HeroAwakeConfig.GetHeroAwakeConfig(heroID, i).AddStarUpper; | 
|         } | 
|         return HeroQualityConfig.Get(quality).InitStarUpper + addStarCount; | 
|     } | 
|   | 
|   | 
|   | 
|     //beforeGiftIDList用于对比变化的天赋格子 | 
|     public void RefreshGiftCell(GiftBaseCell[] giftBaseCells, HeroInfo hero, List<int> beforeGiftIDList = null, List<int> beforeGiftLevelList = null) | 
|     { | 
|         int showCount = GetGiftGirdMaxCount(hero.heroId); | 
|         for (int i = 0; i < giftBaseCells.Length; i++) | 
|         { | 
|             if (i >= showCount) | 
|             { | 
|                 giftBaseCells[i].SetActive(false); | 
|                 continue; | 
|             } | 
|   | 
|             giftBaseCells[i].SetActive(true); | 
|             if (i < hero.talentIDList.Count) | 
|             { | 
|                 int giftID = hero.talentIDList[i]; | 
|                 int giftLV = hero.talentLvList[i]; | 
|                 int state = 0; //0:不显示 1:新增 2:提升 | 
|   | 
|                 if (!beforeGiftIDList.IsNullOrEmpty()) | 
|                 { | 
|                     if (i >= beforeGiftIDList.Count) | 
|                     { | 
|                         state = 1; | 
|                     } | 
|                     else | 
|                     { | 
|                         if (giftID != beforeGiftIDList[i]) | 
|                         { | 
|                             state = 1; | 
|                         } | 
|                         else | 
|                         { | 
|                             if (giftLV > beforeGiftLevelList[i]) | 
|                             { | 
|                                 state = 2; | 
|                             } | 
|                         } | 
|                     } | 
|                 } | 
|   | 
|                 giftBaseCells[i].Init(giftID, giftLV, state, hero.heroId, i, hero.awakeLevel); | 
|             } | 
|             else | 
|             { | 
|                 if (!beforeGiftIDList.IsNullOrEmpty()) | 
|                 { | 
|                     //对比情况下不显示 | 
|                     giftBaseCells[i].SetActive(false); | 
|                     continue; | 
|                 } | 
|   | 
|                 //非对比的显示 | 
|                 if (i < normalGiftMaxCnt) | 
|                 { | 
|                     giftBaseCells[i].Init(0, 0); | 
|                 } | 
|                 else | 
|                 { | 
|                     giftBaseCells[i].Init(-1, 0, 0, hero.heroId, i); | 
|                 } | 
|             } | 
|   | 
|         } | 
|     } | 
|   | 
|   | 
|     public void CacheHeroEatList() | 
|     { | 
|         heroEatList = PackManager.Instance.GetSinglePack(PackType.Hero).GetItemGUIDListById( | 
|             HeroManager.Instance.GetHero(selectHeroGuidForGiftFunc).heroId); | 
|         heroEatList.Remove(selectHeroGuidForGiftFunc);  //排除吞噬主体 | 
|         heroEatList.Sort(CmpDeleteHero); | 
|     } | 
|   | 
|   | 
|   | 
|   | 
|     public void ShowStarImg(int starCount, Image[] starImages, bool noStarShow = true) | 
|     { | 
|         int imgCount = starImages.Length; | 
|         for (int i = 0; i < imgCount; i++) | 
|         { | 
|             if (starCount == 0 && i == 0) | 
|             { | 
|                 if (noStarShow) | 
|                 { | 
|                     // 无星级 特殊处理 显示一个空星星 | 
|                     starImages[i].SetActive(true); | 
|                     starImages[i].SetSprite("herostar" + starCount); | 
|                 } | 
|                 else | 
|                 { | 
|                     starImages[i].SetActive(false); | 
|                 } | 
|             } | 
|             else if ((starCount - 1) % imgCount >= i) | 
|             { | 
|                 starImages[i].SetActive(true); | 
|                 starImages[i].SetSprite("herostar" + (((starCount - 1) / imgCount) + 1) * imgCount); | 
|             } | 
|             else | 
|             { | 
|                 starImages[i].SetActive(false); | 
|             } | 
|         } | 
|     } | 
|   | 
|   | 
|     // public ushort ItemIndex;    //武将物品所在武将背包位置索引 | 
|     // public byte LockCnt; | 
|     // public  byte[] LockTalentIndexs;    //锁定天赋索引列表 | 
|     // public byte OPType;    // 操作类型:0-执行洗炼;1-替换原天赋;2-保留原天赋 | 
|     public void SendWash(HeroInfo hero, byte opType) | 
|     { | 
|         var pack = new CB235_tagCSHeroWash(); | 
|         pack.ItemIndex = (ushort)hero.itemHero.gridIndex; | 
|         pack.LockCnt = (byte)hero.talentLockList.Count; | 
|         pack.LockTalentIndexs = new byte[pack.LockCnt]; | 
|         for (int i = 0; i < pack.LockCnt; i++) | 
|         { | 
|             pack.LockTalentIndexs[i] = (byte)hero.talentLockList[i]; | 
|         } | 
|         pack.OPType = opType; | 
|         GameNetSystem.Instance.SendInfo(pack); | 
|     } | 
| } |