Files
ft/Client/Assets/Scripts/EventGatherCore/EventGatherCoreTaskView.cs
2026-06-29 21:18:33 +08:00

88 lines
3.1 KiB
C#

using UnityEngine;
using GameCore;
using System.Threading.Tasks;
using asap.core;
using System;
public class EventGatherCoreTaskView : MonoBehaviour
{
[SerializeField] private GameObject[] targetItems, fxReceivedList;
[SerializeField] private RewardItemNew reward;
[SerializeField] private RewardFlyBatchController _rewardFlyBatchController;
[SerializeField] private Animation ani;
private int CurrentEmptyTargetIdx
{
get
{
int i = 0;
for (i = 0; i < targetItems.Length; i++)
{
if (!targetItems[i].activeSelf)
return i;
}
return 0;
}
}
private GameObject CurrentEmptyTarget => targetItems[CurrentEmptyTargetIdx];
private GameObject CurrentReceiveFx => fxReceivedList[CurrentEmptyTargetIdx];
private readonly string _full = "target_full", _normal = "target_normal";
public void Init(int coreItemCount, ItemData rewardItemData)
{
for (int i = 0; i < targetItems.Length; i++)
{
targetItems[i].SetActive(i < coreItemCount);
fxReceivedList[i].SetActive(false);
}
reward.SetData(rewardItemData);
}
public async Task OnTriggerAsync(int rewardItemId, Vector3 position)
{
var request = new BatchedRewardFlyRequest
{
Icon = new BatchedRewardFlyRequestIcon { itemID = rewardItemId },
StartPoint = new BatchedRewardFlyStartPoint(position),
EndPoint = new BatchedRewardFlyEndPoint(CurrentEmptyTarget.GetComponent<RectTransform>()),
IsDestinationRewardStash = false,
AnimationParamIndex = 0,
};
await _rewardFlyBatchController.OnRewardFlyRequestAsync(request);
CurrentReceiveFx.SetActive(true);
CurrentEmptyTarget.SetActive(true);
if (GContext.container.Resolve<EventGatherCoreData>().StageData.IsStageCleared(EventGatherCoreAct.Ctx))
{
ani.Play(_full);
await Task.Delay(TimeSpan.FromSeconds(ani.GetClip(_full).length));
}
}
public async Task OnTriggerAsync(int rewardItemId, RewardItemNew triggerReward)
{
var request = new BatchedRewardFlyRequest
{
Icon = new BatchedRewardFlyRequestIcon { itemID = rewardItemId },
StartPoint = new BatchedRewardFlyStartPoint(triggerReward),
EndPoint = new BatchedRewardFlyEndPoint(CurrentEmptyTarget.GetComponent<RectTransform>()),
IsDestinationRewardStash = false,
AnimationParamIndex = 0,
};
await _rewardFlyBatchController.OnRewardFlyRequestAsync(request);
CurrentReceiveFx.SetActive(true);
CurrentEmptyTarget.SetActive(true);
if (GContext.container.Resolve<EventGatherCoreData>().StageData.IsStageCleared(EventGatherCoreAct.Ctx))
{
ani.Play(_full);
await Task.Delay(TimeSpan.FromSeconds(ani.GetClip(_full).length));
}
}
public void RefreshView(ItemData rewardItemData)
{
for (int i = 0; i < targetItems.Length; i++)
targetItems[i].SetActive(false);
reward.SetData(rewardItemData);
}
}