using UnityEngine;
using DG.Tweening;
public class HeroDebutCallResultCell : MonoBehaviour
{
[SerializeField] public ItemCell itemCell;
[SerializeField] UIEffectPlayer orbBaseEffect; // 初始状态特效
[SerializeField] UIEffectPlayer orbBoomEffect; // 爆发瞬间特效
[SerializeField] UIEffectPlayer orbQualityEffect; // 品质底色特效
[SerializeField] UIEffectPlayer flowEffect; // 最终流光特效
[HideInInspector] public Vector3 originalLocalPos;
void Awake()
{
// 记录初始本地坐标,用于发牌动画的归位
originalLocalPos = transform.localPosition;
}
///
/// 初始化格子数据
///
public void DisplayItemCell(int itemID, int count)
{
itemCell.Init(new ItemCellModel(itemID, true, count));
itemCell.button.SetListener(() => ItemTipUtility.Show(itemID));
}
///
/// 重置所有 UI 元素和特效至初始状态
///
public void ResetState()
{
itemCell.gameObject.SetActive(false);
orbBaseEffect.SetActive(false);
orbBoomEffect.SetActive(false);
orbQualityEffect.SetActive(false);
flowEffect.SetActive(false);
}
///
/// 阶段 1:播放初始引导光点(飞行阶段)
///
public void PlayInitialOrb()
{
orbBaseEffect.SetActive(true);
orbBoomEffect.SetActive(false);
orbQualityEffect.SetActive(false);
orbBaseEffect.Play(4); // 播放索引为4的通用飞行效
}
///
/// 阶段 2 & 3:执行爆开、显色、翻牌、展示流光的组合序列
///
/// 品质底色特效索引
/// 最终流光特效索引
/// 返回 Sequence 方便外部进行 Stagger(交错)排列
public Tween PlayExplosionFadeAndFlipReveal(int qualityIndex, int flowQualityIndex)
{
Sequence seq = DOTween.Sequence();
// [0.0s] 切换特效:关闭飞行态,触发爆发态
seq.InsertCallback(0f, () =>
{
orbBaseEffect.SetActive(false);
orbBoomEffect.SetActive(true);
orbBoomEffect.Play(3);
});
// [0.2s] 展示品质基色
seq.InsertCallback(0.2f, () =>
{
orbQualityEffect.transform.localScale = Vector3.zero;
orbQualityEffect.SetActive(true);
orbQualityEffect.Play(qualityIndex);
});
// 品质光团由小变大的回弹动画
seq.Insert(0.2f, orbQualityEffect.transform.DOScale(Vector3.one, 0.2f).SetEase(Ease.OutBack));
// [0.8s] 准备翻牌:激活 ItemCell 并设置 90 度侧向,准备旋转
seq.InsertCallback(0.8f, () =>
{
itemCell.gameObject.SetActive(true);
itemCell.transform.localEulerAngles = new Vector3(0, 90f, 0);
});
// [0.8s] 翻转动作(耗时 0.3s):从 90 度旋转回 0 度
seq.Insert(0.8f, itemCell.transform.DOLocalRotate(Vector3.zero, 0.3f, RotateMode.Fast).SetEase(Ease.OutSine));
// [1.1s] 序列完结:清理临时特效,激活持久流光
seq.InsertCallback(1.1f, () =>
{
orbBoomEffect.SetActive(false);
orbQualityEffect.SetActive(false);
flowEffect.SetActive(true);
flowEffect.Play(flowQualityIndex);
});
return seq;
}
}