From 89343a7a0909e5244a3b69c4db1294de4536243b Mon Sep 17 00:00:00 2001
From: lcy <1459594991@qq.com>
Date: 星期一, 15 十二月 2025 18:15:22 +0800
Subject: [PATCH] 262 幻境阁系统-客户端 新增仅适用武将解锁的头像和形象的红点移除规则

---
 Main/System/HeroUI/HeroTrainWin.cs |  635 +++++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 439 insertions(+), 196 deletions(-)

diff --git a/Main/System/HeroUI/HeroTrainWin.cs b/Main/System/HeroUI/HeroTrainWin.cs
index bcadf4d..fc14d23 100644
--- a/Main/System/HeroUI/HeroTrainWin.cs
+++ b/Main/System/HeroUI/HeroTrainWin.cs
@@ -1,14 +1,18 @@
 using System.Collections.Generic;
 using System.Linq;
+using Cysharp.Threading.Tasks;
 using UnityEngine;
 using UnityEngine.UI;
 
 
 /// <summary>
-/// 姝﹀皢鍩瑰吇鐣岄潰
+/// 姝﹀皢鍩瑰吇鐣岄潰  
+/// functionOrder 0 浠h〃鍩瑰吇  1 浠h〃绐佺牬
+/// 鏆傛椂涓嶅仛涓�绾х晫闈㈠尯鍒嗭紝寰呮椂瑁呯晫闈㈠垎鏋愬鐞嗭紝鐩墠绐佺牬涔熷湪杩欎釜鐣岄潰
 /// </summary>
 public class HeroTrainWin : UIBase
 {
+    [SerializeField] RawImage bgTexture;
     [SerializeField] Button showFuncBtn;    //鍙樉绀虹珛缁樻椂鐐瑰嚮锛屾樉绀哄姛鑳�
     [SerializeField] Transform funcForm;
     [SerializeField] UIHeroController roleLhModel;    //灞曠ず鑻遍泟绔嬬粯
@@ -32,7 +36,7 @@
     [SerializeField] Button awakeBtn;
 
     [SerializeField] Button closeBtn;   //鍏抽棴鎸夐挳
-
+    [SerializeField] Button starBtn;   //鏄剧ず鏄熺骇鏂囧瓧
     [SerializeField] List<Image> starImgList;
     [SerializeField] Text nameText;
     [SerializeField] UIEffectPlayer nameEffect;
@@ -40,7 +44,8 @@
     [SerializeField] Text awakeLVText;
 
     //灞炴�у尯
-    [SerializeField] Button attrBtn;
+    [SerializeField] ScrollRect allAttrScroll;      //鍩瑰吇灞炴�� 婊氬姩鍖� 
+    [SerializeField] Button attrBtn;    //鍩瑰吇鍖虹殑鎷栨媺鎸夐挳
     [SerializeField] Image unfoldImg; //灞曞紑鏃舵寜閽殑鍥炬爣
     [SerializeField] Image foldImg; //鏀惰捣鏃舵寜閽殑鍥炬爣
     bool unfoldState = false;//鏄惁灞曞紑
@@ -52,14 +57,22 @@
     [SerializeField] Text[] inheritAttrText;    //姝﹀皢浼氱户鎵跨殑灞炴��
     [SerializeField] RichText heroAddPerText; //涓诲叕锛堜笂闃碉級鍔犳垚鎻忚堪
     [SerializeField] Text[] heroAddAttrPerText; //涓诲叕锛堜笂闃碉級鍔犳垚
-    [SerializeField] Text[] addPerText;    //澧炲姞鐧惧垎姣旓紙椋樺姩锛�
-    [SerializeField] PositionTween addPerObject;
+    [SerializeField] Transform addPerParent;
+    [SerializeField] HeroTrainAddAttrCell addPerObject;
     [SerializeField] Image lvupMoneyIcon;
     [SerializeField] Text lvupMoneyText;
     [SerializeField] Text lvupBtnText;
-    [SerializeField] LongPressButton lvupBtn;
+    [SerializeField] LongPressButton lvupBtn;   //鍗囩骇 绐佺牬
     [SerializeField] Button allAttrBtn;
-    [SerializeField] Text allPotentialText; //娼滆兘
+
+    [SerializeField] GameObject potentialCell; //娼滆兘鍜岃閱掔敤浜庡垱寤�
+    [SerializeField] Transform potentialCellParent; //娼滆兘鐖惰妭鐐�
+    List<GameObject> potentialCellList;   //娼滆兘
+    [SerializeField] Transform awakeCellParent; //娼滆兘鐖惰妭鐐�
+    [SerializeField] GameObject awakeGo;
+    List<GameObject> awakeCellList;   //瑙夐啋
+
+    [SerializeField] GameObject fetterGo;
     [SerializeField] Text[] fetterText;   //缇佺粖
     [SerializeField] Text[] fetterNameText;   //缇佺粖
 
@@ -71,6 +84,34 @@
     [SerializeField] Text starUPBtnText;
     [SerializeField] Button washBtn;
 
+    //鍐荤粨澶勭悊
+    [SerializeField] Button freezeTipBtn;
+    [SerializeField] GameObject freezeTipGo;
+    [SerializeField] Text freezeStarText;
+    [SerializeField] Text freezeAawkeLVText;
+    [SerializeField] List<Image> starImgFreezeList;
+
+    //浼孩鐐圭敤鍥剧墖浠f浛
+    [SerializeField] Image redpointAwake;
+    [SerializeField] Image redpointGift;
+    [SerializeField] Image redpointLVUP;
+    [SerializeField] Image redpointBreakLVUP; //绐佺牬绾㈢偣
+
+
+
+    #region 绐佺牬
+    // 鍖哄垎绐佺牬鍜屽煿鍏绘ā鍧�
+    [SerializeField] HeroLVBreakCell heroLVBreakCell;   //瀵瑰簲鍩瑰吇鐨� allAttrScroll  鍜� attrBtn
+
+    [SerializeField] GroupButtonEx trainMainButton; //鍩瑰吇鍏ュ彛鎸夐挳
+    [SerializeField] GroupButtonEx breakMainButton; //绐佺牬鍏ュ彛鎸夐挳
+    //鍏ュ彛浼孩鐐圭敤鍥剧墖浠f浛
+    [SerializeField] Image trainMainRedImg;
+    [SerializeField] Image breakMainRedImg;
+    #endregion
+
+
+    Queue<HeroTrainAddAttrCell> lvupAttrQueue = new Queue<HeroTrainAddAttrCell>();
 
     string guid;
     HeroInfo hero;
@@ -98,11 +139,19 @@
         });
 
         lockBtn.AddListener(() => { hero.ChangeLockState(); });
