Project_WL/Assets/WL/Combat/Weapon/WLWeaponSettings.cs

48 lines
4.5 KiB
C#

// ─────────────────────────────────────────────────────────────────────────────
// WLWeaponSettings.cs — 무기 공격 표 · 직업 전환 · 무기 스킬 설정 (#825 · #883 에서 WLWeaponClassApplier.cs 에서 분리)
// 🔴 ScriptableObject 는 파일 이름 = 클래스 이름이어야 Resources/WL/WLWeaponSettings.asset 이 스크립트를 참조한다.
// 예전엔 같은 파일 안에 있어 에셋이 스크립트 없이(m_Script 0) 저장 → 에디터를 다시 열면 못 읽고 기본값(weaponSkills 0)으로 돌았다.
// ─────────────────────────────────────────────────────────────────────────────
using UnityEngine;
namespace WL.Combat.Weapon
{
public class WLWeaponSettings : ScriptableObject
{
[Tooltip("0 이면 무기 공격 표·직업 전환·무기 스킬 전부 꺼짐.")] public int enabled_ = 1;
[Tooltip("1 = 장착 무기의 표 class_id 로 직업(모션 세트)을 바꾼다. 2026-10-09 PD 판단 ① 명시 답 없음 → 기획 권고(켜기)대로 진행 · 0 으로 원복 가능.")] public int classSwitch = 1;
[Tooltip("1 = 장착 무기의 스킬 표 행을 전투 슬롯에 넣고 자동 발동시킨다(ActiveSkillLock 런타임 해제 · MP 0 · 쿨 = 표 값). 0 = 기존 OFF 그대로. PD 2026-10-09 20:4x 「무기 스킬은 다음 스텝」 → 기본 0.")] public int weaponSkills = 0;
[Tooltip("1 = 무기 스킬 행의 n_MP 를 0 으로 덮는다(PD Q6 · 기획 v2 §12 (a)).")] public int mpOverride = 1;
[Tooltip("1 = 공격 표의 타당 피해 배율·연사 수·공속 배율·원거리 사거리를 전투 훅에 얹는다(WLWeaponAttackPattern). 0 = 직업 전환만.")] public int attackPattern = 1;
[Tooltip("원거리 무기의 탐색·추적 거리 = 표 사거리 + 이 여유(m).")] public float rangedRangeMargin = 1.5f;
[Tooltip("근접 무기의 탐색·추적 거리 덮기(m). 음수 = 에셋 값(#813t3 3 m) 그대로. 스모크·검증용.")] public float meleeSearchRange = -1f;
[Tooltip("#893 PD 「플레이어 인식 범위는 모든 무기 공통 · 원거리 무기(활)의 사정거리와 동일」 — 이 계열(공격 표 family)의 사거리(range_m 최댓값)를 모든 무기의 탐색·추적 거리로 쓴다(화면 표시 없음). 비우면 무기별(원거리 = 표 사거리 + 위 여유 · 근접 = 위 값).")] public string recognitionFamily = "";
[Tooltip("무기를 바꿨는데 연속 전투라 공격 끝을 못 잡으면 이 시간(초) 뒤 공격을 끊고(Play_Idle) 직업을 바꾼다. 0 이하 = 기다리기만.")] public float forceSwitchAfterSec = 1.5f;
[Tooltip("무기 공격 표(Resources 경로 · 확장자 없이).")] public string attackTablePath = "WL/WLWeaponAttackTable";
[Tooltip("무기 스킬 표.")] public string skillTablePath = "WL/WLWeaponSkillTable";
[Tooltip("등급표.")] public string tierTablePath = "WL/WLWeaponSkillTier";
[Tooltip("계열 축(json).")] public string axisPath = "WL/WLWeaponAxis";
[Tooltip("WL 추가 직업(창 10701 등) 표(json).")] public string classesPath = "WL/WLWeaponClasses";
[Tooltip("🔴 임시(PD 2026-10-10 · PD 지시 시 삭제) 1 = 시작 때 무기 6계열 1개씩 지급 + 무기 미장착이면 검 장착(WLStarterKit · Resources/WL/WLStarterKit.json).")] public int starterKit = 1;
[Tooltip("점검 주기(초).")] public float pollSec = 0.5f;
[Tooltip("전환 뒤 다시 바꾸지 않는 시간(초) — 컨트롤러 비동기 로드 안정화.")] public float settleSec = 1.5f;
[Tooltip("1 = 로그.")] public int verboseLog = 1;
static WLWeaponSettings s_instance;
/// <summary>Resources/WL/WLWeaponSettings.asset · 없으면 기본값 인스턴스(인스펙터 조정이 필요하면 에셋을 만든다).</summary>
public static WLWeaponSettings Instance
{
get
{
if (s_instance == null)
{
s_instance = Resources.Load<WLWeaponSettings>("WL/WLWeaponSettings");
if (s_instance == null) { s_instance = CreateInstance<WLWeaponSettings>(); s_instance.hideFlags = HideFlags.HideAndDontSave; }
}
return s_instance;
}
}
}
}