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<int> 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<TimingGiftTabCell>();
|
_cell?.Display(cell.index);
|
}
|
private void OnRefreshAwardCell(ScrollerDataType type, CellView cell)
|
{
|
var _cell = cell.GetComponent<TimingGiftAwardCell>();
|
_cell?.Display(cell.index, manager.selectGainItemList);
|
}
|
}
|