using System.Collections.Generic; using Cysharp.Threading.Tasks; using UnityEngine; using UnityEngine.UI; public class TimingGiftWin : UIBase { [SerializeField] ScrollerController tabScroller; [SerializeField] ScrollerController awardScroller; [SerializeField] TimingGiftCtgIdCell[] ctgIdCells; [SerializeField] TextEx timeText; [SerializeField] RawImage bgImage; [SerializeField] ImageEx IconImage; [SerializeField] GradientText giftText; //"礼包" [SerializeField] OutlineEx giftTextOutline; [SerializeField] GradientText giftNameText; [SerializeField] TextEx rateText; [SerializeField] GradientText rateNameText; //充值返利 [SerializeField] ButtonEx buyButton; [SerializeField] ImageEx buyImage; [SerializeField] TextEx buyText; [SerializeField] ButtonEx leftButton; [SerializeField] ButtonEx rightButton; [SerializeField] ButtonEx closeButton; TimingGiftManager manager { get { return TimingGiftManager.Instance; } } int type; List currectTimingGiftIdList; protected override void InitComponent() { buyButton.SetListener(() => { RechargeManager.Instance.CTG(manager.selectCtgId); }); leftButton.SetListener(() => UpdateTabSelection(-1)); rightButton.SetListener(() => UpdateTabSelection(1)); closeButton.SetListener(CloseWindow); } protected override void OnPreOpen() { type = functionOrder; #if UNITY_EDITOR if (manager.isLogShow) { Debug.Log($"[TimingGift] 打开界面,被{type}类型触发"); } #endif tabScroller.OnRefreshCell += OnRefreshTabCell; awardScroller.OnRefreshCell += OnRefreshAwardCell; manager.OnSelectTabIndexChangeEvent += OnSelectTabIndexChangeEvent; manager.OnSelectCtgIdIndexChangeEvent += OnSelectCtgIdIndexChangeEvent; manager.OnRemoveExpiredEvent += OnRemoveExpiredEvent; GlobalTimeEvent.Instance.secondEvent += OnSecondEvent; RechargeManager.Instance.rechargeCountEvent += OnRechargeCountEvent; CreateAll(); } protected override void OnPreClose() { tabScroller.OnRefreshCell -= OnRefreshTabCell; awardScroller.OnRefreshCell -= OnRefreshAwardCell; manager.OnSelectTabIndexChangeEvent -= OnSelectTabIndexChangeEvent; manager.OnSelectCtgIdIndexChangeEvent -= OnSelectCtgIdIndexChangeEvent; manager.OnRemoveExpiredEvent -= OnRemoveExpiredEvent; GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent; RechargeManager.Instance.rechargeCountEvent -= OnRechargeCountEvent; } private void OnRechargeCountEvent(int obj) { DisplayGift(); } private void OnSecondEvent() { RefreshTime(); } private void OnRemoveExpiredEvent() { var list = manager.GetCurrectTimingGiftIdList(); if (list.IsNullOrEmpty()) { DelayCloseWindow().Forget(); return; } CreateAll(); } private void OnSelectTabIndexChangeEvent() { InitializeSelectedCtgConfig(); tabScroller.m_Scorller.RefreshActiveCellViews(); DisplayCtgIdCells(); CreateAwardScroller(); DisplayGift(); } private void OnSelectCtgIdIndexChangeEvent() { DisplayCtgIdCells(); CreateAwardScroller(); DisplayGift(); } private void InitializeSelectedCtgConfig() { if (!TimingGiftConfig.TryGetTimingGiftConfig(manager.selectTabGiftId, out TimingGiftConfig config)) return; manager.selectCtgIds = config.CTGIDs; int index = 0; manager.selectCtgId = manager.GetArrValue(index, config.CTGIDs); if (!CTGConfig.HasKey(manager.selectCtgId)) return; CTGConfig ctgConfig = CTGConfig.Get(manager.selectCtgId); manager.selectGainItemList = ctgConfig.GainItemList; manager.selectCtgIdIndex = index; } private void UpdateTabSelection(int direction) { int maxIndex = currectTimingGiftIdList.Count - 1; int tempIndex = manager.selectTabIndex + direction; int realIndex = tempIndex < 0 ? maxIndex : (tempIndex > maxIndex ? 0 : tempIndex); manager.selectTabGiftId = manager.GetListValue(realIndex, currectTimingGiftIdList); manager.selectTabIndex = realIndex; tabScroller.JumpIndex(manager.selectTabIndex); InitializeSelectedCtgConfig(); } private void RefreshTime() { int times = manager.GetRemainingSeconds(manager.selectTabGiftId); timeText.text = times <= 0 ? Language.Get("TimingGift04") : Language.Get("TimingGift03", TimeUtility.SecondsToHMS(times)); timeText.colorType = times <= 0 ? TextColType.Red : TextColType.LightGreen; } private int FindTypeIndex(int type) { for (int i = 0; i < currectTimingGiftIdList.Count; i++) { int id = currectTimingGiftIdList[i]; if (!TimingGiftConfig.TryGetTimingGiftConfig(id, out TimingGiftConfig config)) continue; if (config.GiftType == type) return i; } return 0; } private void CreateAll() { currectTimingGiftIdList = manager.GetCurrectTimingGiftIdList(isSort: true); int index = FindTypeIndex(type); manager.selectTabGiftId = manager.GetListValue(index, currectTimingGiftIdList); manager.selectTabIndex = index; InitializeSelectedCtgConfig(); CreateTabScroller(); tabScroller.JumpIndex(manager.selectTabIndex); DisplayCtgIdCells(); CreateAwardScroller(); DisplayGift(); } private void CreateTabScroller() { if (currectTimingGiftIdList.Count < 2) { tabScroller.SetActive(false); return; } tabScroller.SetActive(true); tabScroller.Refresh(); for (int i = 0; i < currectTimingGiftIdList.Count; i++) { tabScroller.AddCell(ScrollerDataType.Header, i); } tabScroller.Restart(); } private void CreateAwardScroller() { awardScroller.Refresh(); if (!manager.selectGainItemList.IsNullOrEmpty()) { for (int i = 0; i < manager.selectGainItemList.Length; i++) { awardScroller.AddCell(ScrollerDataType.Header, i); } } awardScroller.Restart(); } public void DisplayCtgIdCells() { if (manager.selectCtgIds.IsNullOrEmpty()) { for (int i = 0; i < ctgIdCells.Length; i++) { ctgIdCells[i].SetActive(false); } return; } for (int i = 0; i < ctgIdCells.Length; i++) { if (i < manager.selectCtgIds.Length) { ctgIdCells[i].SetActive(true); ctgIdCells[i].Display(i, manager.selectCtgIds); } else { ctgIdCells[i].SetActive(false); } } } private void DisplayGift() { if (!TimingGiftConfig.TryGetTimingGiftConfig(manager.selectTabGiftId, out TimingGiftConfig config)) return; if (!CTGConfig.HasKey(manager.selectCtgId)) return; CTGConfig ctgConfig = CTGConfig.Get(manager.selectCtgId); if (!RechargeManager.Instance.TryGetOrderInfo(manager.selectCtgId, out var orderInfoConfig)) return; bool isShowSwitch = currectTimingGiftIdList.Count > 1; leftButton.SetActive(isShowSwitch); rightButton.SetActive(isShowSwitch); bgImage.SetTexture2DPNG(IconConfig.Get($"TimingGiftBg_{manager.selectTabGiftId}").sprite); bgImage.SetNativeSize(); IconImage.SetSprite($"TimingGiftIcon_{manager.selectTabGiftId}"); IconImage.SetNativeSize(); giftNameText.text = config.GiftName; rateText.text = Language.Get("TimingGift02", ctgConfig.Percentage); rateNameText.text = Language.Get("TimingGift05"); giftText.text = Language.Get("TimingGift01"); giftText.SetVerticalGradient(manager.GetColor32(config.TopColor), manager.GetColor32(config.BottomColor)); giftTextOutline.OutlineColor = manager.GetColor32(config.OutlineColor); bool isBuy = manager.IsBuy(manager.selectCtgId); buyText.text = !isBuy ? Language.Get("PayMoneyNum", orderInfoConfig.PayRMBNumOnSale) : Language.Get("L1133"); buyImage.SetSprite(isBuy ? "TimingGiftBuy" : "TimingGiftNoBuy"); buyImage.raycastTarget = !isBuy; RefreshTime(); } private void OnRefreshTabCell(ScrollerDataType type, CellView cell) { var _cell = cell.GetComponent(); _cell?.Display(cell.index); } private void OnRefreshAwardCell(ScrollerDataType type, CellView cell) { var _cell = cell.GetComponent(); _cell?.Display(cell.index, manager.selectGainItemList); } }