lcy
2025-11-05 3b2a6bb9047cfce9f501593b3669a9c1af6c5df4
Main/System/HeroUI/HeroTrainWin.cs
@@ -1,5 +1,6 @@
using System.Collections.Generic;
using System.Linq;
using Cysharp.Threading.Tasks;
using UnityEngine;
using UnityEngine.UI;
@@ -54,8 +55,8 @@
    [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;
@@ -93,6 +94,9 @@
    [SerializeField] Image redpointGift;
    [SerializeField] Image redpointLVUP;
    Queue<HeroTrainAddAttrCell> lvupAttrQueue = new Queue<HeroTrainAddAttrCell>();
    string guid;
    HeroInfo hero;
@@ -126,6 +130,10 @@
        deleteBtn.AddListener(DeleteHero);
        awakeBtn.AddListener(() =>
        {
            if (!FuncOpen.Instance.IsFuncOpen(38, true))
            {
                return;
            }
            HeroUIManager.Instance.selectAwakeHeroGuid = guid;
            UIManager.Instance.OpenWindow<HeroAwakeWin>();
        });
@@ -193,6 +201,7 @@
        Display();
    }
    protected override void OnPreClose()
    {
        PackManager.Instance.RefreshItemLockEvent -= RefreshItemLockEvent;
@@ -218,11 +227,11 @@
    {
        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());
        fightPowerText.text = UIHelper.ReplaceLargeArtNum(hero.CalculateFightPower());
        PlayerMainDate.Instance.AddPowerNotOnTeam(hero);
        lockImg.SetActive(hero.isLock);
        unLockImg.SetActive(!hero.isLock);
@@ -250,7 +259,30 @@
        RefreshRedImg();
        HeroUIManager.Instance.RemoveNewHero(hero.heroId);
        ForceRefreshLayout();
    }
    /// <summary>
    /// 强制刷新Layout,解决嵌套Layout和ContentSizeFitter的重叠问题
    /// </summary>
    async UniTask ForceRefreshLayout()
    {
        await UniTask.DelayFrame(2);
        // 刷新所有Layout组件
        var layouts = allAttrScroll.GetComponentsInChildren<LayoutGroup>(true);
        foreach (var layout in layouts)
        {
            LayoutRebuilder.ForceRebuildLayoutImmediate(layout.GetComponent<RectTransform>());
        }
        await UniTask.DelayFrame(2);
        // 刷新所有Layout组件
        foreach (var layout in layouts)
        {
            LayoutRebuilder.ForceRebuildLayoutImmediate(layout.GetComponent<RectTransform>());
        }
    }
    void RefreshItemLockEvent(PackType type, string guid, bool lockState)
    {
@@ -410,14 +442,14 @@
                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);
                lvupMoneyText.text = UIHelper.ShowUseItem(PackType.Item, breakConfig.UPCostItem[0], breakConfig.UPCostItem[1]);
            }
            else
            {
                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);
@@ -426,7 +458,7 @@
        {
            lvupBtnText.text = Language.Get("L1110");
            lvupBtn.SetInteractable(false);
            lvupMoneyIcon.SetActive(false);
            lvupMoneyText.SetActive(false);
        }
    }
@@ -457,21 +489,38 @@
                GameNetSystem.Instance.SendInfo(pack);
                //预显示
                lvupEffect.Play();
                addPerObject.SetActive(true);
                for (int i = 0; i < addPerText.Length; i++)
                {
                    addPerText[i].text = "+" + PlayerPropertyConfig.GetValueDescription(PlayerPropertyConfig.basePerAttrs[i], hero.qualityConfig.LVAddPer);
                }
                addPerObject.Play(() =>
                {
                    addPerObject.SetActive(false);
                var cell = RequestCell();
                cell.transform.localPosition = new Vector3(0, 0, 0);
                cell.Display(hero.qualityConfig.LVAddPer, ()=>
                {
                    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()
    {
@@ -493,7 +542,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)
@@ -501,7 +551,7 @@
                var skill = SkillConfig.Get(nextQualityBreakConfig.SkillID);
                if (skill != null)
                {
                    attrStrArr.Add(Language.Get("equipQualityFormat", skill.SkillName) + skill.Description);
                    attrStrArr.Add(Language.Get("L1039", skill.SkillName) + skill.Description);
                }
                else
                {
@@ -661,13 +711,14 @@
            else if (type == 2)
            {
                var skill = SkillConfig.Get(config.SkillID);
                awakeStr = Language.Get("equipQualityFormat", skill.SkillName) + skill.Description;
                awakeStr = Language.Get("L1039", skill.SkillName) + skill.Description;
            }
            else
            {
                for (int k = 0; k < config.AttrIDList.Length; k++)
                {
                    awakeStr += PlayerPropertyConfig.GetFullDescription(config.AttrIDList[k], config.AttrValueList[k], "{0}+" + UIHelper.AppendColor(TextColType.Green, "{1}"))
                    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");
                }
            }
@@ -690,7 +741,7 @@
    {
        if (teamType != TeamType.Story)
            return;
        fightPowerText.text = UIHelper.ReplaceLargeArtNum(hero.CalculatePower());
        fightPowerText.text = UIHelper.ReplaceLargeArtNum(hero.CalculateFightPower());
    }
    void RefreshFreeze()
@@ -770,6 +821,7 @@
                    redpointLVUP.SetActive(true);
                    return;
                }
                return;
            }
        }