-        resetBtn.AddListener(ResetBtnClick);
+        resetBtn.AddListener(() =>
+        {
+            HeroUIManager.Instance.ResetBtnClick(hero);
+        });
         deleteBtn.AddListener(DeleteHero);
         awakeBtn.AddListener(() =>
         {
-            // UIManager.Instance.OpenWindow<HeroAwakeWin>(hero.heroId);
+            if (!FuncOpen.Instance.IsFuncOpen(38, true))
+            {
+                return;
+            }
+            HeroUIManager.Instance.selectAwakeHeroGuid = guid;
+            UIManager.Instance.OpenWindow<HeroAwakeWin>();
         });
         inheritText.OnClick = () =>
         {
@@ -124,7 +173,10 @@
 
         allAttrBtn.AddListener(() =>
         {
-            UIManager.Instance.OpenWindow<HeroAllAttrWin>(hero.itemHero.gridIndex);
+            if (hero == null)
+                return;
+            var dict = FightPowerManager.Instance.GetHeroTotalAttr(hero);
+            AttributeManager.Instance.OpenTotalAttributeWin(dict, hero.itemHero.gridIndex);
         });
         lvupBtn.AddListener(LVUp);
         lvupBtn.onPress.AddListener(LVUp);
@@ -135,6 +187,37 @@
         });
 
         starUPBtn.AddListener(StarUP);
+        washBtn.AddListener(Wash);
+
+        starBtn.AddListener(() =>
+        {
+            SmallTipWin.showText = Language.Get("HeroGift14", hero.heroStar);
+            SmallTipWin.worldPos = CameraManager.uiCamera.ScreenToWorldPoint(Input.mousePosition);
+            UIManager.Instance.OpenWindow<SmallTipWin>();
+        });
+
+        potentialCellList = new List<GameObject>();
+        awakeCellList = new List<GameObject>();
+
+        freezeTipBtn.AddListener(() =>
+        {
+            freezeTipGo.SetActive(!freezeTipGo.activeSelf);
+        });
+
+        trainMainButton.AddListener(() =>
+        {
+            functionOrder = 0;
+            DisplayTrainOrBreak(hero);
+            ForceRefreshLayout();
+        });
+
+        breakMainButton.AddListener(() =>
+        {
+            functionOrder = 1;
+            DisplayTrainOrBreak(hero);
+            unfoldState = false;
+            RefreshFoldState();
+        });
     }
 
 
@@ -143,18 +226,25 @@
         PackManager.Instance.RefreshItemLockEvent += RefreshItemLockEvent;
         HeroManager.Instance.onHeroChangeEvent += RefreshHeroEvent;
         UIManager.Instance.OnCloseWindow += OnCloseWindow;
+        TeamManager.Instance.OnTeamChange += TeamPosChangeEvent;
+        PackManager.Instance.RefreshItemEvent += RefreshItemEvent;
+
         guid = HeroUIManager.Instance.selectHeroGuid;
         hero = HeroManager.Instance.GetHero(guid);
         unfoldState = false;
         addPerObject.SetActive(false);
+        allAttrScroll.verticalNormalizedPosition = 1;
         Display();
     }
