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, 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("equipQualityFormat", Language.Get("CommonQuality" + qualityList[i]))));
|
}
|
callTip.text = Language.Get("HeroCall6", needCount, string.Join(Language.Get("L1130"), qualityStrList.ToArray()));
|
}
|
}
|