using System; 
 | 
using System.Collections; 
 | 
using System.Collections.Generic; 
 | 
using Cysharp.Threading.Tasks; 
 | 
using UnityEngine; 
 | 
using UnityEngine.UI; 
 | 
  
 | 
/// <summary> 
 | 
/// 招募结果展示 
 | 
/// </summary> 
 | 
public class HeroCallResultWin : UIBase 
 | 
{ 
 | 
    [SerializeField] GameObject moneyObj;   //立绘时候隐藏 
 | 
    [SerializeField] OwnItemCell ownItemCell; 
 | 
    [SerializeField] OwnMoneyCell ownMoneyCell; 
 | 
  
 | 
    [SerializeField] GameObject result1Obj; //单抽展示 
 | 
    [SerializeField] HeroCallResultCell result1Cell; 
 | 
  
 | 
    [SerializeField] GameObject result10Obj;    //十连展示 
 | 
    [SerializeField] HeroCallResultCell[] result10Cells; 
 | 
  
 | 
    [SerializeField] GameObject result10LihuiObj; //十连立绘展示 
 | 
    [SerializeField] UIHeroController roleLHModel; 
 | 
    [SerializeField] PositionTween roleLHModelTween; 
 | 
    [SerializeField] UIAlphaTween roleLHModelTween2; 
 | 
    [SerializeField] RawImage bgTexture; 
 | 
    [SerializeField] Image qualityImg; 
 | 
    [SerializeField] HeroCallResultCell showLHResultCell; 
 | 
    [SerializeField] Image newMarkLHImg; 
 | 
    [SerializeField] Button showNextlhOrCloseBtn; 
 | 
  
 | 
    [SerializeField] GameObject heroInfoObj;    //武将信息,单抽和立绘时候显示 
 | 
    [SerializeField] Text heroNameText; 
 | 
    [SerializeField] Image heroCountryImg; 
 | 
    [SerializeField] Image heroJobImg; 
 | 
    [SerializeField] Text jobPosNameText; 
 | 
  
 | 
    //按钮区 
 | 
    [SerializeField] GameObject btnsObj; 
 | 
    [SerializeField] Button call1Btn; 
 | 
    [SerializeField] Image call1ItemIcon; 
 | 
    [SerializeField] Text call1Text; 
 | 
    [SerializeField] Button call10Btn; 
 | 
    [SerializeField] Image call10ItemIcon; 
 | 
    [SerializeField] Text call10Text; 
 | 
    [SerializeField] Button okBtn; 
 | 
  
 | 
    [SerializeField] Text callTip; 
 | 
  
 | 
    public enum ResultState 
 | 
    { 
 | 
        single = 0, //单抽展示 
 | 
        singleStart = 1,    //单抽展示开始 
 | 
        ten = 2,    //十连展示 
 | 
        tenStart = 3,   //十连开始展示 
 | 
        Lihui = 4,  //立绘展示 
 | 
    } 
 | 
    ResultState resultState = ResultState.single; 
 | 
  
 | 
    bool isSkip = false; 
 | 
    List<int> showLHHeroIDList = new List<int>(); 
 | 
  
 | 
    protected override void InitComponent() 
 | 
    { 
 | 
        okBtn.AddListener(CloseWindow); 
 | 
  
 | 
        call1Btn.AddListener(SendHeroCall); 
 | 
        call10Btn.AddListener(() => 
 | 
        { 
 | 
            HeroUIManager.Instance.selectCallIndex = 1; 
 | 
            HappyXBModel.Instance.SendXBManyQuest((int)HeroUIManager.Instance.selectCallType); 
 | 
        }); 
 | 
        showNextlhOrCloseBtn.AddListener(RefreshLihui); 
 | 
    } 
 | 
  
 | 
  
 | 
    protected override void OnPreOpen() 
 | 
    { 
 | 
        isSkip = LocalSave.GetBool(HeroUIManager.skipKey + PlayerDatas.Instance.baseData.PlayerID, false); 
 | 
        HappyXBModel.Instance.RefreshXBResultAct += UpdateState; 
 | 
        HappyXBModel.Instance.RefreshXBTypeInfoAct += RefreshBtn; 
 | 
        InitMoney(); 
 | 
        UpdateState(); 
 | 
        RefreshBtn(); 
 | 
    } 
 | 
  
 | 
    protected override void OnPreClose() 
 | 
    { 
 | 
        HappyXBModel.Instance.RefreshXBResultAct -= UpdateState; 
 | 
        HappyXBModel.Instance.RefreshXBTypeInfoAct -= RefreshBtn; 
 | 
    } 
 | 
  
 | 
  
 | 
    void UpdateState() 
 | 
    { 
 | 
        if (isSkip) 
 | 
        { 
 | 
            resultState = HeroUIManager.Instance.selectCallIndex == 0 ? ResultState.single : ResultState.ten; 
 | 
  
 | 
            RefreshState(); 
 | 
        } 
 | 
        else 
 | 
        { 
 | 
            resultState = HeroUIManager.Instance.selectCallIndex == 0 ? ResultState.singleStart : ResultState.tenStart; 
 | 
            RefreshState(); 
 | 
            MoveToNextState().Forget(); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    async UniTask MoveToNextState() 
 | 
    { 
 | 
        showLHHeroIDList.Clear(); 
 | 
        for (int i = 0; i < HappyXBModel.Instance.xbResultDict.Count; i++) 
 | 
        { 
 | 
            var heroID = HappyXBModel.Instance.xbResultDict[i].itemId; 
 | 
            if (HeroConfig.Get(heroID).Quality >= HappyXBModel.Instance.lhQuality) 
 | 
                showLHHeroIDList.Add(HappyXBModel.Instance.xbResultDict[i].itemId); 
 | 
        } 
 | 
  
 | 
        await UniTask.Delay(resultState == ResultState.singleStart ? 800 : 1500); 
 | 
  
 | 
        resultState = ResultState.Lihui; 
 | 
        try 
 | 
        { 
 | 
            RefreshState(); 
 | 
        } 
 | 
        catch (System.Exception e) 
 | 
        { 
 | 
            Debug.LogWarning(e); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    void RefreshState() 
 | 
    { 
 | 
        if (resultState == ResultState.single) 
 | 
        { 
 | 
            btnsObj.SetActive(true); 
 | 
            call1Btn.SetActive(HeroUIManager.Instance.selectCallType != HappXBTitle.HeroCallScore ? true : false); 
 | 
            call10Btn.SetActive(false); 
 | 
            callTip.SetActive(true); 
 | 
  
 | 
            result1Obj.SetActive(true); 
 | 
            result10Obj.SetActive(false); 
 | 
            result10LihuiObj.SetActive(false); 
 | 
            ShowMoney(true); 
 | 
            heroInfoObj.SetActive(true); 
 | 
  
 | 
            if (isSkip) 
 | 
                result1Cell.Display(HappyXBModel.Instance.xbResultDict[0].itemId, 0, true); 
 | 
            RefreshHeroInfo(HappyXBModel.Instance.xbResultDict[0].itemId); 
 | 
            RefreshLuck(); 
 | 
  
 | 
        } 
 | 
        else if (resultState == ResultState.singleStart) 
 | 
        { 
 | 
            btnsObj.SetActive(false); 
 | 
            callTip.SetActive(false); 
 | 
  
 | 
            result1Obj.SetActive(true); 
 | 
            result10Obj.SetActive(false); 
 | 
            result10LihuiObj.SetActive(false); 
 | 
            ShowMoney(false); 
 | 
            heroInfoObj.SetActive(false); 
 | 
  
 | 
            result1Cell.Display(HappyXBModel.Instance.xbResultDict[0].itemId, 0); 
 | 
            RefreshLuck(); 
 | 
        } 
 | 
        else if (resultState == ResultState.ten) 
 | 
        { 
 | 
            btnsObj.SetActive(true); 
 | 
            call1Btn.SetActive(false); 
 | 
            call10Btn.SetActive(true); 
 | 
            callTip.SetActive(true); 
 | 
  
 | 
            result1Obj.SetActive(false); 
 | 
            result10Obj.SetActive(true); 
 | 
            result10LihuiObj.SetActive(false); 
 | 
            ShowMoney(true); 
 | 
            heroInfoObj.SetActive(false); 
 | 
            if (isSkip) 
 | 
                Refresh10Result(); 
 | 
  
 | 
        } 
 | 
        else if (resultState == ResultState.tenStart) 
 | 
        { 
 | 
            btnsObj.SetActive(false); 
 | 
            callTip.SetActive(false); 
 | 
  
 | 
            result1Obj.SetActive(false); 
 | 
            result10Obj.SetActive(true); 
 | 
            result10LihuiObj.SetActive(false); 
 | 
            ShowMoney(false); 
 | 
            heroInfoObj.SetActive(false); 
 | 
            Refresh10Result(); 
 | 
        } 
 | 
        else if (resultState == ResultState.Lihui) 
 | 
        { 
 | 
            btnsObj.SetActive(false); 
 | 
  
 | 
            callTip.SetActive(false); 
 | 
            result1Obj.SetActive(false); 
 | 
            result10Obj.SetActive(false); 
 | 
            result10LihuiObj.SetActive(true); 
 | 
            ShowMoney(false); 
 | 
            heroInfoObj.SetActive(true); 
 | 
            RefreshLihui(); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public void RefreshBtn() 
 | 
    { 
 | 
        var funcSet = TreasureSetConfig.Get((int)HeroUIManager.Instance.selectCallType); 
 | 
        if (funcSet.CostItemID == 0) 
 | 
        { 
 | 
            call1ItemIcon.SetActive(false); 
 | 
            call1Text.SetActive(false); 
 | 
            call10ItemIcon.SetActive(false); 
 | 
            call10Text.SetActive(false); 
 | 
            return; 
 | 
        } 
 | 
  
 | 
        call1ItemIcon.SetActive(true); 
 | 
        call1Text.SetActive(true); 
 | 
        call10ItemIcon.SetActive(true); 
 | 
        call10Text.SetActive(true); 
 | 
  
 | 
        var item = ItemConfig.Get(funcSet.CostItemID); 
 | 
        var IconKey = item.IconKey; 
 | 
        call1ItemIcon.SetOrgSprite(IconKey); 
 | 
        var itemCount = PackManager.Instance.GetItemCountByID(PackType.Item, funcSet.CostItemID); 
 | 
  
 | 
        int todayFreeCount = HappyXBModel.Instance.GetFreeCountToday((int)HeroUIManager.Instance.selectCallType); 
 | 
        int dayMaxCount = HappyXBModel.Instance.GetDailyFreeCount((int)HeroUIManager.Instance.selectCallType); 
 | 
        if (todayFreeCount < dayMaxCount) 
 | 
        { 
 | 
            call1Text.text = Language.Get("L1127") + (dayMaxCount - todayFreeCount) + "/" + dayMaxCount; 
 | 
        } 
 | 
        else 
 | 
        { 
 | 
            call1Text.text = Language.Get("L1100", item.ItemName, UIHelper.AppendColor(funcSet.CostItemCountList[0] > itemCount ? TextColType.Red : TextColType.LightWhite, funcSet.CostItemCountList[0].ToString())); 
 | 
        } 
 | 
  
 | 
  
 | 
        call10ItemIcon.SetOrgSprite(IconKey); 
 | 
        call10Text.text = Language.Get("L1100", item.ItemName, UIHelper.AppendColor(funcSet.CostItemCountList[1] > itemCount ? TextColType.Red : TextColType.LightWhite, funcSet.CostItemCountList[1].ToString())); 
 | 
        RefreshLuck(); 
 | 
    } 
 | 
  
 | 
    void ShowMoney(bool show) 
 | 
    { 
 | 
        if (HeroUIManager.Instance.selectCallType == HappXBTitle.HeroCallScore) 
 | 
        { 
 | 
            moneyObj.SetActive(false); 
 | 
            return; 
 | 
        } 
 | 
        moneyObj.SetActive(show); 
 | 
    } 
 | 
  
 | 
    void Refresh10Result() 
 | 
    { 
 | 
        for (int i = 0; i < result10Cells.Length; i++) 
 | 
        { 
 | 
            result10Cells[i].Display(HappyXBModel.Instance.xbResultDict[i].itemId, i + 1); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    void InitMoney() 
 | 
    { 
 | 
        ownItemCell.itemID = TreasureSetConfig.Get((int)HeroUIManager.Instance.selectCallType).CostItemID; 
 | 
        ownMoneyCell.moneyType = TreasureSetConfig.Get((int)HeroUIManager.Instance.selectCallType).CostMoneyType; 
 | 
    } 
 | 
  
 | 
    void SendHeroCall() 
 | 
    { 
 | 
        heroInfoObj.SetActive(false); 
 | 
        HeroUIManager.Instance.selectCallIndex = 0; 
 | 
        if (HappyXBModel.Instance.IsHaveFreeXB((int)HeroUIManager.Instance.selectCallType)) 
 | 
        { 
 | 
            HappyXBModel.Instance.SendXBQuest((int)HeroUIManager.Instance.selectCallType, 0, 1); 
 | 
        } 
 | 
        else 
 | 
        { 
 | 
            HappyXBModel.Instance.SendOneXBQuest((int)HeroUIManager.Instance.selectCallType); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    void RefreshLihui() 
 | 
    { 
 | 
        //汇总品质传说及以上的立绘 
 | 
        int heroID = 0; 
 | 
        if (showLHHeroIDList.Count > 0) 
 | 
        { 
 | 
            heroID = showLHHeroIDList[0]; 
 | 
            showLHHeroIDList.RemoveAt(0); 
 | 
        } 
 | 
        else 
 | 
        { 
 | 
            resultState = HeroUIManager.Instance.selectCallIndex == 0 ? ResultState.single : ResultState.ten; 
 | 
            RefreshState(); 
 | 
            return; 
 | 
        } 
 | 
        var hero = HeroConfig.Get(heroID); 
 | 
        roleLHModel.Create(hero.SkinIDList[0], 1, motionName: "", isLh: true); 
 | 
        qualityImg.SetSprite("HeroCallQuality" + hero.Quality); 
 | 
        newMarkLHImg.SetActive(HeroUIManager.Instance.IsNewHero(heroID)); 
 | 
        showLHResultCell.Display(heroID, 0, true); 
 | 
        RefreshHeroInfo(heroID); 
 | 
        roleLHModelTween.SetStartState(); 
 | 
        roleLHModelTween.Play(); 
 | 
        roleLHModelTween2.SetStartState(); 
 | 
        roleLHModelTween2.Play(); 
 | 
  
 | 
        bgTexture.SetTexture2D("countryBG" + hero.Country); 
 | 
    } 
 | 
  
 | 
    void RefreshHeroInfo(int heroID) 
 | 
    { 
 | 
        var heroConfig = HeroConfig.Get(heroID); 
 | 
  
 | 
        heroNameText.text = heroConfig.Name; 
 | 
        heroNameText.color = UIHelper.GetUIColorByFunc(heroConfig.Quality); 
 | 
        heroCountryImg.SetSprite(HeroUIManager.Instance.GetCountryIconName(heroConfig.Country)); 
 | 
        heroJobImg.SetSprite(HeroUIManager.Instance.GetJobIconName(heroConfig.Class)); 
 | 
        jobPosNameText.text = HeroUIManager.Instance.GetJobName(heroConfig.Class) + "  " + heroConfig.Desc; 
 | 
    } 
 | 
  
 | 
  
 | 
    void RefreshLuck() 
 | 
    {  
 | 
        //再招募{0}次后必得{1}武将 
 | 
        List<int> qualityList = new List<int>(); 
 | 
        var needCount = HappyXBModel.Instance.GetNextXBCountForBigAward((int)HappXBTitle.HeroCallAdvanced, out qualityList); 
 | 
        List<string> qualityStrList = new List<string>(); 
 | 
        for (int i = 0; i < qualityList.Count; i++) 
 | 
        { 
 | 
            qualityStrList.Add(UIHelper.AppendColor(qualityList[i], Language.Get("L1039", Language.Get("CommonQuality" + qualityList[i])))); 
 | 
        } 
 | 
        callTip.text = Language.Get("HeroCall6", needCount, string.Join(Language.Get("L1130"), qualityStrList.ToArray())); 
 | 
    } 
 | 
} 
 |