| 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())); | 
|     } | 
| } |