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

76 lines
2.8 KiB
C#

using UnityEngine;
using GameCore;
using System.Threading.Tasks;
using asap.core;
using System;
using Castle.Components.DictionaryAdapter.Xml;
public class EventGatherCoreTaskView : MonoBehaviour
{
[SerializeField] private GameObject[] targetItems, fxReceivedList;
[SerializeField] private RewardItemNew reward;
[SerializeField] private RewardFlyBatchController _rewardFlyBatchController;
[SerializeField] private Animation ani;
// private GameObject CurrentEmptyTarget => targetItems.FirstOrDefault(x => !x.activeSelf);
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);
// _eventAggregator.GetEvent<EventGatherCoreTriggerTaken>()
// .Subscribe(OnTrigger).AddTo(this);
}
public async Task OnTriggerAsync(int rewardItemId, float rewardIconSize, Vector3 position)
{
var request = new BatchedRewardFlyRequest
{
itemID = rewardItemId,
// sourceIconSize = rewardIconSize,
// targetIconSize = (CurrentEmptyTarget.transform as RectTransform).rect.width,
// sourcePos = position,
// destPos = CurrentEmptyTarget.transform.position,
StartPoint = new BatchedRewardFlyPoint(position),
EndPoint = new BatchedRewardFlyPoint(CurrentEmptyTarget.GetComponent<RectTransform>()),
isDestinationRewardStash = false,
AnimationParamIndex = 0,
sourceTextRt = reward.transform.Find("text_num") as RectTransform
};
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);
}
}