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()), IsDestinationRewardStash = false, AnimationParamIndex = 0, }; await _rewardFlyBatchController.OnRewardFlyRequestAsync(request); CurrentReceiveFx.SetActive(true); CurrentEmptyTarget.SetActive(true); if (GContext.container.Resolve().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()), IsDestinationRewardStash = false, AnimationParamIndex = 0, }; await _rewardFlyBatchController.OnRewardFlyRequestAsync(request); CurrentReceiveFx.SetActive(true); CurrentEmptyTarget.SetActive(true); if (GContext.container.Resolve().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); } }