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() // .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()), 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().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); } }