using System.Collections.Generic; 
 | 
using Cysharp.Threading.Tasks; 
 | 
using UnityEngine; 
 | 
using UnityEngine.UI; 
 | 
  
 | 
  
 | 
/// <summary> 
 | 
/// 武将洗炼界面 
 | 
/// </summary> 
 | 
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<UIEffectPlayer>().Play(); 
 | 
            } 
 | 
            else 
 | 
            { 
 | 
                afterGiftCells[i].GetComponentInChildren<UIEffectPlayer>().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); 
 | 
    } 
 | 
} 
 |