using System;
using System.Collections.Generic;
using UnityEngine;
namespace TKS
{
public enum StageKind
{
Normal = 0,
Elite = 1, // 이름 있는 무장이 나오는 일반 스테이지(무장 isBoss = false · 배율만 보정)
Boss = 2 // 5·10·15·20
}
///
/// 밸런스·스테이지 데이터의 단일 출처(SOT). 코드에는 수치를 두지 않고 이 자산만 읽는다.
/// 기본값은 에디터 셋업(ProjectSetup)이 최초 1회 시드한다.
///
[CreateAssetMenu(menuName = "TKS/Balance Config", fileName = "BalanceConfig")]
public class BalanceConfig : ScriptableObject
{
[Serializable]
public class UnitStats
{
public UnitType type;
public int maxHp;
public int atk;
public int def;
[Tooltip("슬링샷으로 지정할 수 있는 최대 거리(월드 단위)")]
public float slingMaxDistance;
[Tooltip("옛 창병 대기(견제) 반경 · 견제 제거(PD 2026-11-10)로 지금은 쓰지 않음 · 궁병도 쓰지 않음(사거리 = slingMaxDistance)")]
public float attackRange;
public float radius;
}
[Serializable]
public class EnemySpawn
{
public string name;
public UnitType type;
public Vector2 position;
public float hpMult = 1f;
public float atkMult = 1f;
public bool isBoss;
[Tooltip("이름 있는 무장(스테이지 표 generals 열 · 보스·엘리트) · false = 병사")]
public bool isGeneral;
[Tooltip("Resources/Units// 아트 폴더 이름 · 비면 도형으로 표시")]
public string art = "";
}
[Serializable]
public class StageDef
{
public string title;
public string subtitle;
[Range(0f, 1f)] public float aiAccuracy = 0.6f;
[Tooltip("이 거리 안에 아군이 들어와야 적이 움직인다(넓은 전장에서 부대별 교전)")]
public float aiAggroRange = 11f;
public List enemies = new List();
[Header("스테이지 표(Assets/Data/Stages/stages.csv · TKS/Import Stages)")]
public int chapter;
[Tooltip("챕터 안 번호(1부터)")]
public int stage;
public StageKind kind;
public string place;
[Tooltip("factions.csv 세력 코드")]
public string faction;
public string bgTheme;
public string note;
}
[Serializable]
public class ChapterDef
{
public int no;
public string title;
public string subtitle;
public string years;
[Tooltip("Resources/ChapterMap/Maps/