using UnityEngine; namespace EerieVillage.Skills { /// /// 액티브 스킬 ScriptableObject 데이터. /// BT12-Dev v1 §2-2 정합. ActiveCategory 6종·ActiveTrigger 3종. /// [CreateAssetMenu(fileName = "Active_", menuName = "EerieVillage/Skills/Active")] public class ActiveSkillData : SkillDataAsset { [Header("액티브 전용")] /// 카테고리 (A~F) — Projectile·MeleeArea·PlacementPersistent·Minion·Debuff·SpecialJudge public ActiveCategory Category; /// 발동 트리거 — OnTime·OnHit·OnKill public ActiveTrigger Trigger; [Tooltip("Lv.1 기본 쿨다운 (초). balance/01 v0.2 BaseCooldown 1.5s 참조")] public float BaseCooldown = 1.5f; [Tooltip("Lv.1 기본 대미지 (쿼터 단위). balance/01 v0.2 BaseDamage 10 참조")] public int BaseDamage = 10; [Tooltip("판정 박스 기본 크기 (A·B 카테고리). balance/01 v0.2 AttackBoxSize 1.5x1.0 참조")] public Vector2 HitboxSize = new Vector2(1.5f, 1.0f); [Tooltip("히트박스 위치 오프셋 (anchor 기준 X·Y 절대). 투사체 영역 X=facing 방향 거리·Y=직각 거리")] public Vector2 OffsetDistance = new Vector2(0.5f, 0f); [Tooltip("투사체 전용 (A 카테고리). 궤적 타입 — Line·Homing·Arc")] public ProjectileTrajectory Trajectory = ProjectileTrajectory.Line; [Tooltip("소환 전용 (D 카테고리). 소환물 프리팹 참조")] public GameObject MinionPrefab; [Tooltip("연쇄 타격 횟수 (Homing 등 연쇄 계열)")] public int ChainCount = 0; [Tooltip("DoT 지속 시간 (초)")] public float DotDuration = 0f; [Tooltip("DoT 타격 간격 (초)")] public float DotInterval = 0.5f; [Tooltip("기절 지속 시간 (초)")] public float StunDuration = 0f; [Tooltip("감속 지속 시간 (초)")] public float SlowDuration = 0f; [Tooltip("감속 배율 (0.5 = 50% 감속)")] [Range(0f, 1f)] public float SlowMultiplier = 0.5f; [Tooltip("넉백 힘")] public float KnockbackForce = 0f; [Tooltip("동시 최대 인스턴스 수 (C·D 카테고리)")] public int MaxConcurrent = 1; [Tooltip("소환물 수명 (초, D 카테고리)")] public float MinionLifetime = 10f; [Tooltip("오라 주기 (초, E 카테고리 아우라형)")] public float AuraTickInterval = 0.5f; [Tooltip("오라 반경 (E 카테고리 아우라형)")] public float AuraRadius = 3f; [Tooltip("크리티컬 대미지 배율")] public float CritDamageMultiplier = 2.0f; [Tooltip("무적 프레임 부여 시간 (초, F 카테고리)")] public float IFrameDuration = 0f; [Tooltip("상태이상 스택 한도 (E 카테고리)")] public int DebuffStackLimit = 3; [Tooltip("확률 판정 전용 (F 카테고리). 발동 확률 0~1")] [Range(0f, 1f)] public float FireProbability = 1.0f; /// BT12-Dev 2026-05-10 PD — 사정거리 5단계 (Camera width 배수) [Tooltip("[잠정 유지] 사정거리 5단계 — 후속 정리. 실제 사정거리는 아래 MaxRange 사용")] public RangeTier Range = RangeTier.Medium; // PD 지시 2026-05-13 — 투사체형 스킬 Inspector 조절 (사정거리·속도) [Header("투사체 사거리·속도 (Inspector 조절)")] [Tooltip("투사체 사정거리 (unit). 0 이하 시 fallback 10")] [Min(0f)] public float MaxRange = 10f; [Tooltip("투사체 비행 속도 (unit/sec). 0 이하 시 fallback 6")] [Min(0f)] public float ProjectileSpeed = 6f; // BT12-Dev 2026-05-13 — 스킬 이펙트 prefab 3 + DoT damage multiplier (PD 지시: A02 파이어볼 이펙트 구현) [Header("스킬 이펙트 (Phase 2-E)")] [Tooltip("투사체 prefab — 부재 시 Resources/Skills/Projectiles/Default fallback")] public GameObject ProjectilePrefab; [Tooltip("적중 시 Instantiate 되는 ParticleSystem prefab (적 위치)")] public GameObject OnHitFxPrefab; // PD 지시 2026-05-13 — A04 번개 충격 피격 이펙트에 FX_Thunder Smoke 추가 (비주얼만) [Tooltip("추가 피격 FX — 비주얼 전용 (예: A04 번개 충격 FX_Thunder Smoke 동반 spawn)")] public GameObject ExtraHitFxPrefab; // PD 지시 2026-05-13 — 시전 이펙트 (발사 직전 Player 위치 spawn·비주얼 전용) [Tooltip("시전 FX — 발사 시점 Player 위치 spawn (예: A08 저주의 화살 FX_PinkArrow_Shoot)")] public GameObject CastFxPrefab; // PD 지시 2026-05-13 — 투사체 sprite 영역 기본 방향 보정 (예: A08 FX_PinkMagicArrow sprite 영역 left 기본 → 180) [Tooltip("투사체 sprite 방향 각도 오프셋 (degrees). prefab sprite 기본 방향 영역 보정 (예: 180 = 반대)")] [Range(-360f, 360f)] public float ProjectileAngleOffset = 0f; // PD 지시 2026-05-14 — 발사 시점 가장 가까운 적 방향 영역 자동 조준 (예: A08 저주의 화살) [Tooltip("true 시 발사 시점 가장 가까운 적 위치 방향으로 발사. 적 0명 시 PlayerController.Facing fallback.")] public bool TargetEnemyOnFire = false; [Tooltip("DoT 적용 시 적 자식으로 Instantiate 되는 ParticleSystem prefab")] public GameObject OnDotFxPrefab; [Tooltip("DoT damage = BaseDamage × DotDamageMultiplier (예: 0.25 = 25%)")] [Range(0f, 5f)] public float DotDamageMultiplier = 0.25f; // BT12-Dev 2026-05-13 — 이펙트 크기 분리 조절 (PD 지시·옵션 B) [Header("이펙트 크기 (1.0 = 원본)")] [Tooltip("ProjectilePrefab 영역 크기 배율 (Projectile·PiercingProjectile 자체)")] [Range(0f, 5f)] public float ProjectileFxScale = 1.0f; [Tooltip("OnHitFxPrefab 영역 크기 배율 (피격·번개·학익진 FX 등)")] [Range(0f, 5f)] public float HitFxScale = 1.0f; [Tooltip("OnDotFxPrefab 영역 크기 배율 (불태우기 등 DoT FX)")] [Range(0f, 5f)] public float DotFxScale = 1.0f; // PD 지시 2026-05-13 — 이펙트 회전·위치 X·Y 조정 (옵션 A — 단일 필드) [Tooltip("이펙트 회전 각도 (도 단위·Z 축 회전). 모든 FX·시각화 박스 공통 적용")] [Range(-360f, 360f)] public float FxRotation = 0f; [Tooltip("이펙트 위치 X·Y 오프셋 (이펙트 전용). 모든 스킬 공통 적용")] public Vector2 OffsetXY = Vector2.zero; // PD 지시 2026-05-13 — 판정 발생 정밀 제어 (투사체 제외 고정 발동형: A04·A05·A_Laser 등) [Header("판정 타이밍 (고정 발동형 전용)")] [Tooltip("Trigger 시점 영역 첫 판정 프레임 (예: 25 = Trigger 후 25프레임 후 첫 hit)")] [Min(0)] public int DamageFrameDelay = 0; [Tooltip("반복 피해 활성 — false 영역 1회만·true 영역 MaxHitCount 회 영역 RepeatFrameInterval 간격")] public bool EnableRepeatDamage = false; [Tooltip("최대 타격 횟수 (EnableRepeatDamage=true 시)")] [Min(1)] public int MaxHitCount = 1; [Tooltip("반복 피해 간격 (프레임 단위·EnableRepeatDamage=true 시)")] [Min(1)] public int RepeatFrameInterval = 30; } public enum RangeTier { Short, MediumShort, Medium, MediumLong, Long } /// /// 액티브 스킬 카테고리 (A~F). BT12-Dev v1 §2-2 정합. /// public enum ActiveCategory { /// A. 투사체 Projectile, /// B. 근접·범위 MeleeArea, /// C. 설치·지속 PlacementPersistent, /// D. 소환 Minion, /// E. 상태이상 Debuff, /// F. 특수 판정 SpecialJudge } /// /// 투사체 궤적 타입. BT12-Dev v1 §2-2 정합. /// public enum ProjectileTrajectory { /// 직선 Line, /// 유도 Homing, /// 곡선 Arc } }