using System.Collections.Generic;
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
public class HeroFatesUpgradeWin : UIBase
|
{
|
[SerializeField] List<HeroFatesUpgradeHeadCell> headCells;
|
[SerializeField] TextEx txtTotalStarCnt;
|
[SerializeField] TextEx txtFromLv;
|
[SerializeField] TextEx txtToLv;
|
[SerializeField] ScrollerController scroller;
|
[SerializeField] ButtonEx btnFastPut;
|
[SerializeField] ButtonEx btnUpdate;
|
|
[SerializeField] ButtonEx btnPut;
|
[SerializeField] ImageEx imgQualityHeroBg;
|
[SerializeField] ImageEx imgQualityHeroIcon;
|
[SerializeField] ImageEx imgQualityHeroNull;
|
[SerializeField] Image imgPutRed;
|
[SerializeField] ButtonEx btnQualityHeroClear;
|
[SerializeField] TextEx txtQualityHeroName;
|
[SerializeField] TextEx txtNeedQualityHeroCnt;
|
int fatesID;
|
HeroFatesManager manager { get { return HeroFatesManager.Instance; } }
|
protected override void InitComponent()
|
{
|
btnPut.SetListener(() =>
|
{
|
manager.InitChooseList();
|
UIManager.Instance.OpenWindow<HeroFatesPutWin>();
|
});
|
|
btnQualityHeroClear.SetListener(() =>
|
{
|
manager.ClearAllList();
|
DisplayChoose(fatesID);
|
});
|
|
btnFastPut.SetListener(() =>
|
{
|
var list = manager.GetPutPreviewHeroList(manager.chooseHeroFatesId);
|
if (list.IsNullOrEmpty())
|
{
|
//消耗武将数量不足
|
SysNotifyMgr.Instance.ShowTip("HeroFates04");
|
return;
|
}
|
UIManager.Instance.OpenWindow<HeroFatesFastPutPreviewWin>();
|
});
|
btnUpdate.SetListener(() =>
|
{
|
if (!manager.TryGetNowLVAndNextLVConfig(fatesID, out int nowLv, out HeroFatesQualityLVConfig nowLVConfig, out HeroFatesQualityLVConfig nextLVConfig))
|
{
|
return;
|
}
|
|
int fatesNowStarCnt = manager.GetFatesNowStarCnt(fatesID);
|
int nextNeedStarCnt = nextLVConfig.NeedStarTotal;
|
if (fatesNowStarCnt < nextNeedStarCnt)
|
{
|
//武将总星级不足
|
SysNotifyMgr.Instance.ShowTip("HeroFates01");
|
return;
|
}
|
|
ushort[] arr = manager.GetItemIndexList(manager.realCostHeroInfos);
|
//消耗武将数量不足
|
if (arr.IsNullOrEmpty() || nextLVConfig.NeedHeroCnt > manager.realCostHeroInfos.Count)
|
{
|
SysNotifyMgr.Instance.ShowTip("HeroFates04");
|
return;
|
}
|
manager.SendHeroFates(manager.chooseHeroFatesId, 1, arr);
|
manager.ClearAllList();
|
});
|
|
}
|
|
protected override void OnPreOpen()
|
{
|
scroller.OnRefreshCell += OnRefreshCell;
|
manager.OnUpdateHeroFatesInfoEvent += OnUpdateHeroFatesInfo;
|
manager.OnRealChooseChangeEvent += OnRealChooseChangeEvent;
|
|
manager.ClearAllList();
|
|
fatesID = manager.chooseHeroFatesId;
|
DisplayHeadCells(fatesID);
|
DisplayTotalStarCnt(fatesID);
|
CreateScoller(fatesID);
|
DisplayLV(fatesID);
|
DisplayChoose(fatesID);
|
}
|
|
void DisplayTotalStarCnt(int fatesID)
|
{
|
bool hasNowLVAndNextLVConfig = manager.TryGetNowLVAndNextLVConfig(fatesID, out int nowLv, out HeroFatesQualityLVConfig nowLVConfig, out HeroFatesQualityLVConfig nextLVConfig);
|
if (hasNowLVAndNextLVConfig)
|
{
|
int fatesNowStarCnt = manager.GetFatesNowStarCnt(fatesID);
|
int nextNeedStarCnt = nextLVConfig.NeedStarTotal;
|
txtTotalStarCnt.text = UIHelper.AppendColor(nextNeedStarCnt <= fatesNowStarCnt ? TextColType.DarkGreen : TextColType.Red, StringUtility.Concat(Language.Get("HeroFates05"), Language.Get("HeroFates11", fatesNowStarCnt, nextNeedStarCnt)));
|
}
|
}
|
|
protected override void OnPreClose()
|
{
|
scroller.OnRefreshCell -= OnRefreshCell;
|
manager.OnUpdateHeroFatesInfoEvent -= OnUpdateHeroFatesInfo;
|
manager.OnRealChooseChangeEvent -= OnRealChooseChangeEvent;
|
}
|
|
private void OnRealChooseChangeEvent()
|
{
|
RefreshAll();
|
}
|
|
|
private void OnUpdateHeroFatesInfo()
|
{
|
if (manager.IsHeroFatesStarMax(manager.chooseHeroFatesId))
|
{
|
SysNotifyMgr.Instance.ShowTip("HeroFates02");
|
CloseWindow();
|
return;
|
}
|
|
RefreshAll();
|
var smallList = scroller.m_Scorller.GetActiveCellViews(); // 修正拼写错误
|
for (int i = 0; i < smallList.Count; i++)
|
{
|
var item = smallList[i];
|
var cellView = item as CellView;
|
if (cellView != null)
|
{
|
var _cell = cellView.GetComponent<HeroFatesUpgradeAttrCell>();
|
_cell?.Display(cellView.index, cellView, true);
|
}
|
}
|
}
|
|
|
void RefreshAll()
|
{
|
fatesID = manager.chooseHeroFatesId;
|
DisplayHeadCells(fatesID);
|
DisplayTotalStarCnt(fatesID);
|
DisplayLV(fatesID);
|
DisplayChoose(fatesID);
|
RefeshScoller();
|
}
|
|
private void OnRefreshCell(ScrollerDataType type, CellView cell)
|
{
|
var _cell = cell.GetComponent<HeroFatesUpgradeAttrCell>();
|
_cell?.Display(cell.index, cell);
|
}
|
|
void CreateScoller(int fatesID)
|
{
|
scroller.Refresh();
|
if (manager.TryGetAttrIDListAndLVAttrValueList(fatesID, out var attrIDList, out var lvAttrValueList))
|
{
|
for (int i = 0; i < attrIDList.Length; i++)
|
{
|
CellInfo cellInfo = new CellInfo();
|
cellInfo.infoInt1 = fatesID;
|
scroller.AddCell(ScrollerDataType.Header, i, cellInfo);
|
}
|
}
|
scroller.Restart();
|
}
|
|
void RefeshScoller()
|
{
|
scroller.m_Scorller.RefreshActiveCellViews();
|
}
|
|
private void DisplayLV(int fatesID)
|
{
|
int fromLv = 0;
|
int toLv = 0;
|
|
if (manager.TryGetHeroFates(fatesID, out HeroFates info))
|
{
|
fromLv = info.FatesLV;
|
toLv = info.FatesLV + 1;
|
}
|
txtFromLv.text = Language.Get("L1113", fromLv);
|
txtToLv.text = Language.Get("L1113", toLv);
|
}
|
public void DisplayHeadCells(int fatesID)
|
{
|
if (!HeroFatesConfig.HasKey(fatesID))
|
return;
|
if (!manager.TryGetHeroFatesConfig(fatesID, out HeroFatesConfig config) || config.HeroIDList.IsNullOrEmpty())
|
return;
|
Dictionary<int, HeroInfo> dict = manager.GetFatesNowStarHeroInfoDict(fatesID);
|
if (dict.IsNullOrEmpty())
|
return;
|
for (int i = 0; i < headCells.Count; i++)
|
{
|
if (i < config.HeroIDList.Length)
|
{
|
int heroID = config.HeroIDList[i];
|
if (dict.TryGetValue(heroID, out HeroInfo info))
|
{
|
headCells[i].Display(info);
|
headCells[i].SetActive(true);
|
}
|
else
|
{
|
headCells[i].SetActive(false);
|
}
|
}
|
else
|
{
|
headCells[i].SetActive(false);
|
}
|
}
|
}
|
|
public void DisplayChoose(int fatesID)
|
{
|
if (!manager.TryGetHeroFatesConfig(fatesID, out HeroFatesConfig config))
|
{
|
return;
|
}
|
|
if (!manager.TryGetNowLVAndNextLVConfig(fatesID, out int nowLv, out HeroFatesQualityLVConfig nowLVConfig, out HeroFatesQualityLVConfig nextLVConfig))
|
{
|
return;
|
}
|
|
int chooseCnt = manager.realCostHeroInfos.Count;
|
bool isChoose = chooseCnt > 0;
|
|
imgQualityHeroIcon.SetActive(isChoose);
|
btnQualityHeroClear.SetActive(isChoose);
|
imgQualityHeroNull.SetActive(!isChoose);
|
|
imgQualityHeroBg.SetItemBackGround(config.BGQuality);
|
imgQualityHeroIcon.SetSprite(StringUtility.Concat("HeroFatesQualityHead", nextLVConfig.NeedQuality.ToString()));
|
txtQualityHeroName.text = StringUtility.Concat(RichTextMsgReplaceConfig.GetRichReplace("HeroQuality", nextLVConfig.NeedQuality), Language.Get("herocard3"));
|
txtQualityHeroName.color = UIHelper.GetUIColorByFunc(nextLVConfig.NeedQuality);
|
int needCnt = nextLVConfig.NeedHeroCnt;
|
txtNeedQualityHeroCnt.text = UIHelper.AppendColor(chooseCnt >= needCnt ? TextColType.DarkGreen : TextColType.Red, Language.Get("BoneField09", chooseCnt, needCnt));
|
|
bool isShowRed = manager.IsShowRedDot(fatesID);
|
imgPutRed.SetActive(isShowRed && !isChoose);
|
}
|
}
|