using System.Collections.Generic; using System.Linq; using UnityEngine; using UnityEngine.UI; //阵型 public class HeroFormationCell : CellView { [SerializeField] Image activeImg; [SerializeField] Image countryOnImg; //上阵阵型激活国家 [SerializeField] Image[] OnCountImgs; //上阵数量激活 [SerializeField] RichText attrText; public void Display(int index) { // 第5个格子为混搭阵型 if (index == 4) { DisplayMixedFormation(); return; } Int2 result; if (HeroUIManager.Instance.isCustonHeroFormation) { result = HeroUIManager.Instance.GetMaxCountHeroCountry(HeroUIManager.Instance.custonTeamHeroes);; } else { result = HeroUIManager.Instance.GetMaxCountHeroCountry(HeroUIManager.Instance.selectTeamType, true); } var config = HeroLineupHaloConfig.GetConfig(result.x, result.y); bool sameCountry = result.x == (index + 1); activeImg.SetActive(config != null && sameCountry); countryOnImg.SetSprite("heroTeamCountry" + (index + 1)); if (config == null || !sameCountry) { for (int i = 0; i < OnCountImgs.Length; i++) { OnCountImgs[i].SetActive(false); } } else { for (int i = 0; i < OnCountImgs.Length; i++) { if (i < result.y) { OnCountImgs[i].SetActive(true); OnCountImgs[i].SetSprite("heroTeamCountryPoint" + result.x); } else { OnCountImgs[i].SetActive(false); } } } var attrDict = HeroLineupHaloConfig.GetAttrsByCountry(index + 1); var countList = attrDict.Keys.ToList(); countList.Sort(); string text = string.Empty; for (int k = 0; k < countList.Count; k++) { int count = countList[k]; string lineText = string.Empty; bool isActive = sameCountry && count <= result.y; string countStr = isActive ? UIHelper.AppendColor(TextColType.Green, count.ToString()) : count.ToString(); lineText = (k == 0 ? "" : "") + Language.Get("herocard37", countStr, HeroUIManager.Instance.GetCountryName(index + 1)); var attrConfig = attrDict[count]; for (int i = 0; i < attrConfig.AttrIDList.Length; i++) { string format = !isActive ? "{0}+{1}" : "{0}+" + UIHelper.AppendColor(TextColType.Green, "{1}"); lineText += " " + PlayerPropertyConfig.GetFullDescription(attrConfig.AttrIDList[i], attrConfig.AttrValueList[i], format); } text += UIHelper.AppendColor(isActive ? TextColType.NavyBrown : TextColType.Gray, lineText); } attrText.text = text; } void DisplayMixedFormation() { // 获取当前激活的混搭配置 HeroLineupHaloConfig activeMixedConfig; List 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 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 sortedConfigs = new List(); if (allMixedConfigs != null) { foreach (var kvp in allMixedConfigs) { foreach (var innerKvp in kvp.Value) { sortedConfigs.Add(innerKvp.Value); } } sortedConfigs.Sort((a, b) => a.Id.CompareTo(b.Id)); } // 属性文本:遍历所有混搭配置,激活的高亮,未激活的灰色 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 ? "" : "") + 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; } }