using System.Collections.Generic;
|
using Cysharp.Threading.Tasks;
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
/// <summary>
|
/// 鉴宝
|
/// </summary>
|
public class GubaoCallWin : UIBase
|
{
|
[SerializeField] TimingGiftCell timingGiftCell;
|
[SerializeField] OwnItemCell ownItemCell;
|
[SerializeField] Toggle skipToggle;
|
[SerializeField] Button call1Btn;
|
[SerializeField] Image call1ItemIcon;
|
[SerializeField] Text call1Text;
|
[SerializeField] Text freeCDTime;
|
[SerializeField] Button call10Btn;
|
[SerializeField] Image call10ItemIcon;
|
[SerializeField] Text call10Text;
|
[SerializeField] Text callTip;
|
[SerializeField] Button rateBtn;
|
[SerializeField] Transform rateRect;
|
[SerializeField] Text[] rateTexts;
|
|
[SerializeField] Transform resultObj; //展示X秒结束可点击关闭
|
[SerializeField] Transform opObj; //操作区在结果展示过程会隐藏
|
|
|
[SerializeField] UIEffectPlayer roleModel; //待机,结果3种
|
// [SerializeField] Transform talkRect; //1.未鉴宝时随机 2.鉴宝过程消失 3.鉴宝结束对应不同对话
|
[SerializeField] Text talkText;
|
|
[SerializeField] Button closeResultBtn;
|
[SerializeField] GubaoCallCell oneResultCell;
|
[SerializeField] GubaoCallCell[] tenResultCells;
|
|
float showResultTime = 0; //动画开始
|
float showCD = 0; //动画结束需 单抽1秒,十连2秒;跳过也需要0.x秒展示时间(受update影响)
|
|
protected override void InitComponent()
|
{
|
skipToggle.AddListener((value) =>
|
{
|
LocalSave.SetBool(GubaoManager.skipKey + PlayerDatas.Instance.baseData.PlayerID, value);
|
});
|
ownItemCell.itemID = TreasureSetConfig.Get((int)HappXBTitle.Gubao).CostItemID;
|
call1Btn.AddListener(SendGubaoCall);
|
call10Btn.AddListener(() =>
|
{
|
GubaoManager.Instance.selectCallIndex = 1;
|
HappyXBModel.Instance.SendXBManyQuest((int)HappXBTitle.Gubao);
|
});
|
rateBtn.AddListener(() =>
|
{
|
rateRect.SetActive(true);
|
});
|
ShowRate();
|
closeResultBtn.AddListener(() =>
|
{
|
if (Time.time - showResultTime < showCD)
|
{
|
return;
|
}
|
opObj.SetActive(true);
|
resultObj.SetActive(false);
|
ShowVenderTalk(0).Forget();
|
});
|
}
|
|
|
protected override void OnPreOpen()
|
{
|
HappyXBModel.Instance.RefreshXBTypeInfoAct += Display;
|
HappyXBModel.Instance.RefreshXBResultAct += ShowResult;
|
TimingGiftManager.Instance.OnShowGiftIdListAddEvent += OnShowGiftIdListAddEvent;
|
skipToggle.isOn = LocalSave.GetBool(GubaoManager.skipKey + PlayerDatas.Instance.baseData.PlayerID, false);
|
opObj.SetActive(true);
|
resultObj.SetActive(false);
|
timingGiftCell.InitUI();
|
|
ShowVenderTalk(0).Forget();
|
Display();
|
}
|
|
protected override void OnPreClose()
|
{
|
HappyXBModel.Instance.RefreshXBTypeInfoAct -= Display;
|
HappyXBModel.Instance.RefreshXBResultAct -= ShowResult;
|
TimingGiftManager.Instance.OnShowGiftIdListAddEvent -= OnShowGiftIdListAddEvent;
|
}
|
|
private void OnShowGiftIdListAddEvent()
|
{
|
timingGiftCell.InitUI();
|
}
|
|
|
//优先古宝表现
|
async UniTask ShowVenderTalk(int quality, float delay=0)
|
{
|
if (quality == 0)
|
{
|
var random = Random.Range(1, GubaoManager.Instance.maxIdleTalk + 1);
|
talkText.text = Language.Get("GubaoIdleTalk" + random);
|
roleModel.Play(0);
|
return;
|
}
|
|
|
await UniTask.Delay((int)(delay*1000*0.6));
|
|
if (quality >= 10)
|
{
|
//物品品质
|
quality = quality / 10;
|
talkText.text = Language.Get("GubaoResultTalkItem" + quality);
|
roleModel.Play(GubaoManager.Instance.emojiItemDict[quality]);
|
}
|
else
|
{
|
talkText.text = Language.Get("GubaoResultTalkGB" + quality);
|
roleModel.Play(GubaoManager.Instance.emojiGBDict[quality]);
|
}
|
await UniTask.Delay((int)(delay*1000*0.4));
|
if (delay != 0)
|
{
|
opObj.SetActive(true);
|
}
|
}
|
|
public void Display()
|
{
|
var funcSet = TreasureSetConfig.Get((int)HappXBTitle.Gubao);
|
var item = ItemConfig.Get(funcSet.CostItemID);
|
var IconKey = item.IconKey;
|
call1ItemIcon.SetOrgSprite(IconKey);
|
call10ItemIcon.SetOrgSprite(IconKey);
|
var itemCount = PackManager.Instance.GetItemCountByID(PackType.Item, funcSet.CostItemID);
|
|
int todayFreeCount = HappyXBModel.Instance.GetFreeCountToday((int)HappXBTitle.Gubao);
|
int dayMaxCount = HappyXBModel.Instance.GetDailyFreeCount((int)HappXBTitle.Gubao);
|
if (todayFreeCount < dayMaxCount)
|
{
|
call1Text.text = Language.Get("L1100", 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()));
|
}
|
call10Text.text = Language.Get("L1100", item.ItemName, UIHelper.AppendColor(funcSet.CostItemCountList[1] > itemCount ? TextColType.Red : TextColType.LightWhite, funcSet.CostItemCountList[1].ToString()));
|
|
|
RefreshFreeTime();
|
|
//再招募{0}次后必得{1}武将
|
List<int> qualityList = new List<int>();
|
var needCount = HappyXBModel.Instance.GetNextXBCountForBigAward((int)HappXBTitle.Gubao, 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("Gubao12", needCount, string.Join(Language.Get("L1130"), qualityStrList.ToArray()));
|
}
|
|
//每秒刷新免费CD的倒计时
|
float cdTime = 0;
|
|
void LateUpdate()
|
{
|
//每秒触发一次
|
cdTime += Time.deltaTime;
|
if (cdTime < 1) return;
|
cdTime = 0;
|
RefreshFreeTime();
|
|
}
|
|
//区分物品品质*10 和 古宝品质
|
//如果有古宝就不要物品品质
|
int GetResultQuality()
|
{
|
if (HappyXBModel.Instance.xbResultDict.IsNullOrEmpty())
|
{
|
return 0;
|
}
|
int gbQuality = 0;
|
int itemQuility = 0;
|
foreach (var item in HappyXBModel.Instance.xbResultDict.Values)
|
{
|
bool isGB = GubaoConfig.HasKey(item.itemId);
|
int tmp = ItemConfig.Get(item.itemId).ItemColor;
|
if (isGB)
|
{
|
if (tmp > gbQuality)
|
{
|
gbQuality = tmp;
|
}
|
}
|
else
|
{
|
if (tmp > itemQuility)
|
{
|
itemQuility = tmp;
|
}
|
}
|
}
|
|
|
|
return gbQuality != 0 ? gbQuality : itemQuility * 10;
|
}
|
|
void RefreshFreeTime()
|
{
|
if (HappyXBModel.Instance.IsHaveFreeXB((int)HappXBTitle.Gubao))
|
{
|
freeCDTime.SetActive(false);
|
}
|
else
|
{
|
freeCDTime.SetActive(true);
|
freeCDTime.text = Language.Get("L1128", TimeUtility.SecondsToHMS(TimeUtility.GetTodayRemainSeconds()));
|
}
|
}
|
|
void SendGubaoCall()
|
{
|
if (PackManager.Instance.GetEmptyGridCount(PackType.Item) <= 0)
|
{
|
SysNotifyMgr.Instance.ShowTip("GeRen_chenxin_676165", 2);
|
return;
|
}
|
|
GubaoManager.Instance.selectCallIndex = 0;
|
|
if (HappyXBModel.Instance.IsHaveFreeXB((int)HappXBTitle.Gubao))
|
{
|
HappyXBModel.Instance.SendXBQuest((int)HappXBTitle.Gubao, 0, 1);
|
}
|
else
|
{
|
HappyXBModel.Instance.SendOneXBQuest((int)HappXBTitle.Gubao);
|
}
|
}
|
|
void ShowResult()
|
{
|
showResultTime = Time.time;
|
resultObj.SetActive(true);
|
var isSkip = skipToggle.isOn;
|
showCD = isSkip ? 0.1f : GubaoManager.Instance.selectCallIndex == 0 ? 1f : 2f;
|
|
|
if (GubaoManager.Instance.selectCallIndex == 0)
|
{
|
oneResultCell.SetActive(true);
|
oneResultCell.Display(0).Forget();
|
for (int i = 0; i < tenResultCells.Length; i++)
|
{
|
tenResultCells[i].SetActive(false);
|
}
|
}
|
else
|
{
|
oneResultCell.SetActive(false);
|
for (int i = 0; i < tenResultCells.Length; i++)
|
{
|
tenResultCells[i].SetActive(true);
|
tenResultCells[i].Display(i).Forget();
|
}
|
}
|
|
if (isSkip)
|
{
|
ShowVenderTalk(GetResultQuality()).Forget();
|
}
|
else
|
{
|
opObj.SetActive(false);
|
ShowVenderTalk(0).Forget();
|
ShowVenderTalk(GetResultQuality(), showCD).Forget();
|
}
|
}
|
|
|
void ShowRate()
|
{
|
var config = HappyXBModel.Instance.GetXBItemConfigByType((int)HappXBTitle.Gubao);
|
for (int i = 0; i < config.GridItemRateList1.Length; i++)
|
{
|
//减去上一个从差值才是概率
|
if (i == 0)
|
{
|
//小数点2位
|
rateTexts[i].text = (config.GridItemRateList1[i][0]/100.0).ToString("0.00") + "%";
|
}
|
else
|
{
|
rateTexts[i].text = ((config.GridItemRateList1[i][0] - config.GridItemRateList1[i - 1][0])/100.0).ToString("0.00") + "%";
|
}
|
}
|
}
|
|
}
|