EerieVillage/Assets/Scripts/Progression/PlayerProgression.cs

41 lines
1.5 KiB
C#

using UnityEngine;
namespace EerieVillage.Progression
{
/// <summary>
/// 플레이어 레벨업 진행도. BT12-Dev v1 PlayerStats(패시브 보정)와 직무 분리 (Single Responsibility).
/// EXP는 적 처치 시 누적. 임계점 도달 시 OnLevelUp 발화.
/// EXP 곡선 = LevelXPTableLoader 영역 JSON SOT.
/// </summary>
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;
/// <summary>레벨업 발화 — int = new Level. LevelUpManager 구독 hook.</summary>
public event System.Action<int> OnLevelUp;
void Awake()
{
XPToNextLevel = LevelXPTableLoader.GetXPToNextLevel(Level);
}
/// <summary>적 처치 시 호출 — XP 획득. amount <= 0 시 무시.</summary>
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);
}
}
}
}