44 lines
1.4 KiB
C#
44 lines
1.4 KiB
C#
#if GRAPH_DESIGNER
|
||
using UnityEngine;
|
||
using Opsive.BehaviorDesigner.Runtime.Tasks;
|
||
using Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals;
|
||
using BaseGames.Enemies;
|
||
|
||
namespace BaseGames.Enemies.AI
|
||
{
|
||
/// <summary>
|
||
/// BD Conditional:敌人当前 EnemyStateType 是否与目标状态名称匹配。
|
||
/// TargetStateName 直接输入枚举名称字符串(Controlled / Hurt / Stagger / Dead),
|
||
/// 枚举值顺序变化时 BD 图不会静默失效。
|
||
/// </summary>
|
||
public class BD_IsStateMatch : Conditional
|
||
{
|
||
/// <summary>目标状态名称(Controlled / Hurt / Stagger / Dead)。</summary>
|
||
[SerializeField] private string m_TargetStateName = "Controlled";
|
||
|
||
private EnemyBase _enemy;
|
||
|
||
public override void OnStart()
|
||
{
|
||
_enemy = GetComponent<EnemyBase>();
|
||
}
|
||
|
||
public override TaskStatus OnUpdate()
|
||
{
|
||
if (_enemy == null) return TaskStatus.Failure;
|
||
|
||
if (!System.Enum.TryParse<EnemyStateType>(m_TargetStateName, out var target))
|
||
{
|
||
Debug.LogError($"[BD_IsStateMatch] 未知状态名: '{m_TargetStateName}'," +
|
||
"有效值为 Controlled / Hurt / Stagger / Dead", gameObject);
|
||
return TaskStatus.Failure;
|
||
}
|
||
|
||
return _enemy.CurrentState == target
|
||
? TaskStatus.Success
|
||
: TaskStatus.Failure;
|
||
}
|
||
}
|
||
}
|
||
#endif
|