using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class HeroFatesCell : MonoBehaviour { [SerializeField] ImageEx imgBG; [SerializeField] TextEx txtFateName; [SerializeField] OutlineEx outlineFateName; [SerializeField] TextEx txtFateLV; [SerializeField] TextEx txtFateNeedHeroHasCnt; [SerializeField] TextEx txtHasHeroTotalStar; [SerializeField] ItemCell itemCell; [SerializeField] ButtonEx btnHave; [SerializeField] ImageEx imgHave; [SerializeField] Image imgHaveRed; [SerializeField] ButtonEx btnUpgrade; [SerializeField] TextEx txtUpgrade; [SerializeField] ImageEx imgUpgrade; [SerializeField] Image imgUpgradeRed; [SerializeField] HorizontalLayoutGroup horizontalLayoutGroup; [SerializeField] List heroFatesIHItems; int[] spacingArr = new int[5] { 150, 150, 99, 68, 37 }; [SerializeField] Transform transAttr; [SerializeField] List attrs; [SerializeField] Transform transItems; [SerializeField] List items; HeroFatesManager manager { get { return HeroFatesManager.Instance; } } public void Display(int index, List showList) { if (showList.IsNullOrEmpty() || index >= showList.Count || index < 0) { return; } int fatesId = showList[index]; if (!manager.TryGetHeroFatesConfig(fatesId, out HeroFatesConfig config) || config.HeroIDList.IsNullOrEmpty()) { return; } HeroFatesState state = manager.GetHeroFatesState(fatesId); bool isNoActive = state == HeroFatesState.Locked || state == HeroFatesState.Activatable; txtFateLV.SetActive(!isNoActive); txtFateNeedHeroHasCnt.SetActive(isNoActive); txtHasHeroTotalStar.SetActive(state == HeroFatesState.ActiveNotUpgradable || state == HeroFatesState.ActiveUpgradable); btnHave.SetActive(isNoActive); btnHave.interactable = state == HeroFatesState.Activatable; imgHave.gray = state == HeroFatesState.Locked; imgHaveRed.SetActive(state == HeroFatesState.Activatable); btnUpgrade.SetActive(!isNoActive); btnUpgrade.interactable = state != HeroFatesState.MaxLevel; imgUpgrade.gray = state == HeroFatesState.MaxLevel; txtUpgrade.text = Language.Get(state == HeroFatesState.MaxLevel ? "L1110" : "L1109"); imgUpgradeRed.SetActive(state == HeroFatesState.ActiveUpgradable); imgBG.SetSprite(manager.GetCellBgByFatesQuality(config.BGQuality)); int needHeroHasCnt = manager.GetFateNeedHeroHasCnt(fatesId); int needHeroCnt = config.HeroIDList.Length; txtFateNeedHeroHasCnt.text = Language.Get("BoneField09", needHeroHasCnt, needHeroCnt); bool hasNowLVAndNextLVConfig = manager.TryGetNowLVAndNextLVConfig(fatesId, out int nowLv, out HeroFatesQualityLVConfig nowLVConfig, out HeroFatesQualityLVConfig nextLVConfig); if (hasNowLVAndNextLVConfig) { int fatesNowStarCnt = manager.GetFatesNowStarCnt(fatesId); int nextNeedStarCnt = nextLVConfig.NeedStarTotal; txtHasHeroTotalStar.text = StringUtility.Concat(Language.Get("HeroFates05"), UIHelper.AppendColor(nextNeedStarCnt <= fatesNowStarCnt ? TextColType.LightGreen : TextColType.Red, Language.Get("HeroFates11", fatesNowStarCnt, nextNeedStarCnt))); } txtFateName.text = config.FatesName; txtFateName.color = UIHelper.GetUIColorByFunc(config.BGQuality); outlineFateName.OutlineColor = UIHelper.GetUIOutlineColor(config.BGQuality); DisplayLH(config); transAttr.SetActive(!isNoActive); DisplayAttrs(fatesId); transItems.SetActive(!config.AwardItemList.IsNullOrEmpty() && isNoActive); DisplayAwardItems(config); bool hasInfo = manager.TryGetHeroFates(fatesId, out HeroFates info); txtFateLV.text = Language.Get("L1113", hasInfo ? info.FatesLV : 0); btnHave.SetListener(() => manager.SendHeroFates(fatesId, 0)); btnUpgrade.SetListener(() => { if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.HeroFatesUpgrade, true)) return; manager.chooseHeroFatesId = fatesId; UIManager.Instance.OpenWindow(); }); } void DisplayLH(HeroFatesConfig config) { if (manager.TryGetNowMaxStarHeroDict(out Dictionary nowMaxStarHeroDict) || !nowMaxStarHeroDict.IsNullOrEmpty()) { for (int i = 0; i < heroFatesIHItems.Count; i++) { if (i < config.HeroIDList.Length) { int heroID = config.HeroIDList[i]; heroFatesIHItems[i].SetActive(true); heroFatesIHItems[i].Display(config.HeroIDList, i, nowMaxStarHeroDict); } else { heroFatesIHItems[i].SetActive(false); } } int index = Mathf.Max(config.HeroIDList.Length - 1, 0); if (index >= spacingArr.Length) { index = spacingArr.Length - 1; } int spacing = spacingArr[index]; horizontalLayoutGroup.spacing = spacing; } } void DisplayAttrs(int fatesId) { if (attrs.IsNullOrEmpty()) return; bool hasConfig = manager.TryGetAttrIDListAndLVAttrValueList(fatesId, out int[] attrIDList, out int[] lvAttrValueList); if (!hasConfig) return; for (int i = 0; i < attrs.Count; i++) { if (i < attrIDList.Length) { int attrID = attrIDList[i]; int attrValue = manager.GetNowAttrValue(fatesId, i); attrs[i].text = PlayerPropertyConfig.GetFullDescription(attrID, attrValue); attrs[i].SetActive(true); } else { attrs[i].SetActive(false); } } } void DisplayAwardItems(HeroFatesConfig config) { if (items.IsNullOrEmpty() || config.AwardItemList.IsNullOrEmpty()) return; for (int i = 0; i < items.Count; i++) { if (i < config.AwardItemList.Length) { int itemID = config.AwardItemList[i][0]; int count = config.AwardItemList[i][1]; items[i].Init(new ItemCellModel(itemID, false, count)); items[i].button.SetListener(() => ItemTipUtility.Show(itemID)); items[i].SetActive(true); } else { items[i].SetActive(false); } } } }