41 lines
1.5 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
}
|