+
 
     protected override void OnPreClose()
     {
         PackManager.Instance.RefreshItemLockEvent -= RefreshItemLockEvent;
         HeroManager.Instance.onHeroChangeEvent -= RefreshHeroEvent;
         UIManager.Instance.OnCloseWindow -= OnCloseWindow;
+        TeamManager.Instance.OnTeamChange -= TeamPosChangeEvent;
+        PackManager.Instance.RefreshItemEvent -= RefreshItemEvent;
     }
 
     private void OnCloseWindow(UIBase closeUI)
@@ -172,16 +262,16 @@
 
     public void Display()
     {
+        bgTexture.SetTexture2D("countryBG" + hero.heroConfig.Country);
         roleLhModel.Create(hero.SkinID, 1, motionName: "", isLh: true);
-        roleXsModel.Create(hero.SkinID);
+        roleXsModel.Create(hero.SkinID, 1);
         jobImg.SetSprite(HeroUIManager.Instance.GetJobIconName(hero.heroConfig.Class));
         jobPosNameText.text = HeroUIManager.Instance.GetJobName(hero.heroConfig.Class);
         descText.text = hero.heroConfig.Desc;
-        fightPowerText.text = UIHelper.ReplaceLargeArtNum(hero.CalculatePower());
-        PlayerMainDate.Instance.AddPowerNotOnTeam(hero);
+        fightPowerText.text = UIHelper.ReplaceLargeArtNum(hero.CalculateFightPower());
+        // PlayerMainDate.Instance.AddPowerNotOnTeam(hero);
         lockImg.SetActive(hero.isLock);
         unLockImg.SetActive(!hero.isLock);
-        nameText.text = hero.breakLevel == 0 ? hero.heroConfig.Name : Language.Get("herocardbreaklv", hero.heroConfig.Name, hero.breakLevel);
 
         RefreshConn();
         normalSkillCell.Init(hero.heroConfig.AtkSkillID, () =>
@@ -201,7 +291,37 @@
         RefreshAllPotential();
         RefreshFetter();
         RefreshGift();
+        RefreshAwake();
+        RefreshFreeze();
+        RefreshRedImg();
+        DisplayTrainOrBreak(hero);
+
+
+        HeroUIManager.Instance.RemoveNewHero(hero.heroId);
+        ForceRefreshLayout();
     }
+
+    /// <summary>
+    /// 寮哄埗鍒锋柊Layout锛岃В鍐冲祵濂桳ayout鍜孋ontentSizeFitter鐨勯噸鍙犻棶棰�
+    /// </summary>
+    async UniTask ForceRefreshLayout()
+    {
+        await UniTask.DelayFrame(2);
+        // 鍒锋柊鎵�鏈塋ayout缁勪欢
+        var layouts = allAttrScroll.GetComponentsInChildren<LayoutGroup>(true);
+        foreach (var layout in layouts)
+        {
+            LayoutRebuilder.ForceRebuildLayoutImmediate(layout.GetComponent<RectTransform>());
+        }
+        await UniTask.DelayFrame(2);
+        // 鍒锋柊鎵�鏈塋ayout缁勪欢
+        foreach (var layout in layouts)
+        {
+            LayoutRebuilder.ForceRebuildLayoutImmediate(layout.GetComponent<RectTransform>());
+        }
+
+    }
+
 
     void RefreshItemLockEvent(PackType type, string guid, bool lockState)
     {
@@ -209,6 +329,17 @@
             return;
         lockImg.SetActive(hero.isLock);
         unLockImg.SetActive(!hero.isLock);
+    }
+
+    void RefreshItemEvent(PackType type, int index, int itemID)
+    {
+        if (type != PackType.Item)
+            return;
+        if (itemID != 7 && itemID != 8)
+        {
+            return;
+        }
+        RefreshAttr();
     }
 
     void RefreshHeroEvent(HeroInfo hero)
@@ -235,6 +366,7 @@
         var index = HeroUIManager.Instance.heroSortList.IndexOf(guid);
         if (index == -1)
             return;
+        allAttrScroll.verticalNormalizedPosition = 1;
         int resultIndex = index + changeValue;
         //寰幆澶勭悊
         if (resultIndex < 0)
@@ -250,74 +382,9 @@
         Display();
     }
 
