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); } }