using System.Collections.Generic;
|
using System.Linq;
|
using UnityEngine;
|
|
public class GuildAtkDefBatRankWin : UIBase
|
{
|
[SerializeField] ButtonEx serverBtn;
|
[SerializeField] List<GuildAtkDefBatPlayerTop3Cell> playerTop3Cells;
|
[SerializeField] ScrollerController scroller;
|
[SerializeField] GuildAtkDefBatRankCell myRankCell;
|
[SerializeField] RectTransform noRect;
|
|
GuildAtkDefBatManager manager { get { return GuildAtkDefBatManager.Instance; } }
|
|
/// <summary> 排序后的参战成员列表 </summary>
|
List<HA525_tagSCFamilyAtkDefBatInfo.tagSCFamilyAtkDefBatMem> sortedMembers = new List<HA525_tagSCFamilyAtkDefBatInfo.tagSCFamilyAtkDefBatMem>();
|
|
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();
|
}
|
|
/// <summary>
|
/// 从 Manager 获取排序后的参战成员列表
|
/// </summary>
|
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<GuildAtkDefBatRankCell>();
|
_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);
|
}
|
}
|
|
/// <summary>
|
/// 当排名列表只有前3名时,显示无更多数据提示
|
/// </summary>
|
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);
|
}
|
}
|
}
|
}
|