-    void ResetBtnClick()
-    {
-        //鍗囩骇銆佺獊鐮淬�佽閱�
-        if (hero.heroLevel == 1 && hero.breakLevel == 0 && hero.awakeLevel == 0)
-        {
-            SysNotifyMgr.Instance.ShowTip("HeroCanNotReset");
-            return;
-        }
-
-        List<Item> items = new List<Item>();
 
 
-        var payBack1 = CommonFunc.AddDict(HeroUIManager.Instance.GetHeroLVPayBack(hero.Quality, hero.heroLevel),
-        HeroUIManager.Instance.GetHeroBreakPayBack(hero.Quality, hero.breakLevel));
 
-        //宸茶閱掔殑闇�瑕佹秷鑰楄揣甯�
-        if (hero.awakeLevel == 0)
-        {
-            items = CommonFunc.ChangeToItemList(payBack1);
-            ConfirmCancel.ShowItemsConfirm(items, Language.Get("herocard42"), Language.Get("herocard43"), (bool isOk) =>
-            {
-                if (isOk)
-                {
-                    //鍙戝寘
-                    SendReborn(hero.itemHero.gridIndex);
-                }
-            });
-        }
-        else
-        {
-
-            if (HeroUIManager.Instance.awakeRebirthCnt >= HeroUIManager.Instance.rebornAwakeHeroMaxCount)
-            {
-                SysNotifyMgr.Instance.ShowTip("HeroRebornAwakeMax");
-                return;
-            }
-
-            payBack1 = CommonFunc.AddDict(payBack1, HeroUIManager.Instance.GetHeroQualityAwakePayBack(hero.Quality, hero.awakeLevel));
-            items = CommonFunc.ChangeToItemList(payBack1);
-            var info2 = Language.Get("herocard44", HeroUIManager.Instance.awakeRebirthCnt);
-            var payBackMoney = HeroQualityAwakeConfig.GetQualityAwakeConfig(hero.Quality, hero.awakeLevel).RebirthCostMoney;
-            ConfirmCancel.ShowItemsConfirm(items, Language.Get("herocard42"), Language.Get("herocard43"), (bool isOk) =>
-            {
-                if (isOk)
-                {
-                    if (UIHelper.GetMoneyCnt(HeroUIManager.Instance.payBackMoneyType) < payBackMoney)
-                    {
-                        ItemTipUtility.ShowMoneyTip(HeroUIManager.Instance.payBackMoneyType);
-                        return;
-                    }
-                    //鍙戝寘
-                    SendReborn(hero.itemHero.gridIndex);
-                }
-            }, info2, "", payBackMoney, HeroUIManager.Instance.payBackMoneyType);
-
-        }
-
-    }
-
-    void SendReborn(int index)
-    {
-        var pack = new CB239_tagCSHeroRebirth();
-        pack.ItemIndex = (ushort)index;
-        GameNetSystem.Instance.SendInfo(pack);
-
-        HeroUIManager.Instance.lastFightPower = new KeyValuePair<string, long>(hero.itemHero.guid, hero.CalculatePower(false));
-
-    }
 
     void DeleteHero()
     {
@@ -326,7 +393,7 @@
         //     SysNotifyMgr.Instance.ShowTip("UnlockHero");
         //     return;
         // }
-
+        HeroUIManager.Instance.jumpDeleteHeroGuid = guid;
         UIManager.Instance.OpenWindow<HeroDeleteWin>();
     }
 
