39 lines
1.3 KiB
C#
39 lines
1.3 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;
|
||
|
|
while (CurrentXP >= XPToNextLevel)
|
||
|
|
{
|
||
|
|
CurrentXP -= XPToNextLevel;
|
||
|
|
Level++;
|
||
|
|
XPToNextLevel = LevelXPTableLoader.GetXPToNextLevel(Level);
|
||
|
|
OnLevelUp?.Invoke(Level);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|