EerieVillage/Assets/Scripts/Skills/Data/ActiveSkillData.cs

203 lines
8.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using UnityEngine;
namespace EerieVillage.Skills
{
/// <summary>
/// 액티브 스킬 ScriptableObject 데이터.
/// BT12-Dev v1 §2-2 정합. ActiveCategory 6종·ActiveTrigger 3종.
/// </summary>
[CreateAssetMenu(fileName = "Active_", menuName = "EerieVillage/Skills/Active")]
public class ActiveSkillData : SkillDataAsset
{
[Header("액티브 전용")]
/// <summary>카테고리 (A~F) — Projectile·MeleeArea·PlacementPersistent·Minion·Debuff·SpecialJudge</summary>
public ActiveCategory Category;
/// <summary>발동 트리거 — OnTime·OnHit·OnKill</summary>
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;
/// <summary>BT12-Dev 2026-05-10 PD — 사정거리 5단계 (Camera width 배수)</summary>
[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 }
/// <summary>
/// 액티브 스킬 카테고리 (A~F). BT12-Dev v1 §2-2 정합.
/// </summary>
public enum ActiveCategory
{
/// <summary>A. 투사체</summary>
Projectile,
/// <summary>B. 근접·범위</summary>
MeleeArea,
/// <summary>C. 설치·지속</summary>
PlacementPersistent,
/// <summary>D. 소환</summary>
Minion,
/// <summary>E. 상태이상</summary>
Debuff,
/// <summary>F. 특수 판정</summary>
SpecialJudge
}
/// <summary>
/// 투사체 궤적 타입. BT12-Dev v1 §2-2 정합.
/// </summary>
public enum ProjectileTrajectory
{
/// <summary>직선</summary>
Line,
/// <summary>유도</summary>
Homing,
/// <summary>곡선</summary>
Arc
}
}