@@ -356,6 +423,7 @@
     {
         RefreshStars();
         nameText.text = hero.breakLevel == 0 ? hero.heroConfig.Name : Language.Get("herocardbreaklv", hero.heroConfig.Name, hero.breakLevel);
+
         nameText.color = UIHelper.GetUIColorByFunc(hero.Quality);
 
         if (hero.Quality >= 4)
@@ -405,7 +473,7 @@
         inheritAttrText[2].text = PlayerPropertyConfig.GetFullDescription(new Int2(PlayerPropertyConfig.inheritAttrs[2], hero.heroConfig.HPInheritPer));
 
         //涓婇樀灞炴��
-        int valuePer = hero.GetOnBattleAddPer();
+        int valuePer = hero.GetAddPer();
         for (int i = 0; i < heroAddAttrPerText.Length; i++)
         {
             heroAddAttrPerText[i].text = PlayerPropertyConfig.GetFullDescription(new Int2(PlayerPropertyConfig.basePerAttrs[i], valuePer));
@@ -417,32 +485,30 @@
         if (!HeroUIManager.Instance.IsLVMax(hero))
         {
             lvupBtnText.text = Language.Get("L1109");
-            lvupBtn.interactable = true;
-            lvupBtn.SetColorful(null, true);
-            lvupMoneyIcon.SetActive(true);
+            lvupMoneyText.SetActive(true);
 
-            if (HeroUIManager.Instance.IsLVMaxByBreakLevel(hero))
+            // if (HeroUIManager.Instance.IsLVMaxByBreakLevel(hero))
+            // {
+            //     lvupBtnText.text = Language.Get("L1111");
+            //     var breakConfig = HeroQualityBreakConfig.GetQualityBreakConfig(hero.Quality, hero.breakLevel);
+            //     lvupMoneyIcon.SetOrgSprite(ItemConfig.Get(breakConfig.UPCostItemList[0][0]).IconKey);
+            //     lvupMoneyText.text = UIHelper.ShowUseItem(PackType.Item, breakConfig.UPCostItemList[0][0], breakConfig.UPCostItemList[0][1]);
+            // }
+            // else
             {
-                lvupBtnText.text = Language.Get("L1111");
-                var breakConfig = HeroQualityBreakConfig.GetQualityBreakConfig(hero.Quality, hero.breakLevel);
-                lvupMoneyIcon.SetOrgSprite(ItemConfig.Get(breakConfig.UPCostItem[0]).IconKey);
-                lvupMoneyText.text = UIHelper.ShowUseItem(PackType.Item, breakConfig.UPCostItem[0], breakConfig.UPCostItem[1], TextColType.NavyBrown);
-            }
-            else
-            {
-                lvupBtnText.text = Language.Get("L1109");
+                // lvupBtnText.text = Language.Get("L1109");
                 var lvupConfig = HeroQualityLVConfig.GetQualityLVConfig(hero.Quality, hero.heroLevel);
                 lvupMoneyIcon.SetOrgSprite(ItemConfig.Get(lvupConfig.UPCostItem[0]).IconKey);
-                lvupMoneyText.text = UIHelper.ShowUseItem(PackType.Item, lvupConfig.UPCostItem[0], lvupConfig.UPCostItem[1], TextColType.NavyBrown);
+                lvupMoneyText.text = UIHelper.ShowUseItem(PackType.Item, lvupConfig.UPCostItem[0], lvupConfig.UPCostItem[1]);
             }
+            lvupBtn.SetInteractable(true);
 
         }
         else
         {
             lvupBtnText.text = Language.Get("L1110");
-            lvupBtn.interactable = false;
-            lvupBtn.SetColorful(null, false);
-            lvupMoneyIcon.SetActive(false);
+            lvupBtn.SetInteractable(false);
+            lvupMoneyText.SetActive(false);
 
         }
     }
@@ -451,16 +517,16 @@
     {
         int itemID = 0;
         long needCount = 0;
-        if (HeroUIManager.Instance.IsLVMaxByBreakLevel(hero))
-        {
-            //绐佺牬
-            if (!UIManager.Instance.IsOpened<HeroLVBreakWin>())
-            {
-                HeroUIManager.Instance.selectHeroGuid = guid;
-                UIManager.Instance.OpenWindow<HeroLVBreakWin>();
-            }
-        }
-        else
+        // if (HeroUIManager.Instance.IsLVMaxByBreakLevel(hero))
+        // {
+        //     //绐佺牬
+        //     if (!UIManager.Instance.IsOpened<HeroLVBreakWin>())
+        //     {
+        //         HeroUIManager.Instance.selectHeroGuid = guid;
+        //         UIManager.Instance.OpenWindow<HeroLVBreakWin>();
+        //     }
+        // }
+        // else
         {
             //鍗囩骇
             var lvupConfig = HeroQualityLVConfig.GetQualityLVConfig(hero.Quality, hero.heroLevel);
@@ -473,21 +539,38 @@
                 GameNetSystem.Instance.SendInfo(pack);
                 //棰勬樉绀�
                 lvupEffect.Play();
-                addPerObject.SetActive(true);
-                for (int i = 0; i < addPerText.Length; i++)
+                var cell = RequestCell();
+                cell.transform.localPosition = new Vector3(0, 0, 0);
+                cell.Display(hero, () =>
                 {
-                    addPerText[i].text = "+" + PlayerPropertyConfig.GetValueDescription(PlayerPropertyConfig.basePerAttrs[i], hero.qualityConfig.LVAddPer);
-                }
-                addPerObject.Play(() =>
-                {
-                    addPerObject.SetActive(false);
+                    cell.SetActive(false);
+                    ReturnCell(cell);
                 });
-                HeroUIManager.Instance.lastFightPower = new KeyValuePair<string, long>(hero.itemHero.guid, hero.CalculatePower(false));
+
+                HeroUIManager.Instance.lastFightPower = new KeyValuePair<string, long>(hero.itemHero.guid, hero.CalculateFightPower(false));
             }
 
         }
 
     }
+
+
+    HeroTrainAddAttrCell RequestCell()
+    {
+
+        if (lvupAttrQueue.Count == 0)
+        {
+            return Instantiate(addPerObject, addPerParent);
+        }
+        return lvupAttrQueue.Dequeue();
+    }
+
+
+    void ReturnCell(HeroTrainAddAttrCell cell)
+    {
+        lvupAttrQueue.Enqueue(cell);
+    }
+
 
     void RefreshAllPotential()
     {
@@ -498,7 +581,6 @@
 
         list.Sort();
 
-        string allAttrStr = string.Empty;
         for (int i = 0; i < list.Count; i++)
         {
             var nextQualityBreakConfig = HeroBreakConfig.GetHeroBreakConfig(hero.heroId, i + 1);
@@ -510,7 +592,8 @@
                 if (nextQualityBreakConfig.AttrIDList[j] == 0)
                     continue;
                 string format = i < hero.breakLevel ? "{0}" + UIHelper.AppendColor(TextColType.Green, "+{1}") : "{0}+{1}";
-                attrStrArr.Add(PlayerPropertyConfig.GetFullDescription(nextQualityBreakConfig.AttrIDList[j], nextQualityBreakConfig.AttrValueList[j], format));
+                attrStrArr.Add((string.IsNullOrEmpty(nextQualityBreakConfig.SkillIName) ? string.Empty : Language.Get("L1039", nextQualityBreakConfig.SkillIName)) +
+                PlayerPropertyConfig.GetFullDescription(nextQualityBreakConfig.AttrIDList[j], nextQualityBreakConfig.AttrValueList[j], format));
             }
 
             if (nextQualityBreakConfig.SkillID != 0)
@@ -518,33 +601,46 @@
                 var skill = SkillConfig.Get(nextQualityBreakConfig.SkillID);
                 if (skill != null)
                 {
-                    attrStrArr.Add(skill.Description);
+                    attrStrArr.Add(Language.Get("L1039", skill.SkillName) + skill.Description);
                 }
                 else
                 {
                     Debug.LogError("鏈厤缃妧鑳�" + nextQualityBreakConfig.SkillID);
                 }
             }
-
-
+            if (i >= potentialCellList.Count)
+            {
+                potentialCellList.Add(Instantiate(potentialCell, potentialCellParent));
+            }
+            var go = potentialCellList[i];
+            var descText = go.GetComponent<Text>();
+            var nameText = go.GetComponent<Text>("skillname");
+            go.SetActive(true);
             if (i < hero.breakLevel)
             {
-                allAttrStr += Language.Get("herocard63", i + 1, string.Join(Language.Get("L1112"), attrStrArr)) + "\n";
+                nameText.text = Language.Get("herocard63", i + 1);
+                descText.text = string.Join("\n", attrStrArr);
             }
             else
             {
                 //缃伆
-                allAttrStr += UIHelper.AppendColor(TextColType.NavyGray, Language.Get("herocard63", i + 1, string.Join(Language.Get("L1112"), attrStrArr))) + "\n";
+                nameText.text = UIHelper.AppendColor(TextColType.NavyGray, Language.Get("herocard63", i + 1));
+                descText.text = UIHelper.AppendColor(TextColType.NavyGray, UIHelper.RemoveColor(string.Join("\n", attrStrArr)));
             }
         }
