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