using UnityEngine; namespace EerieVillage.Progression { /// /// 플레이어 레벨업 진행도. BT12-Dev v1 PlayerStats(패시브 보정)와 직무 분리 (Single Responsibility). /// EXP는 적 처치 시 누적. 임계점 도달 시 OnLevelUp 발화. /// EXP 곡선 = LevelXPTableLoader 영역 JSON SOT. /// public class PlayerProgression : MonoBehaviour { public int Level { get; private set; } = 1; public int CurrentXP { get; private set; } = 0; public int XPToNextLevel { get; private set; } = 100; /// 레벨업 발화 — int = new Level. LevelUpManager 구독 hook. public event System.Action OnLevelUp; void Awake() { XPToNextLevel = LevelXPTableLoader.GetXPToNextLevel(Level); } /// 적 처치 시 호출 — XP 획득. amount <= 0 시 무시. public void GainXP(int amount) { if (amount <= 0) return; CurrentXP += amount; Debug.Log($"[PlayerProgression] GainXP +{amount} → Lv.{Level} {CurrentXP}/{XPToNextLevel}"); while (CurrentXP >= XPToNextLevel) { CurrentXP -= XPToNextLevel; Level++; XPToNextLevel = LevelXPTableLoader.GetXPToNextLevel(Level); Debug.Log($"[PlayerProgression] LEVEL UP → Lv.{Level} (next {XPToNextLevel}) — OnLevelUp 발화"); OnLevelUp?.Invoke(Level); } } } }