using System; using System.Collections; using System.Collections.Generic; using Cysharp.Threading.Tasks; using UnityEngine; using UnityEngine.UI; /// /// 招募结果展示 /// 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 showLHHeroIDList = new List(); 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, 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 qualityList = new List(); var needCount = HappyXBModel.Instance.GetNextXBCountForBigAward((int)HappXBTitle.HeroCallAdvanced, out qualityList); List qualityStrList = new List(); for (int i = 0; i < qualityList.Count; i++) { qualityStrList.Add(UIHelper.AppendColor(qualityList[i], Language.Get("equipQualityFormat", Language.Get("CommonQuality" + qualityList[i])))); } callTip.text = Language.Get("HeroCall6", needCount, string.Join(Language.Get("L1130"), qualityStrList.ToArray())); } }