-
-        allPotentialText.text = allAttrStr.Trim();
 
     }
 
     //缇佺粖
     void RefreshFetter()
     {
+        if (hero.heroConfig.FetterIDList.Length == 0)
+        {
+            fetterGo.SetActive(false);
+            return;
+        }
+        fetterGo.SetActive(true);
+
         for (int i = 0; i < fetterText.Length; i++)
         {
             if (i < hero.heroConfig.FetterIDList.Length)
@@ -570,9 +666,9 @@
                     attrStr += Language.Get("L1112") + PlayerPropertyConfig.GetFullDescription(fetterConfig.AttrIDList[j], fetterConfig.AttrValueList[j], format);
                 }
                 fetterText[i].text = attrStr;
-                fetterText[i].color = UIHelper.GetUIColor(isAllCollect ? TextColType.NavyBrown : TextColType.Gray);
+                fetterText[i].color = UIHelper.GetUIColor(isAllCollect ? TextColType.NavyBrown : TextColType.NavyGray);
                 fetterNameText[i].text = fetterConfig.FetterName;
-                fetterNameText[i].color = UIHelper.GetUIColor(isAllCollect ? TextColType.NavyBrown : TextColType.Gray);
+                fetterNameText[i].color = UIHelper.GetUIColor(isAllCollect ? TextColType.NavyBrown : TextColType.NavyGray);
 
             }
             else
@@ -584,97 +680,244 @@
 
     void RefreshGift()
     {
-        RefreshGiftCell();
+        HeroUIManager.Instance.RefreshGiftCell(giftBaseCells, hero);
 
-        if (hero.GetTotalStarCount() >= hero.GetMaxStarCount())
+        if (hero.heroStar >= HeroUIManager.Instance.GetMaxStarCount(hero.heroId, hero.Quality))
         {
-            starUPBtn.interactable = false;
-            starUPBtn.SetColorful(null, false);
             starUPBtnText.text = Language.Get("HeroGift7");
-        }
-        else if (hero.IsFullStar())
-        {
-            starUPBtn.interactable = true;
-            starUPBtn.SetColorful(null, false);
-            starUPBtnText.text = Language.Get("HeroGift3");
+            starUPBtn.SetInteractable(false);
         }
         else
         {
-            starUPBtn.interactable = true;
-            starUPBtn.SetColorful(null, true);
             starUPBtnText.text = Language.Get("HeroGift3");
+            starUPBtn.SetInteractable(true);
         }
+
     }
 
