using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class HeroFatesUpgradeWin : UIBase { [SerializeField] List 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(); }); 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(); }); 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(); _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(); _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 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); } }