using System.Collections;
using Animancer;
using BaseGames.Boss;
using BaseGames.Combat;
using UnityEngine;
namespace BaseGames.Enemies.Boss
{
///
/// 嘲风击落计数器(Phase 2)。
/// 由 直接调用 ,
/// 累计命中达到阈值后触发击落序列(下落 → 硬直 → 复位浮空)。
///
/// ⚠️ HurtBox 无公开 OnDamageTaken 事件,必须通过 EnemyBase.OnDamageTaken 虚方法转发。
///
public class ChaoFengKnockdownCounter : MonoBehaviour
{
[SerializeField] private int _threshold = 8;
[Header("依赖引用")]
[SerializeField] private ChaoFengBoss _boss;
[SerializeField] private ChaoFengFloatController _floatCtrl;
[Header("击落动画")]
[SerializeField] private ClipTransition _knockdownHitClip;
[Tooltip("击落后硬直动画(复用 Defeat_Pant Clip)")]
[SerializeField] private ClipTransition _staggerClip;
[SerializeField] private float _staggerDuration = 3f;
private int _count;
private bool _inKnockdown;
///
/// 由 调用,累计受击并在达到阈值时触发击落。
///
public void OnBossHit(DamageInfo info)
{
if (_inKnockdown || _boss == null || _boss.CurrentPhase != 1) return;
_count++;
if (_count >= _threshold)
{
_count = 0;
StartCoroutine(KnockdownSequence());
}
}
/// 强制结束正在进行中的击落序列(由 ChaoFengBoss.DefeatSequence 调用)。
public void ForceEnd()
{
StopAllCoroutines();
_inKnockdown = false;
_count = 0;
}
private IEnumerator KnockdownSequence()
{
_inKnockdown = true;
_boss.GetComponentInChildren()?.InterruptCurrentSkill();
if (_knockdownHitClip.Clip != null)
_boss.Animancer.Play(_knockdownHitClip);
yield return _floatCtrl.FallDown();
if (_staggerClip.Clip != null)
_boss.Animancer.Play(_staggerClip);
yield return new WaitForSeconds(_staggerDuration);
yield return _floatCtrl.FloatUp();
_inKnockdown = false;
}
}
}