49 lines
1.6 KiB
C#
49 lines
1.6 KiB
C#
using UnityEngine;
|
||
using BaseGames.Core.Events;
|
||
|
||
namespace BaseGames.Enemies
|
||
{
|
||
/// <summary>
|
||
/// Boss 敌人基类。扩展 <see cref="EnemyBase"/> 以支持多阶段切换与战斗结束广播。
|
||
/// 具体 Boss 继承此类并重写 <see cref="EnterPhase"/>。
|
||
/// </summary>
|
||
public class BossBase : EnemyBase
|
||
{
|
||
[Header("Boss 配置")]
|
||
[SerializeField] private string _bossId;
|
||
[SerializeField] private BoolEventChannelSO _onBossFightEnded;
|
||
[SerializeField] private BossPhaseEventChannelSO _onBossPhaseChanged;
|
||
|
||
public string BossId => _bossId;
|
||
|
||
protected int _currentPhase = 0;
|
||
|
||
/// <summary>
|
||
/// 进入指定阶段。广播 <see cref="BossPhaseEvent"/> 供 UI / 音乐系统响应。
|
||
/// 子类可重写以添加额外过渡逻辑(动画、无敌帧等)。
|
||
/// </summary>
|
||
public virtual void EnterPhase(int phase)
|
||
{
|
||
_currentPhase = phase;
|
||
_onBossPhaseChanged?.Raise(new BossPhaseEvent
|
||
{
|
||
BossId = _bossId,
|
||
Phase = phase,
|
||
});
|
||
}
|
||
|
||
/// <summary>检查当前 HP 是否低于指定百分比(0~1)。</summary>
|
||
public bool IsHPBelow(float ratio)
|
||
{
|
||
if (_stats == null || _stats.MaxHP <= 0) return false;
|
||
return (float)_stats.CurrentHP / _stats.MaxHP < ratio;
|
||
}
|
||
|
||
protected override void Die()
|
||
{
|
||
base.Die();
|
||
_onBossFightEnded?.Raise(true);
|
||
}
|
||
}
|
||
}
|