-    void RefreshGiftCell()
-    {
-        //浼犺浠ヤ笅鍙湁4涓�
-        int showCount = hero.Quality < 4 ? HeroUIManager.normalGiftMaxCnt : HeroUIManager.giftMaxCnt;
-        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];
-                giftBaseCells[i].Init(giftID, giftLV, () =>
-                {
-                    var giftConfig = HeroTalentConfig.Get(giftID);
-                    SmallTipWin.showText = Language.Get("SmallTipFomat", giftConfig.Name + " " + Language.Get("L1113", giftLV),
-                    Language.Get("HeroGift5", PlayerPropertyConfig.Get(giftConfig.AttrID).Name, PlayerPropertyConfig.GetValueDescription(giftConfig.AttrID, giftConfig.AttrValue)));
-                    SmallTipWin.worldPos = CameraManager.uiCamera.ScreenToWorldPoint(Input.mousePosition);
-                    UIManager.Instance.OpenWindow<SmallTipWin>();
-                });
-            }
-            else
-            {
-                if (i < HeroUIManager.normalGiftMaxCnt)
-                {
-                    giftBaseCells[i].Init(0, 0, () =>
-                    {
-                        SmallTipWin.showText = Language.Get("HeroGift1");
-                        SmallTipWin.worldPos = CameraManager.uiCamera.ScreenToWorldPoint(Input.mousePosition);
-                        UIManager.Instance.OpenWindow<SmallTipWin>();
-                    });
-                }
-                else
-                {
-                    int index = i;
-                    giftBaseCells[i].Init(-1, 0, () =>
-                    {
-                        SmallTipWin.showText = Language.Get("HeroGift2", HeroAwakeConfig.GetAwakeLVByUnLockGiftIndex(hero.heroId, index));
-                        SmallTipWin.worldPos = CameraManager.uiCamera.ScreenToWorldPoint(Input.mousePosition);
-                        UIManager.Instance.OpenWindow<SmallTipWin>();
-                    });
-                }
-            }
-
-        }
-    }
 
     void StarUP()
