using System; using System.Linq; using UnityEngine; /// /// 竞技场奖励窗口:functionOrder=0/1/2 → 本服日/本服周/跨服周奖励 /// public class ArenaCrossAwardWin : FunctionsBaseWin { [HideInInspector] public string valueFormat = "{0}"; [SerializeField] ArenaPlayerRankCell myRankCell; [SerializeField] ButtonEx btnClose; [SerializeField] TextEx txtCountdown; [SerializeField] Transform localDayRect; [SerializeField] ScrollerController scrLocalDayAward; [SerializeField] Transform localWeekRect; [SerializeField] ScrollerController scrLocalWeekAward; [SerializeField] Transform crossWeekRect; [SerializeField] ScrollerController scrCrossWeekAward; protected override void InitComponent() { base.InitComponent(); btnClose.SetListener(CloseWindow); } protected override void OnPreOpen() { base.OnPreOpen(); ArenaManager.Instance.OnArenaMatchListEvent += OnArenaMatchListEvent; ArenaManager.Instance.OnUpdateArenaPlayerInfo += OnUpdateArenaPlayerInfo; ArenaManager.Instance.OnUpdateGameRecInfo += OnUpdateGameRecInfo; RankModel.Instance.onRankRefresh += OnRankRefresh; GlobalTimeEvent.Instance.secondEvent += OnSecondEvent; scrLocalDayAward.OnRefreshCell += OnRefreshLocalDayCell; scrLocalWeekAward.OnRefreshCell += OnRefreshLocalWeekCell; scrCrossWeekAward.OnRefreshCell += OnRefreshCrossWeekCell; Display(); } protected override void OnPreClose() { base.OnPreClose(); ArenaManager.Instance.OnArenaMatchListEvent -= OnArenaMatchListEvent; ArenaManager.Instance.OnUpdateArenaPlayerInfo -= OnUpdateArenaPlayerInfo; ArenaManager.Instance.OnUpdateGameRecInfo -= OnUpdateGameRecInfo; RankModel.Instance.onRankRefresh -= OnRankRefresh; GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent; scrLocalDayAward.OnRefreshCell -= OnRefreshLocalDayCell; scrLocalWeekAward.OnRefreshCell -= OnRefreshLocalWeekCell; scrCrossWeekAward.OnRefreshCell -= OnRefreshCrossWeekCell; } private void OnSecondEvent() { TimeSpan remainingTime; if (functionOrder == 0) { // 本服日奖励:使用到明天0点的时间 remainingTime = TimeUtility.ServerNow.AddDays(1).Date - TimeUtility.ServerNow; } else if (functionOrder == 1) { // 本服周奖励:使用本服赛季结束时间 ArenaManager.Instance.GetCurrentSeasonDates(out _, out DateTime seasonEndDate); remainingTime = seasonEndDate - TimeUtility.ServerNow; } else { // 跨服周奖励:使用跨服赛季结束时间 var crossZoneInfo = CrossServerBaseManager.Instance.GetCrossZoneInfo(ArenaManager.Instance.DataMapID); int zoneID = crossZoneInfo != null ? (int)crossZoneInfo.ZoneID : 0; ArenaManager.Instance.GetCrossCurrentSeasonDates(zoneID, out _, out DateTime crossSeasonEndDate); remainingTime = crossSeasonEndDate - TimeUtility.ServerNow; } int remainingSeconds = (int)remainingTime.TotalSeconds; bool hasTime = remainingSeconds > 0; txtCountdown.SetActive(hasTime); if (hasTime) txtCountdown.text = Language.Get("Arena14", TimeUtility.SecondsToDHMSCHS(remainingSeconds)); } protected override void OpenSubUIByTabIndex() { Display(); } private void OnRefreshLocalDayCell(ScrollerDataType type, CellView cell) { cell.GetComponent()?.Display(cell.index, cell); } private void OnRefreshLocalWeekCell(ScrollerDataType type, CellView cell) { cell.GetComponent()?.Display(cell.index, cell); } private void OnRefreshCrossWeekCell(ScrollerDataType type, CellView cell) { cell.GetComponent()?.Display(cell.index, cell); } private void OnArenaMatchListEvent() => Display(); private void OnUpdateArenaPlayerInfo() => Display(); private void OnUpdateGameRecInfo() => Display(); private void OnRankRefresh(int _) => DisplayMyRank(); private void Display() { localDayRect.SetActive(functionOrder == 0); localWeekRect.SetActive(functionOrder == 1); crossWeekRect.SetActive(functionOrder == 2); CreateScroller(); DisplayMyRank(); OnSecondEvent(); } private void CreateScroller() { switch (functionOrder) { case 0: CreateLocalDayScroller(); break; case 1: CreateLocalWeekScroller(); break; case 2: CreateCrossWeekScroller(); break; } DisplayMyRank(); OnSecondEvent(); } private void CreateLocalDayScroller() { scrLocalDayAward.Refresh(); var rewardDict = ArenaManager.Instance.GetCrossArenaAwardDict(0); if (rewardDict.IsNullOrEmpty()) return; var sortedKeys = rewardDict.Keys.ToList(); sortedKeys.Sort(); CellInfo cellInfo = new CellInfo { infoInt1 = 0 }; for (int i = 0; i < sortedKeys.Count; i++) scrLocalDayAward.AddCell(ScrollerDataType.Header, i, cellInfo); scrLocalDayAward.Restart(); } private void CreateLocalWeekScroller() { scrLocalWeekAward.Refresh(); var rewardDict = ArenaManager.Instance.GetCrossArenaAwardDict(1); if (rewardDict.IsNullOrEmpty()) return; var sortedKeys = rewardDict.Keys.ToList(); sortedKeys.Sort(); CellInfo cellInfo = new CellInfo { infoInt1 = 1 }; for (int i = 0; i < sortedKeys.Count; i++) scrLocalWeekAward.AddCell(ScrollerDataType.Header, i, cellInfo); scrLocalWeekAward.Restart(); } private void CreateCrossWeekScroller() { scrCrossWeekAward.Refresh(); var rewardDict = ArenaManager.Instance.GetCrossArenaAwardDict(2); if (rewardDict.IsNullOrEmpty()) return; var sortedKeys = rewardDict.Keys.ToList(); sortedKeys.Sort(); CellInfo cellInfo = new CellInfo { infoInt1 = 2 }; for (int i = 0; i < sortedKeys.Count; i++) scrCrossWeekAward.AddCell(ScrollerDataType.Header, i, cellInfo); scrCrossWeekAward.Restart(); } private void DisplayMyRank() { myRankCell.Display(ArenaManager.Instance.rankType, 0, valueFormat); } }