using Cysharp.Threading.Tasks; using UnityEngine; using UnityEngine.UI; using System.Collections.Generic; public class HeroCollectionCardCell : MonoBehaviour { [SerializeField] Button heroCardBtn; [SerializeField] Image heroCardBG; [SerializeField] UIHeroController heroModel; [SerializeField] List starImgList; [SerializeField] Image countryImg; [SerializeField] Image jobImg; [SerializeField] Text nameText; [SerializeField] Image trainStateImg; [SerializeField] RedpointBehaviour redpoint; // [SerializeField] Button bookLVBtn; [SerializeField] GameObject unGetObj; [SerializeField] GameObject activeObj; // 可激活带流光效果材质 [SerializeField] GameObject actLimitObj; // 活动限定 private int displayVersion; public void Display(int index, int quality) { displayVersion++; int version = displayVersion; var heroID = HeroUIManager.Instance.heroCollectDict[quality][index]; var heroConfig = HeroConfig.Get(heroID); this.gameObject.name = $"herocard_{heroID}"; HB122_tagSCHeroInfo.tagSCHero colData; HeroUIManager.Instance.TryGetHeroBookInfo(heroID, out colData); LoadImageAsync(heroCardBG, "herocardbg" + heroConfig.Quality, version).Forget(); //分为0未获得、1可激活、2常规、3突破升级、4、星升级、5已满级 int funcState = HeroUIManager.Instance.GetHeroBookState(heroID, quality); activeObj.SetActive(funcState == 1); // bookLVBtn.SetActive(funcState > 1); unGetObj.SetActive(funcState == 0); actLimitObj.SetActive(heroConfig.IsActLimit == 1); LoadImageAsync(countryImg, HeroUIManager.Instance.GetCountryIconName(heroConfig.Country), version).Forget(); LoadImageAsync(jobImg, HeroUIManager.Instance.GetJobIconName(heroConfig.Class), version).Forget(); DelayedCreateSpine(heroConfig.SkinIDList[0], heroConfig.UIScale, version).Forget(); redpoint.redpointId = MainRedDot.HeroCardCollectRedpoint * 10000000 + heroID; if (funcState == 3 || funcState == 4) { trainStateImg.SetActive(true); LoadImageAsync(trainStateImg, "herofuncstate4", version).Forget(); } else { trainStateImg.SetActive(false); } nameText.text = heroConfig.Name; for (int i = 0; i < starImgList.Count; i++) { starImgList[i].SetActive(false); } heroCardBtn.AddListener(() => { HeroUIManager.Instance.selectCollectHeroID = heroID; var state = HeroUIManager.Instance.GetHeroBookState(heroID, quality); if (state == 1 || state == 3 || state == 4) { UIManager.Instance.OpenWindowAsync().Forget(); } else { HeroUIManager.Instance.selectForPreviewHeroID = heroID; UIManager.Instance.OpenWindowAsync().Forget(); } }); } private async UniTaskVoid LoadImageAsync(Image image, string iconKey, int version) { var sprite = await UILoader.LoadSpriteAsync(iconKey); if (displayVersion != version) return; if (image != null && sprite != null) image.overrideSprite = sprite; } private async UniTaskVoid DelayedCreateSpine(int skinID, float scale, int version) { await UniTask.NextFrame(); await UniTask.NextFrame(); if (displayVersion != version) return; heroModel.Create(skinID, scale).Forget(); } }