using System.Collections.Generic; using System.Linq; using UnityEngine; public class GuildAtkDefBatRankWin : UIBase { [SerializeField] ButtonEx serverBtn; [SerializeField] List playerTop3Cells; [SerializeField] ScrollerController scroller; [SerializeField] GuildAtkDefBatRankCell myRankCell; [SerializeField] RectTransform noRect; GuildAtkDefBatManager manager { get { return GuildAtkDefBatManager.Instance; } } /// 排序后的参战成员列表 List sortedMembers = new List(); protected override void InitComponent() { serverBtn.SetListener(() => { UIHelper.ShowServersPanel(GuildManager.Instance.crossServerIDList); }); } protected override void OnPreOpen() { base.OnPreOpen(); scroller.OnRefreshCell += OnRefreshCell; manager.OnUpdateAtkDefBatInfoEvent += OnUpdateAtkDefBatInfoEvent; InitDisplay(); } protected override void OnPreClose() { base.OnPreClose(); manager.OnUpdateAtkDefBatInfoEvent -= OnUpdateAtkDefBatInfoEvent; scroller.OnRefreshCell -= OnRefreshCell; } private void OnUpdateAtkDefBatInfoEvent() { Display(); } public void Display() { serverBtn.SetActive(manager.IsCrossServer()); RefreshSortedMembers(); ShowTop3(); scroller.m_Scorller.RefreshActiveCellViews(); DisplayMyRank(); UpdateNoRect(); } private void InitDisplay() { serverBtn.SetActive(manager.IsCrossServer()); RefreshSortedMembers(); ShowTop3(); CreateScroller(); DisplayMyRank(); UpdateNoRect(); } /// /// 从 Manager 获取排序后的参战成员列表 /// void RefreshSortedMembers() { sortedMembers = manager.GetSortedFamilyMembers(); } void CreateScroller() { scroller.Refresh(); int cnt = sortedMembers.Count; for (int i = 3; i < cnt; i++) { scroller.AddCell(ScrollerDataType.Header, i); } scroller.Restart(); } void OnRefreshCell(ScrollerDataType type, CellView cell) { int memberIndex = cell.index; if (memberIndex < 0 || memberIndex >= sortedMembers.Count) return; var _cell = cell.GetComponent(); _cell.Display(sortedMembers[memberIndex], memberIndex + 1); } private void DisplayMyRank() { uint myPlayerId = PlayerDatas.Instance.PlayerId; int myIndex = sortedMembers.FindIndex(m => m.PlayerID == myPlayerId); if (myIndex >= 0) { // 找到自己的排名 myRankCell.Display(sortedMembers[myIndex], myIndex + 1, true); } else { // 自己不在列表中(未参战等),显示默认信息 myRankCell.Display(null, 0, true); } } /// /// 当排名列表只有前3名时,显示无更多数据提示 /// void UpdateNoRect() { noRect.SetActive(sortedMembers.Count <= 3); } void ShowTop3() { int top3Count = Mathf.Min(playerTop3Cells.Count, sortedMembers.Count); for (int i = 0; i < playerTop3Cells.Count; i++) { if (i < top3Count) { playerTop3Cells[i].Display(sortedMembers[i], i + 1); } else { playerTop3Cells[i].Display(null, i + 1); } } } }