using System.Collections.Generic; using Cysharp.Threading.Tasks; using UnityEngine; using UnityEngine.UI; /// /// 武将洗炼界面 /// public class HeroGiftWashWin : UIBase { [SerializeField] HeroShowBaseCell heroShow; [SerializeField] GameObject currentGo; [SerializeField] GameObject changeGo; [SerializeField] HeroGiftWashCell[] currentGiftCells; [SerializeField] Button washBtn; [SerializeField] Image itemIcon; [SerializeField] Text itemCountText; [SerializeField] GiftBaseCell[] beforeGiftCells; [SerializeField] GiftBaseCell[] afterGiftCells; [SerializeField] Button cancelBtn; [SerializeField] Button saveBtn; HeroInfo hero; protected override void InitComponent() { washBtn.AddListener(WashGift); cancelBtn.AddListener(CancelWash); saveBtn.AddListener(SaveWash); btnClickEmptyCloseEvent = OnCloseWin; } protected override void OnPreOpen() { hero = HeroManager.Instance.GetHero(HeroUIManager.Instance.selectWashHeroGUID); if (hero == null) { return; } HeroManager.Instance.onHeroChangeEvent += OnHeroChangeEvent; HeroUIManager.Instance.changeLockEvent += ChangeLockEvent; Display(); } protected override void OnPreClose() { hero = null; HeroManager.Instance.onHeroChangeEvent -= OnHeroChangeEvent; HeroUIManager.Instance.changeLockEvent -= ChangeLockEvent; } void OnHeroChangeEvent(HeroInfo hero) { if (hero.itemHero.guid != HeroUIManager.Instance.selectWashHeroGUID) { return; } Display(); } public void Display() { heroShow.Init(hero.heroId, hero.SkinID, hero.breakLevel, hero.heroStar, hero.awakeLevel, hero.heroLevel); if (hero.talentRandomIDList.Count == 0) { currentGo.SetActive(true); changeGo.SetActive(false); for (int i = 0; i < currentGiftCells.Length; i++) { if (i < hero.talentIDList.Count) { currentGiftCells[i].SetActive(true); currentGiftCells[i].Display(hero, i); } else { currentGiftCells[i].SetActive(false); } } itemIcon.SetItemSprite(HeroUIManager.Instance.washItemID); int useCount = HeroUIManager.Instance.GetTalentLockUseWashCount(hero); var itemCount = PackManager.Instance.GetItemCountByID(PackType.Item, HeroUIManager.Instance.washItemID); itemCountText.text = UIHelper.AppendColor(itemCount >= useCount ? TextColType.Green : TextColType.Red, UIHelper.ReplaceLargeNum(itemCount) + "/" + useCount); } else { currentGo.SetActive(false); changeGo.SetActive(true); HeroUIManager.Instance.RefreshGiftCell(beforeGiftCells, hero); //当前天赋 ShowChangeGift(hero); //随机未保存的天赋 } } void WashGift() { var hero = HeroManager.Instance.GetHero(HeroUIManager.Instance.selectWashHeroGUID); if (hero == null) { return; } //洗炼和觉醒的天赋未处理不可吞噬 if (hero.talentRandomIDList.Count > 0) { SysNotifyMgr.Instance.ShowTip("HeroGift4"); return; } if (hero.talentAwakeRandomIDList.Count > 0) { SysNotifyMgr.Instance.ShowTip("HeroGift5"); return; } //根据锁状态判断材料是否足够 if (!ItemLogicUtility.CheckItemCount(PackType.Item, HeroUIManager.Instance.washItemID, HeroUIManager.Instance.GetTalentLockUseWashCount(hero), 2)) { return; } for (int i = 0; i < currentGiftCells.Length; i++) { if (i < hero.talentIDList.Count) { currentGiftCells[i].ShowEffect(hero, i); } } closeTime = Time.time; //做特效表现 SendPack().Forget(); } float closeTime; async UniTask SendPack() { //延迟0.5秒发包 await UniTask.Delay(500); var hero = HeroManager.Instance.GetHero(HeroUIManager.Instance.selectWashHeroGUID); if (hero == null) { return; } HeroUIManager.Instance.SendWash(hero, 0); } void ShowChangeGift(HeroInfo hero) { for (int i = 0; i < afterGiftCells.Length; i++) { if (i >= hero.talentRandomIDList.Count) { afterGiftCells[i].SetActive(false); continue; } afterGiftCells[i].SetActive(true); afterGiftCells[i].Init(hero.talentRandomIDList[i], hero.talentLvList[i], 0, hero.heroId, i, hero.awakeLevel); //对比变化的天赋显示特效 if (hero.talentRandomIDList[i] != hero.talentIDList[i]) { afterGiftCells[i].GetComponentInChildren().Play(); } else { afterGiftCells[i].GetComponentInChildren().Stop(); } } } void CancelWash() { //取消洗炼 ConfirmCancel.ToggleConfirmCancelByType(ToggleCheckType.WashCancel, Language.Get("HeroGift20"), () => { var hero = HeroManager.Instance.GetHero(HeroUIManager.Instance.selectWashHeroGUID); if (hero == null) { return; } HeroUIManager.Instance.SendWash(hero, 2); }); } void SaveWash() { var hero = HeroManager.Instance.GetHero(HeroUIManager.Instance.selectWashHeroGUID); if (hero == null) { return; } HeroUIManager.Instance.SendWash(hero, 1); } void OnCloseWin() { if (Time.time - closeTime < 1f) { return; } //洗炼结果未处理 var hero = HeroManager.Instance.GetHero(HeroUIManager.Instance.selectWashHeroGUID); if (hero == null) { return; } if (hero.talentRandomIDList.Count > 0) { return; } else { CloseWindow(); } } void ChangeLockEvent() { int useCount = HeroUIManager.Instance.GetTalentLockUseWashCount(hero); var itemCount = PackManager.Instance.GetItemCountByID(PackType.Item, HeroUIManager.Instance.washItemID); itemCountText.text = UIHelper.AppendColor(itemCount >= useCount ? TextColType.Green : TextColType.Red, itemCount + "/" + useCount); } }