using System.Collections.Generic; using Cysharp.Threading.Tasks; using UnityEngine; public class TimeRushWin : UIBase { [SerializeField] ScrollerController tabScroller; [SerializeField] ScrollerController taskScroller; [SerializeField] ScrollerController giftScroller; [SerializeField] ImageEx bgImage; [SerializeField] ImageEx infoBgImage; [SerializeField] ImageEx infoImage; [SerializeField] ImageEx titleBgImage; [SerializeField] GradientText titleText; [SerializeField] ImageEx giftBgImage; [SerializeField] ImageEx giftIconImage; [SerializeField] TextEx timeText; [SerializeField] TextEx roundText; [SerializeField] ButtonEx goButton; [SerializeField] TextEx goText; [SerializeField] OwnMoneyCell ownMoneyCell; [SerializeField] ButtonEx closeButton; TimeRushManager manager { get { return TimeRushManager.Instance; } } StoreModel storeModel { get { return StoreModel.Instance; } } int tabId; protected override void InitComponent() { closeButton.SetListener(CloseWindow); } protected override void OnPreOpen() { tabId = functionOrder; manager.OnNowTabIdChangeEvent += OnNowTabIdChangeEvent; tabScroller.OnRefreshCell += OnRefreshTabCell; taskScroller.OnRefreshCell += OnRefreshTaskCell; giftScroller.OnRefreshCell += OnRefreshGiftCell; GlobalTimeEvent.Instance.secondEvent += OnSecondEvent; RechargeManager.Instance.rechargeCountEvent += OnRechargeCountEvent; OperationTimeHepler.Instance.operationTimeUpdateEvent += OperationTimeUpdateEvent; storeModel.RefreshBuyShopLimitEvent += RefreshBuyShopLimitEvent; manager.OnUpdatePlayerInfoEvent += OnUpdatePlayerInfoEvent; var list = manager.GetTabIDList(); if (list.IsNullOrEmpty()) { DelayCloseWindow().Forget(); return; } manager.nowTabId = list.Contains(tabId) ? tabId : list[0]; } protected override void OnPreClose() { manager.OnNowTabIdChangeEvent -= OnNowTabIdChangeEvent; tabScroller.OnRefreshCell -= OnRefreshTabCell; taskScroller.OnRefreshCell -= OnRefreshTaskCell; giftScroller.OnRefreshCell -= OnRefreshGiftCell; GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent; RechargeManager.Instance.rechargeCountEvent -= OnRechargeCountEvent; OperationTimeHepler.Instance.operationTimeUpdateEvent -= OperationTimeUpdateEvent; storeModel.RefreshBuyShopLimitEvent -= RefreshBuyShopLimitEvent; manager.OnUpdatePlayerInfoEvent -= OnUpdatePlayerInfoEvent; } private void OnUpdatePlayerInfoEvent() { RefreshAll(); } private void RefreshBuyShopLimitEvent() { RefreshAll(); } private void OperationTimeUpdateEvent(OperationType operation) { if (operation == OperationType.default47) { var list = manager.GetTabIDList(); if (list.IsNullOrEmpty()) { DelayCloseWindow().Forget(); return; } manager.nowTabId = list[0]; CreateAll(); } } private void OnRechargeCountEvent(int obj) { RefreshAll(); } private void OnSecondEvent() { GetActTime(); } private void OnRefreshTabCell(ScrollerDataType type, CellView cell) { var _cell = cell.GetComponent(); _cell?.Display(cell.index); } private void OnRefreshTaskCell(ScrollerDataType type, CellView cell) { var _cell = cell.GetComponent(); _cell?.Display(cell.index, cell, taskList); } private void OnRefreshGiftCell(ScrollerDataType type, CellView cell) { var _cell = cell.GetComponent(); _cell?.Display(cell.index, giftItems); manager.PlayAnimationSync?.Invoke(); } private void OnNowTabIdChangeEvent() { CreateAll(); } void RefreshAll() { int id = manager.nowTabId; if (!ActLunhuidianTypeConfig.TryGetConfig(id, out var config)) return; int roundType = config.RoundType; int tabType = config.TabType; Display(id); tabScroller.m_Scorller.RefreshActiveCellViews(); taskScroller.SetActive(tabType == 1); giftScroller.SetActive(tabType == 2); if (tabType == 1) { CreateTaskScroller(roundType, tabType); return; } if (tabType == 2) { giftScroller.m_Scorller.RefreshActiveCellViews(); return; } } void CreateAll() { int id = manager.nowTabId; if (!ActLunhuidianTypeConfig.TryGetConfig(id, out var config)) return; if (!manager.TryGetOperationInfo(out var act)) return; int roundType = config.RoundType; int tabType = config.TabType; if (!act.TryGetRound(roundType, out var round)) return; Display(id); CreateTabScroller(); taskScroller.SetActive(tabType == 1); giftScroller.SetActive(tabType == 2); if (tabType == 1) { CreateTaskScroller(roundType, tabType); return; } if (tabType == 2) { CreateGiftScroller(roundType); return; } } private void Display(int id) { if (!ActLunhuidianTypeConfig.TryGetConfig(id, out var config)) return; if (!manager.TryGetOperationInfo(out var act)) return; int roundType = config.RoundType; int tabType = config.TabType; if (!act.TryGetRound(roundType, out var round)) return; if (!manager.TryGetPlayerInfo(roundType, out var playerInfo)) return; GetActTime(); bgImage.SetSprite(config.bgImage); infoBgImage.SetSprite(config.InfoBgImage); infoImage.SetSprite(config.InfoImage); infoImage.SetNativeSize(); titleBgImage.SetSprite(config.TitleBgImage); titleBgImage.SetNativeSize(); titleText.text = Language.Get($"TimeRushTitle{roundType}"); roundText.SetActive(tabType == 1); roundText.text = tabType == 1 ? Language.Get("TimeRush06", playerInfo.CurRound, round.RoundMax) : string.Empty; ownMoneyCell.SetActive(tabType == 2); ownMoneyCell.moneyType = manager.TryGetMoneyTypeByRoundType(roundType, out int monetyType) ? monetyType : 99; ownMoneyCell.Display(true); giftBgImage.SetActive(tabType == 2); giftIconImage.SetActive(tabType == 2); giftIconImage.SetSprite($"TimeRushGiftIcon{roundType}"); DisplayGoButton(config); } void DisplayGoButton(ActLunhuidianTypeConfig config) { int roundType = config.RoundType; int tabType = config.TabType; bool hasWindowID = manager.TryGetWindowIDByRoundType(roundType, out int windowID); goButton.SetActive(tabType == 1 && hasWindowID); if (tabType == 1 && hasWindowID) { goText.text = Language.Get($"TimeRushGoTitle{roundType}"); goButton.SetListener(() => { if (manager.TryGetFuncIdByRoundType(roundType, out int funcId) && !FuncOpen.Instance.IsFuncOpen(funcId, true)) return; UIJumpManager.Instance.OpenWindow(windowID); }); } } private void GetActTime() { if (!manager.TryGetOperationInfo(out var act)) { timeText.text = Language.Get("OSActivity6"); return; } timeText.text = Language.Get("TimeRush05", TimeUtility.SecondsToShortDHMS(act.GetResetSurplusTime())); } private void CreateTabScroller() { tabScroller.Refresh(); var list = manager.GetTabIDList(); if (!list.IsNullOrEmpty()) { for (int i = 0; i < list.Count; i++) { tabScroller.AddCell(ScrollerDataType.Header, list[i]); } } tabScroller.Restart(); } List taskList; private void CreateTaskScroller(int roundType, int tabType) { taskList = manager.GetTaskList(roundType, true); taskScroller.Refresh(); if (!taskList.IsNullOrEmpty()) { for (int i = 0; i < taskList.Count; i++) { CellInfo cellInfo = new CellInfo(); cellInfo.infoInt1 = roundType; cellInfo.infoInt2 = tabType; taskScroller.AddCell(ScrollerDataType.Header, i, cellInfo); } } taskScroller.Restart(); } List giftItems; private void CreateGiftScroller(int roundType) { giftItems = manager.GetGiftItemList(roundType, true); giftScroller.Refresh(); if (!giftItems.IsNullOrEmpty()) { for (int i = 0; i < giftItems.Count; i++) { giftScroller.AddCell(ScrollerDataType.Header, i); } } giftScroller.Restart(); } }