using System; using System.Collections.Generic; using System.Linq; using UnityEngine; public class TianziBillboradRankWin : FunctionsBaseWin { [Header("通用部分")] [SerializeField] Transform transRank; [SerializeField] Transform transAward; [SerializeField] ButtonEx btnClose; [SerializeField] TextEx txtTitle; [SerializeField] TianziBillboradPlayerRankCell myRankCell; [HideInInspector] public string valueFormat = "{0}"; [Header("奖励")] [SerializeField] TextEx txtCountdown; [SerializeField] ScrollerController scrAward; [Header("排行")] [SerializeField] List playerTop3Cells; [SerializeField] ScrollerController scrollerController; [HideInInspector] public int groupValue1 = 0; //一般用于跨服 [HideInInspector] public int groupValue2 = 0; //一般用于跨服 TianziBillboradManager model { get { return TianziBillboradManager.Instance; } } protected override void InitComponent() { base.InitComponent(); btnClose.SetListener(CloseWindow); } protected override void OnPreOpen() { base.OnPreOpen(); tabButtons[functionOrder].SelectBtn(true); RankModel.Instance.ResetQueryParam(); RankModel.Instance.QueryRankByPage(model.rankType, watchID: (int)PlayerDatas.Instance.baseData.PlayerID); RankModel.Instance.onRankRefresh += OnRankRefresh; GlobalTimeEvent.Instance.secondEvent += OnSecondEvent; scrollerController.OnRefreshCell += OnRefreshCell; scrAward.OnRefreshCell += OnRefreshAwardCell; model.UpdateTianziKYInfoExent += OnUpdateTianziKYInfoExent; Display(); } protected override void OnPreClose() { base.OnPreClose(); model.UpdateTianziKYInfoExent -= OnUpdateTianziKYInfoExent; RankModel.Instance.onRankRefresh -= OnRankRefresh; GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent; scrollerController.OnRefreshCell -= OnRefreshCell; scrAward.OnRefreshCell -= OnRefreshAwardCell; } private void OnUpdateTianziKYInfoExent() { Refresh(); } private void OnSecondEvent() { DateTime endDay = TimeUtility.ServerNow.AddDays(1).Date; TimeSpan remainingTime = endDay - TimeUtility.ServerNow; int remainingSeconds = (int)remainingTime.TotalSeconds; if (remainingSeconds > 0) { string countdownText = TimeUtility.SecondsToHMS(remainingSeconds); txtCountdown.SetActive(true); txtCountdown.text = Language.Get("Arena14", countdownText); } else { txtCountdown.SetActive(false); } } void OnRankRefresh(int type) { Refresh(); } protected override void OpenSubUIByTabIndex() { TianziBillboradManager.Instance.nowTabIndex = functionOrder; transRank.SetActive(functionOrder == 0); transAward.SetActive(functionOrder == 1); Display(); } private void OnRefreshAwardCell(ScrollerDataType type, CellView cell) { var _cell = cell.GetComponent(); _cell?.Display(cell.index); } void Refresh() { ShowTop3(); scrollerController.m_Scorller.RefreshActiveCellViews(); DisplayMyRank(); } private void Display() { txtTitle.text = Language.Get(functionOrder == 0 ? "L1118" : "Arena04"); if (functionOrder == 0) { ShowTop3(); CreateScroller(); } else { CreateAwardScroller(); OnSecondEvent(); } DisplayMyRank(); } void CreateScroller() { scrollerController.Refresh(); var cnt = RankModel.Instance.GetRankShowMaxCnt(model.rankType); for (int i = 3; i < cnt; i++) { scrollerController.AddCell(ScrollerDataType.Header, i); } scrollerController.Restart(); } void OnRefreshCell(ScrollerDataType type, CellView cell) { var _cell = cell.GetComponent(); _cell.Display(model.rankType, cell.index + 1, valueFormat); RankModel.Instance.ListenRankPage(model.rankType, cell.index, groupValue1, groupValue2); } private void CreateAwardScroller() { scrAward.Refresh(); Dictionary rewardDict = model.rankAwards; if (!rewardDict.IsNullOrEmpty()) { var list = rewardDict.Keys.ToList(); list.Sort(); for (int i = 0; i < list.Count; i++) { CellInfo cellInfo = new CellInfo(); scrAward.AddCell(ScrollerDataType.Header, i, cellInfo); } } scrAward.Restart(); } private void DisplayMyRank() { myRankCell.Display(model.rankType, 0, valueFormat); } void ShowTop3() { for (int i = 0; i < playerTop3Cells.Count; i++) { playerTop3Cells[i].Display(model.rankType, i + 1); } } }