using System;
using Colosseum.AI;
using Colosseum.Enemy;
using Unity.Behavior;
using Unity.Properties;
using UnityEngine;
///
/// 지정된 공통 패턴 역할을 실행하는 액션 기반 클래스입니다.
///
[Serializable, GeneratePropertyBag]
public abstract partial class UsePatternRoleActionBase : BossPatternActionBase
{
///
/// 현재 액션이 실행할 공통 패턴 역할입니다.
///
protected abstract BossCombatPatternRole PatternRole { get; }
protected override bool TryResolvePattern(out BossPatternData pattern, out GameObject target)
{
BossCombatBehaviorContext context = GameObject.GetComponent();
pattern = context != null ? context.GetPattern(PatternRole) : null;
target = Target != null ? Target.Value : null;
if (pattern == null || !UsePatternAction.IsPatternReady(GameObject, pattern))
return false;
if (target == null && PatternRole.IsMeleeRole())
target = ResolvePrimaryTarget();
if (target == null && PatternRole == BossCombatPatternRole.Mobility)
target = context != null ? context.FindMobilityTarget() : null;
if (target == null)
return false;
if (PatternRole.IsMeleeRole() && context != null)
context.RegisterPatternUse(PatternRole);
return true;
}
protected override GameObject ResolveStepTarget(GameObject fallbackTarget)
{
BossCombatBehaviorContext context = GameObject.GetComponent();
if (PatternRole == BossCombatPatternRole.Mobility && context != null)
{
return context.IsValidMobilityTarget(fallbackTarget)
? fallbackTarget
: context.FindMobilityTarget();
}
return base.ResolveStepTarget(fallbackTarget);
}
}