using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
|
/// <summary>
|
/// 首充每日奖励显示组件
|
/// 负责显示首充活动每天的奖励内容和领取状态
|
/// </summary>
|
public class FirstChargeDayAward : MonoBehaviour
|
{
|
[SerializeField] ImageEx imgCanHaveBG; // 可领取背景高亮显示
|
[SerializeField] ImageEx imgDay; // 天数图片
|
[SerializeField] TextEx txtDay; // 天数文本
|
[SerializeField] Transform transCount4; // 4个奖励物品的容器
|
[SerializeField] Transform transCount3; // 3个奖励物品的容器
|
[SerializeField] Transform transCount2; // 2个奖励物品的容器
|
[SerializeField] Transform transCount1; // 1个奖励物品的容器
|
|
// 各数量级奖励物品显示单元
|
[SerializeField] List<ItemCell> itemCellCount4 = new List<ItemCell>();
|
[SerializeField] List<ItemCell> itemCellCount3 = new List<ItemCell>();
|
[SerializeField] List<ItemCell> itemCellCount2 = new List<ItemCell>();
|
[SerializeField] ItemCell itemCellCount1 = new ItemCell();
|
|
// 奖励已领取遮罩图片
|
[SerializeField] List<ImageEx> imgHaveCount4 = new List<ImageEx>();
|
[SerializeField] List<ImageEx> imgHaveCount3 = new List<ImageEx>();
|
[SerializeField] List<ImageEx> imgHaveCount2 = new List<ImageEx>();
|
[SerializeField] ImageEx imgHaveCount1 = new ImageEx();
|
|
/// <summary>
|
/// 显示指定首充ID和天数的奖励信息
|
/// </summary>
|
/// <param name="firstId">首充配置ID</param>
|
/// <param name="day">第几天(1-3)</param>
|
public void Display(int firstId, int day)
|
{
|
// 获取首充数据
|
if (!FirstChargeManager.Instance.TryGetFirstChargeDataByFirstId(firstId, out var firstChargeData))
|
return;
|
|
// 获取奖励状态: 0-已领取, 1-不可领取, 2-可领取, 3-未知状态
|
int awardState = firstChargeData.GetHaveState(day);
|
|
// 根据状态设置UI显示
|
imgCanHaveBG.SetActive(firstChargeData.IsBuy() && awardState == 2);
|
txtDay.text = awardState == 0 ? Language.Get("L1129_2") : Language.Get("FirstCharge02", day);
|
imgDay.gray = awardState == 0; // 已领取则置灰天数图标
|
|
// 隐藏所有奖励物品容器
|
transCount4.SetActive(false);
|
transCount3.SetActive(false);
|
transCount2.SetActive(false);
|
transCount1.SetActive(false);
|
|
// 检查配置是否存在
|
if (!FirstChargeConfig.HasKey(firstId))
|
return;
|
|
FirstChargeConfig config = FirstChargeConfig.Get(firstId);
|
int[][] awardList = GetAwardListByDay(config, day);
|
|
// 检查奖励列表有效性
|
if (awardList == null || awardList.Length <= 0)
|
{
|
Debug.LogError($"首充表第{day}天奖励没配");
|
return;
|
}
|
|
if (awardList.Length > 4)
|
{
|
Debug.LogError($"首充表奖励物品不支持配大于4个");
|
return;
|
}
|
|
// 根据奖励数量显示对应的UI
|
switch (awardList.Length)
|
{
|
case 1:
|
ShowAwardsForCount1(awardList, awardState, firstId);
|
break;
|
case 2:
|
ShowAwardsForCount2(awardList, awardState);
|
break;
|
case 3:
|
ShowAwardsForCount3(awardList, awardState);
|
break;
|
case 4:
|
ShowAwardsForCount4(awardList, awardState);
|
break;
|
}
|
}
|
|
/// <summary>
|
/// 根据天数获取对应的奖励列表
|
/// </summary>
|
/// <param name="config">首充配置</param>
|
/// <param name="day">天数</param>
|
/// <returns>奖励列表</returns>
|
private int[][] GetAwardListByDay(FirstChargeConfig config, int day)
|
{
|
switch (day)
|
{
|
case 1:
|
return config.AwardListDay1;
|
case 2:
|
return config.AwardListDay2;
|
case 3:
|
return config.AwardListDay3;
|
default:
|
Debug.LogError("FirstChargeItemCellShow传入天数大于3或小于0");
|
return null;
|
}
|
}
|
|
/// <summary>
|
/// 显示单个奖励物品
|
/// </summary>
|
/// <param name="awardList">奖励列表</param>
|
/// <param name="awardState">奖励状态</param>
|
/// <param name="firstId">首充ID</param>
|
private void ShowAwardsForCount1(int[][] awardList, int awardState, int firstId)
|
{
|
transCount1.SetActive(true);
|
itemCellCount1.Init(new ItemCellModel((int)awardList[0][0], true, awardList[0][1]));
|
itemCellCount1.button.SetListener(() => HandleItemClick((int)awardList[0][0], awardList[0][2]));
|
imgHaveCount1.SetActive(awardState == 0);
|
}
|
|
/// <summary>
|
/// 显示两个奖励物品
|
/// </summary>
|
/// <param name="awardList">奖励列表</param>
|
/// <param name="awardState">奖励状态</param>
|
private void ShowAwardsForCount2(int[][] awardList, int awardState)
|
{
|
transCount2.SetActive(true);
|
ShowAwardsCommonLogic(awardList, awardState, itemCellCount2, imgHaveCount2);
|
}
|
|
/// <summary>
|
/// 显示三个奖励物品
|
/// </summary>
|
/// <param name="awardList">奖励列表</param>
|
/// <param name="awardState">奖励状态</param>
|
private void ShowAwardsForCount3(int[][] awardList, int awardState)
|
{
|
transCount3.SetActive(true);
|
ShowAwardsCommonLogic(awardList, awardState, itemCellCount3, imgHaveCount3);
|
}
|
|
/// <summary>
|
/// 显示四个奖励物品
|
/// </summary>
|
/// <param name="awardList">奖励列表</param>
|
/// <param name="awardState">奖励状态</param>
|
private void ShowAwardsForCount4(int[][] awardList, int awardState)
|
{
|
transCount4.SetActive(true);
|
ShowAwardsCommonLogic(awardList, awardState, itemCellCount4, imgHaveCount4);
|
}
|
|
/// <summary>
|
/// 统一处理物品点击事件
|
/// </summary>
|
/// <param name="itemId">物品ID</param>
|
private void HandleItemClick(int itemId, int customEquipId)
|
{
|
if (!ItemConfig.HasKey(itemId))
|
return;
|
if (ItemConfig.Get(itemId).Type == 150)
|
{
|
FirstChargeManager.Instance.heroItemID = itemId;
|
UIManager.Instance.OpenWindow<FirstChargeHeroInfoWin>();
|
}
|
else if (ItemConfig.Get(itemId).Type >= 101 &&
|
ItemConfig.Get(itemId).Type <= 117 &&
|
customEquipId > 0 &&
|
AppointItemConfig.HasKey(customEquipId))
|
{
|
ItemTipUtility.ShowCustomEquip(itemId, customEquipId);
|
}
|
else
|
{
|
ItemTipUtility.Show(itemId, true);
|
}
|
}
|
|
/// <summary>
|
/// 通用奖励显示逻辑
|
/// </summary>
|
/// <param name="awardList">奖励列表</param>
|
/// <param name="awardState">奖励状态</param>
|
/// <param name="itemCells">物品显示单元列表</param>
|
/// <param name="haveImages">已领取遮罩图片列表</param>
|
private void ShowAwardsCommonLogic<T>(int[][] awardList, int awardState, List<T> itemCells, List<ImageEx> haveImages) where T : ItemCell
|
{
|
for (int i = 0; i < awardList.Length; i++)
|
{
|
// 设置物品显示
|
if (i < itemCells.Count)
|
{
|
int index = i; // Lambda表达式中使用,需要创建局部副本
|
itemCells[i].SetActive(true);
|
itemCells[i].Init(new ItemCellModel((int)awardList[i][0], true, awardList[i][1]));
|
itemCells[i].button.SetListener(() => HandleItemClick((int)awardList[index][0], awardList[index][2]));
|
}
|
else
|
{
|
itemCells[i].SetActive(false);
|
}
|
|
// 设置已领取遮罩
|
if (awardState == 0 && i < haveImages.Count)
|
{
|
haveImages[i].SetActive(true);
|
}
|
else if (i < haveImages.Count)
|
{
|
haveImages[i].SetActive(false);
|
}
|
}
|
}
|
}
|