Files
back_cantanBuilding/Assets/Scripts/LuckyTask/UI/LuckyTaskItem.cs
2026-05-26 16:15:54 +08:00

108 lines
3.1 KiB
C#

using asap.core;
using GameCore;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class LuckyTaskItem : MonoBehaviour
{
public LuckyTaskItemData data { get; private set; }
GameObject bg_cliam;
Button btn_claim;
GameObject bg_normal;
Button btnGo;
TMP_Text taskDescText;
List<RewardItemNew> rewardItemNews = new List<RewardItemNew>();
GameObject mask;
Action<LuckyTaskItem> action;
int count = 0;
private void Awake()
{
bg_cliam = transform.Find("bg_cliam").gameObject;
btn_claim = transform.Find("bg_cliam/btn_claim/btn_green_c").GetComponent<Button>();
bg_normal = transform.Find("bg_normal").gameObject;
btnGo = transform.Find("bg_normal/btn_go/btn_green_c").GetComponent<Button>();
taskDescText = transform.Find("text_task").GetComponent<TMP_Text>();
for (int i = 0; i < 2; i++)
{
var rewardItem = transform.Find($"reward{i + 1}").GetComponent<RewardItemNew>();
if (rewardItem != null)
{
rewardItemNews.Add(rewardItem);
}
}
mask = transform.Find("bg_done").gameObject;
}
private void Start()
{
if (btnGo != null)
{
btnGo.onClick.AddListener(OnClick);
}
if (btn_claim != null)
{
btn_claim.onClick.AddListener(OnClick);
}
}
public void Init(LuckyTaskItemData luckyTaskItemData, Action<LuckyTaskItem> action)
{
this.action = action;
this.data = luckyTaskItemData;
SetItem();
}
void SetItem()
{
Refresh();
taskDescText.text = data.desc;
var itemData = GContext.container.Resolve<PlayerItemData>().GetItemDataByDropId(data.reward);
if (itemData != null)
{
count = itemData.Count;
if (count > rewardItemNews.Count)
{
count = rewardItemNews.Count;
Debug.LogError($"LuckyTask Reward {data.reward} > PanelItem Count");
}
for (int i = 0; i < rewardItemNews.Count; i++)
{
if (count > i)
{
rewardItemNews[i].gameObject.SetActive(true);
rewardItemNews[i].SetData(itemData[i]);
}
else
{
rewardItemNews[i].gameObject.SetActive(false);
}
}
}
}
public async Task Play()
{
data.state = -1; // 更新状态为已领取
Refresh();
for (int i = 1; i < count; i++)
{
rewardItemNews[i].ParticleAttractor(ignorePack: true);
}
await rewardItemNews[0].ParticleAttractor(ignorePack: true);
}
public void Refresh()
{
mask.SetActive(data.state == -1);
btnGo.gameObject.SetActive(data.state == 0);
bg_normal.gameObject.SetActive(data.state <= 0);
bg_cliam.gameObject.SetActive(data.state == 1);
}
void OnClick()
{
action?.Invoke(this);
}
}