Files
back_cantanBuilding/Assets/Scripts/EventBingo/EventBingoRewardPanel.cs
2026-05-26 16:15:54 +08:00

69 lines
2.4 KiB
C#

using GameCore;
using UnityEngine;
using UnityEngine.UI;
using System.Collections.Generic;
using asap.core;
using UnityEngine.Assertions;
using System.Threading.Tasks;
using System;
public class EventBingoRewardPanel : MonoBehaviour
{
[SerializeField] private Button btnClose;
[SerializeField] private GameObject[] goBingoBanners;
[SerializeField] private RewardItemNew[] rewardDisplayList;
private IEventAggregator _eventAggregator1;
private ItemData[] _rewards;
private TaskCompletionSource<bool> _tcs;
private const float RewardFlyDuration = 1.2f;
private void Awake()
{
btnClose.onClick.AddListener(OnClickClose);
}
public void Init(EventBingoRewardPanelData data, IEventAggregator eventAggregator, TaskCompletionSource<bool> tcs)
{
for (int i = 0; i < goBingoBanners.Length; i++)
goBingoBanners[i].SetActive(i == data.BingoCount - 1);
_eventAggregator1 = eventAggregator;
Assert.IsTrue(rewardDisplayList.Length == data.Rewards.Count, $"Inconsistent reward count: {rewardDisplayList.Length} in UI vs {data.Rewards.Count} in data.");
for (int i = 0; i < data.Rewards.Count; i++)
rewardDisplayList[i].SetData(data.Rewards[i]);
_rewards = data.Rewards.ToArray();
_tcs = tcs;
}
private async void OnClickClose()
{
try
{
btnClose.gameObject.SetActive(false);
GContext.Publish(new EventRewardFlyStashRequest(
reward: _rewards[0],
sourceIconRt: rewardDisplayList[0].icon.GetComponent<RectTransform>(),
doesPlayOpen: true));
GContext.Publish(new EventRewardFlyStashRequest(
reward: _rewards[1],
sourceIconRt: rewardDisplayList[1].icon.GetComponent<RectTransform>(),
doesPlayOpen: true));
// _ = rewardDisplayList[0].ParticleAttractor();
// _ = rewardDisplayList[1].ParticleAttractor();
await Task.Delay(TimeSpan.FromSeconds(RewardFlyDuration - 0.2f));
_tcs.SetResult(true);
UIManager.Instance.DestroyUI(UITypes.EventBingoRewardPanel);
}
catch (Exception e)
{
Debug.LogError("[EventBingo] bingo reward panel error.");
Debug.LogError(e);
}
}
}
public class EventBingoRewardPanelData
{
public int BingoCount;
public List<ItemData> Rewards;
}