using System; using System.Collections.Generic; using System.Linq; using UnityEngine; public class HeroFatesWin : UIBase { [SerializeField] ScrollerController scroller; [SerializeField] ScrollerController attrScroller; HeroFatesManager manager { get { return HeroFatesManager.Instance; } } protected override void InitComponent() { } protected override void OnPreOpen() { scroller.OnRefreshCell += OnRefreshCell; attrScroller.OnRefreshCell += OnRefreshAttrCell; manager.OnUpdateHeroFatesInfoEvent += OnUpdateHeroFatesInfo; CreateScoller(); int firstIndex = 0; manager.HasShowRedDotFates(out firstIndex); scroller.JumpIndex(firstIndex); CreateAttrScoller(); } protected override void OnPreClose() { scroller.OnRefreshCell -= OnRefreshCell; attrScroller.OnRefreshCell -= OnRefreshAttrCell; manager.OnUpdateHeroFatesInfoEvent -= OnUpdateHeroFatesInfo; } private void OnRefreshAttrCell(ScrollerDataType type, CellView cell) { var _cell = cell.GetComponent(); _cell?.Display(cell.index, totalAttrIdList, totalAttrDict); } private void OnUpdateHeroFatesInfo() { RefeshScoller(); CreateAttrScoller(); } List fatesIDList = new List(); private void OnRefreshCell(ScrollerDataType type, CellView cell) { var _cell = cell.GetComponent(); _cell?.Display(cell.index, fatesIDList); } void CreateScoller() { scroller.Refresh(); fatesIDList = manager.GetFatesIDList(); if (!fatesIDList.IsNullOrEmpty()) { for (int i = 0; i < fatesIDList.Count; i++) { scroller.AddCell(ScrollerDataType.Header, i); } } scroller.Restart(); } void RefeshScoller() { scroller.m_Scorller.RefreshActiveCellViews(); } List totalAttrIdList = new List(); Dictionary totalAttrDict = new Dictionary(); void CreateAttrScoller() { totalAttrDict = manager.GetTotalAttr(); if (totalAttrDict.IsNullOrEmpty()) return; totalAttrIdList = totalAttrDict.Keys .OrderByDescending(attrID => totalAttrDict[attrID] > 0) // 属性值>0的排前面 .ThenBy(attrID => attrID) // 然后按attrID升序 .ToList(); attrScroller.Refresh(); if (!totalAttrIdList.IsNullOrEmpty()) { int rowCount = Mathf.CeilToInt((float)totalAttrIdList.Count / manager.attrRowCountMax); for (int i = 0; i < rowCount; i++) { attrScroller.AddCell(ScrollerDataType.Header, i); } } attrScroller.Restart(); } }