lcy
19 小时以前 68869f5b4b4139958942294522471ff9f9f6c8f9
Main/System/HeroUI/HeroFormationCell.cs
@@ -1,3 +1,4 @@
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.UI;
@@ -12,6 +13,13 @@
    public void Display(int index)
    {
        // 第5个格子为混搭阵型
        if (index == 4)
        {
            DisplayMixedFormation();
            return;
        }
        Int2 result;
        if (HeroUIManager.Instance.isCustonHeroFormation)
        {
@@ -75,5 +83,90 @@
        }
        attrText.text = text;
    }
    void DisplayMixedFormation()
    {
        // 获取当前激活的混搭配置
        HeroLineupHaloConfig activeMixedConfig;
        List<TeamHero> teamHeroes = null;
        if (HeroUIManager.Instance.isCustonHeroFormation)
            teamHeroes = HeroUIManager.Instance.custonTeamHeroes;
        if (teamHeroes != null)
            activeMixedConfig = HeroUIManager.Instance.GetMixedFormationConfig(teamHeroes);
        else
            activeMixedConfig = HeroUIManager.Instance.GetMixedFormationConfig(HeroUIManager.Instance.selectTeamType, true);
        bool hasActive = activeMixedConfig != null;
        activeImg.SetActive(hasActive);
        countryOnImg.SetSprite("heroTeamCountryHe");
        // 激活点显示:使用当前激活配置的阵营颜色
        List<int> participatingCountries = null;
        if (teamHeroes != null)
            participatingCountries = HeroUIManager.Instance.GetParticipatingCountriesByPriority(teamHeroes);
        else
            participatingCountries = HeroUIManager.Instance.GetParticipatingCountriesByPriority(HeroUIManager.Instance.selectTeamType, true);
        if (activeMixedConfig != null && participatingCountries != null && participatingCountries.Count > 0)
        {
            int totalPoints = activeMixedConfig.Countrys * activeMixedConfig.NeedHeroCount;
            for (int i = 0; i < OnCountImgs.Length; i++)
            {
                if (i < totalPoints)
                {
                    int countryIndex = i / activeMixedConfig.NeedHeroCount;
                    OnCountImgs[i].SetActive(true);
                    OnCountImgs[i].SetSprite("heroTeamCountryPoint" + participatingCountries[countryIndex]);
                }
                else
                {
                    OnCountImgs[i].SetActive(false);
                }
            }
        }
        else
        {
            for (int i = 0; i < OnCountImgs.Length; i++)
                OnCountImgs[i].SetActive(false);
        }
        // 获取所有混搭配置并展平,按 Countrys 排序
        var allMixedConfigs = HeroLineupHaloConfig.GetAllMixedConfigs();
        List<HeroLineupHaloConfig> sortedConfigs = new List<HeroLineupHaloConfig>();
        if (allMixedConfigs != null)
        {
            foreach (var kvp in allMixedConfigs)
            {
                foreach (var innerKvp in kvp.Value)
                {
                    sortedConfigs.Add(innerKvp.Value);
                }
            }
            sortedConfigs.Sort((a, b) =>
            {
                if (a.Countrys != b.Countrys) return a.Countrys.CompareTo(b.Countrys);
                return a.NeedHeroCount.CompareTo(b.NeedHeroCount);
            });
        }
        // 属性文本:遍历所有混搭配置,激活的高亮,未激活的灰色
        string text = string.Empty;
        for (int k = 0; k < sortedConfigs.Count; k++)
        {
            var config = sortedConfigs[k];
            bool isActive = activeMixedConfig != null && activeMixedConfig.Id == config.Id;
            string lineText = (k == 0 ? "" : "</r>") + Language.Get("herocard74", config.Countrys, config.NeedHeroCount);
            for (int i = 0; i < config.AttrIDList.Length; i++)
            {
                string format = !isActive ? "{0}+{1}" : "{0}+" + UIHelper.AppendColor(TextColType.Green, "{1}");
                lineText += " " + PlayerPropertyConfig.GetFullDescription(config.AttrIDList[i], config.AttrValueList[i], format);
            }
            text += UIHelper.AppendColor(isActive ? TextColType.NavyBrown : TextColType.Gray, lineText);
        }
        attrText.text = text;
    }
}