-    { 
-        if (hero.GetTotalStarCount() >= hero.GetMaxStarCount())
+    {
+        if (hero.heroStar >= HeroUIManager.Instance.GetMaxStarCount(hero.heroId, hero.Quality))
         {
             return;
         }
         else if (hero.IsFullStar())
         {
-            starUPBtn.interactable = true;
-            starUPBtn.SetColorful(null, false);
-            starUPBtnText.text = Language.Get("HeroGift3");
+            SysNotifyMgr.Instance.ShowTip("HeroGift1");
+            return;
+        }
+
+        HeroUIManager.Instance.selectHeroGuidForGiftFunc = hero.itemHero.guid;
+        UIManager.Instance.OpenWindow<HeroGiftEatWin>();
+    }
+
+    void Wash()
+    {
+        if (hero.heroStar < HeroUIManager.Instance.canWashStarLevel)
+        {
+            SysNotifyMgr.Instance.ShowTip("HeroGift2", HeroUIManager.Instance.canWashStarLevel);
+            return;
+        }
+
+        HeroUIManager.Instance.selectWashHeroGUID = hero.itemHero.guid;
+        UIManager.Instance.OpenWindow<HeroGiftWashWin>();
+
+    }
+
+
+    void RefreshAwake()
+    {
+        if (!HeroAwakeConfig.CanAwake(hero.heroId, 1))
+        {
+            awakeGo.SetActive(false);
+            return;
+        }
+        awakeGo.SetActive(true);
+
+        var maxLV = HeroAwakeConfig.GetMaxAwakeLV(hero.heroId);
+        var starCnt = HeroQualityConfig.Get(hero.Quality).InitStarUpper;
+        for (int i = 1; i <= maxLV; i++)
+        {
+            if (i > awakeCellList.Count)
+            {
+                awakeCellList.Add(Instantiate(potentialCell, awakeCellParent));
+            }
+            var go = awakeCellList[i - 1];
+            var descText = go.GetComponent<Text>();
+            var nameText = go.GetComponent<Text>("skillname");
+            go.SetActive(true);
+
+            var config = HeroAwakeConfig.GetHeroAwakeConfig(hero.heroId, i);
+
+            int type = config.UnlockTalentSlot != 0 ? 1 : config.SkillID != 0 ? 2 : 3;
+            var awakeStr = string.Empty;
+            if (type == 1)
+            {
+                starCnt += config.AddStarUpper;
+                awakeStr = Language.Get("HeroAwake8", config.UnlockTalentSlot, starCnt);
+            }
+            else if (type == 2)
+            {
+                var skill = SkillConfig.Get(config.SkillID);
+                if (skill != null)
+                {
+                    awakeStr = Language.Get("L1039", skill.SkillName) + skill.Description;
+                }
+                else
+                {
+                    Debug.LogError($"heroId:{hero.heroId} 瑙夐啋鎶�鑳絀D:{config.SkillID} 閰嶇疆閿欒鎶�鑳戒笉瀛樺湪");
+                }
+            }
+            else
+            {
+                for (int k = 0; k < config.AttrIDList.Length; k++)
+                {
+                    awakeStr += (string.IsNullOrEmpty(config.SkillIName) ? string.Empty : Language.Get("L1039", config.SkillIName)) +
+                    PlayerPropertyConfig.GetFullDescription(config.AttrIDList[k], config.AttrValueList[k], "{0}+" + UIHelper.AppendColor(TextColType.Green, "{1}"))
+                    + (k == config.AttrIDList.Length - 1 ? "" : "\n");
+                }
+            }
+
+            if (i - 1 < hero.awakeLevel)
+            {
+                nameText.text = Language.Get("herocard12", i) + Language.Get("L1096");
+                descText.text = awakeStr;
+            }
+            else
+            {
+                //缃伆
+                nameText.text = UIHelper.AppendColor(TextColType.NavyGray, Language.Get("herocard12", i) + Language.Get("L1096"));
+                descText.text = UIHelper.AppendColor(TextColType.NavyGray, UIHelper.RemoveColor(awakeStr));
+            }
+        }
+    }
+
+    void TeamPosChangeEvent(TeamType teamType)
+    {
+        if (teamType != TeamType.Story)
+            return;
+        fightPowerText.text = UIHelper.ReplaceLargeArtNum(hero.CalculateFightPower());
+    }
+
+    void RefreshFreeze()
+    {
+        //鑷冲皯闇�瑕佽閱掑埌澶氬皯绾�
+        int needAwakeLV = HeroUIManager.Instance.GetAwakeLVByStarLV(hero.heroId, hero.heroStarMaxBefore);
+        if (hero.awakeLevel < needAwakeLV)
+        {
+            freezeTipBtn.SetActive(true);
+            //鏄熺骇
+            for (int i = 0; i < starImgFreezeList.Count; i++)
+            {
+                if ((hero.heroStarMaxBefore - 1) % starImgFreezeList.Count >= i)
+                {
+                    starImgFreezeList[i].SetActive(true);
+                    starImgFreezeList[i].SetSprite("herostar" + (((hero.heroStarMaxBefore - 1) / starImgFreezeList.Count) + 1) * starImgFreezeList.Count);
+                }
+                else
+                {
+                    starImgFreezeList[i].SetActive(false);
+                }
+            }
+            freezeStarText.text = Language.Get("HeroAwake16", hero.heroStarMaxBefore);
+            freezeAawkeLVText.text = Language.Get("HeroAwake17", needAwakeLV);
+
         }
         else
         {
-            starUPBtn.interactable = true;
-            starUPBtn.SetColorful(null, true);
-            starUPBtnText.text = Language.Get("HeroGift3");
+            freezeTipBtn.SetActive(false);
+        }
+
+        freezeTipGo.SetActive(false);
+    }
+
+    void RefreshRedImg()
+    {
+        redpointAwake.SetActive(false);
+        redpointGift.SetActive(false);
+        redpointLVUP.SetActive(false);
+        trainMainRedImg.SetActive(false);
+        breakMainRedImg.SetActive(false);
+        redpointBreakLVUP.SetActive(false);
+
+
+        var heroCnt = PackManager.Instance.GetItemCountByID(PackType.Hero, hero.heroId);
+        var itemPack = PackManager.Instance.GetSinglePack(PackType.Item);
+
+
+        if (heroCnt > 1 && hero.heroStar < hero.GetCurMaxStar())
+        {
+            redpointGift.SetActive(true);
+            trainMainRedImg.SetActive(true);
+        }
+
+
+
+        if (!HeroUIManager.Instance.IsLVMax(hero))
+        {
+            var lvupConfig = HeroQualityLVConfig.GetQualityLVConfig(hero.Quality, hero.heroLevel);
+            if (itemPack.GetCountById(lvupConfig.UPCostItem[0]) >= lvupConfig.UPCostItem[1])
+            {
+                redpointLVUP.SetActive(true);
+                trainMainRedImg.SetActive(true);
+            }
+        }
+
+
+        if (!hero.IsInTeamByTeamType(TeamType.Story))
+        {
+            return;
+        }
+
+
+        //5鏄熷悗鎵嶈兘瑙夐啋
+        if (hero.heroStar >= HeroUIManager.Instance.starLevelCanAwake && FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.HeroAwake))
+        {
+            //鍒ゆ柇瑙夐啋鏉愭枡鏄惁瓒冲
+            var maxAwakeLV = HeroAwakeConfig.GetMaxAwakeLV(hero.heroId);
+            if (hero.awakeLevel < maxAwakeLV)
+            {
+                var config = HeroQualityAwakeConfig.GetQualityAwakeConfig(hero.Quality, hero.awakeLevel);
+                if (itemPack.GetCountById(config.UPCostItem[0]) >= config.UPCostItem[1])
+                {
+                    redpointAwake.SetActive(true);
+                    trainMainRedImg.SetActive(true);
+                }
+            }
+        }
+
+        if (HeroUIManager.Instance.IsCanBreak(hero))
+        {
+            redpointBreakLVUP.SetActive(true);
+            breakMainRedImg.SetActive(true);
+        }
+
+    }
+    
+    #region 绐佺牬鍔熻兘
+
+    void DisplayTrainOrBreak(HeroInfo hero)
+    {
+        //heroLVBreakCell;   //瀵瑰簲鍩瑰吇鐨� allAttrScroll  鍜� attrBtn
+        if (functionOrder == 0)
+        {
+            heroLVBreakCell.SetActive(false);
+            allAttrScroll.SetActive(true);
+            attrBtn.SetActive(true);
+            trainMainButton.SelectBtn();
+        }
+        else
+        {
+            heroLVBreakCell.SetActive(true);
+            allAttrScroll.SetActive(false);
+            attrBtn.SetActive(false);
+
+            heroLVBreakCell.Display(hero);
+            breakMainButton.SelectBtn();
         }
     }
+
+    #endregion
 }
\ No newline at end of file

--
Gitblit v1.8.0