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

83 lines
3.1 KiB
C#

using asap.core;
using Game;
using UnityEngine;
public class EventGatherCoreRewardView : MonoBehaviour
{
[SerializeField] private RewardItemNew reward;
[SerializeField] private GameObject backgroundNormal, backgroundSpecial, fxHit;
public RectTransform RewardIcon => reward.icon.rectTransform;
public RectTransform Text => reward.text_num.rectTransform;
private EventGatherCoreTriggerItemFly _flyingTrigger;
private int _idx;
public int RewardIndex => _idx;
private int _id;
public int RewardId => _id;
public bool IsClaimed => reward.received.activeSelf;
private string _sfxHit;
public void Init(EventGatherCoreRewardInfo info, EventGatherCoreTriggerItemFly fly, string audioUrl)
{
_idx = info.Idx;
if (info.ItemData != null)
reward.SetData(info.ItemData);
else
reward.gameObject.SetActive(false);
backgroundSpecial.SetActive(info.IsSpecial);
backgroundNormal.SetActive(!info.IsSpecial);
reward.SetReceived(info.IsClaimed);
_flyingTrigger = fly;
fxHit.SetActive(false);
_sfxHit = audioUrl;
}
public void Set(EventGatherCoreRewardInfo info)
{
_idx = info.Idx;
if (info.ItemData != null)
reward.SetData(info.ItemData);
else
reward.gameObject.SetActive(false);
backgroundSpecial.SetActive(info.IsSpecial);
backgroundNormal.SetActive(!info.IsSpecial);
reward.gameObject.SetActive(!info.IsClaimed);
fxHit.SetActive(false);
}
public async System.Threading.Tasks.Task OnTriggerAsync(Vector2 position, float triggerItemShakeDuration,
float triggerItemKickDuration, float triggerItemFlyDuration, float triggerItemHitDuration)
{
var itemFly = new CollectionItemFly
{
iconName = "sp_football_ball",
numStr = "",
targetIconSize = reward.icon.rectTransform.rect.width,
sourcePos = position,
destPos = reward.icon.transform.position,
isPlayOpen = false,
isPlayClose = false,
};
var flyingItem = Instantiate(_flyingTrigger.gameObject, transform.parent).GetComponent<EventGatherCoreTriggerItemFly>();
flyingItem.gameObject.SetActive(true);
// Debug.Log("[EventGatherCore] 1: shake.");
await System.Threading.Tasks.Task.Delay(System.TimeSpan.FromSeconds(triggerItemShakeDuration));
// Debug.Log("[EventGatherCore] 2: kick.");
flyingItem.showDuration = triggerItemKickDuration;
flyingItem.flyDuration = triggerItemFlyDuration;
await flyingItem.ShowAsync(itemFly);
Destroy(flyingItem.gameObject);
fxHit.SetActive(true);
GContext.Publish(new EventUISound(_sfxHit));
// Debug.Log("[EventGatherCore] 4: Hit.");
await System.Threading.Tasks.Task.Delay(System.TimeSpan.FromSeconds(triggerItemHitDuration));
// Debug.Log("[EventGatherCore] 5: Reward.");
reward.SetReceived(true);
}
public void SetReceived()
{
fxHit.SetActive(true);
reward.SetReceived(true);
}
}