using System;
using Colosseum.Enemy;
using Unity.Behavior;
using Unity.Properties;
using UnityEngine;
using Action = Unity.Behavior.Action;
///
/// 보스의 주 대상을 갱신하는 공통 Behavior Action입니다.
///
[Serializable, GeneratePropertyBag]
[NodeDescription(
name: "Refresh Primary Target",
story: "보스 주 대상을 [Target]으로 갱신",
category: "Action",
id: "b7dbb1fc0c0d451795e9f02d6f4d3930")]
public partial class RefreshPrimaryTargetAction : Action
{
[SerializeReference]
public BlackboardVariable Target;
protected override Status OnStart()
{
EnemyBase enemyBase = GameObject.GetComponent();
if (enemyBase == null)
return Status.Failure;
GameObject currentTarget = Target != null ? Target.Value : null;
float aggroRange = enemyBase.Data != null ? enemyBase.Data.AggroRange : Mathf.Infinity;
GameObject resolvedTarget = enemyBase.GetHighestThreatTarget(currentTarget, null, aggroRange);
if (resolvedTarget == null)
{
BossCombatBehaviorContext context = GameObject.GetComponent();
resolvedTarget = context != null ? context.FindNearestLivingTarget() : null;
}
if (Target != null)
Target.Value = resolvedTarget;
return resolvedTarget != null ? Status.Success : Status.Failure;
}
}