EerieVillage/Assets/Scripts/Progression/PlayerProgression.cs

41 lines
1.5 KiB
C#
Raw Normal View History

BT12-MVP-A Phase 2-A: 경험치·레벨업 시스템 코드 + JSON 테이블 PD 직접 지시 2026-05-08 — (b) 채택 + JSON 테이블 영역 관리. 신규 영역 (8 파일): - Assets/Resources/Progression/level_xp_table.json — Lv 1~30 EXP 테이블 (balance-designer SOT) - Assets/Scripts/Progression/LevelXPTableLoader.cs — Resources.Load + JsonUtility 캐시 - Assets/Scripts/Progression/PlayerProgression.cs — Level·EXP 진행도 (BT12-Dev v1 PlayerStats와 직무 분리) - Assets/Scripts/Progression/ExperienceSystem.cs — EXP 발급 정적 게이트웨이 - Assets/Scripts/Progression/SkillCardPlaceholder.cs — placeholder ScriptableObject - Assets/Scripts/Progression/SkillCardPlaceholderPool.cs — 카드 풀·Draw3Random - Assets/Scripts/Progression/LevelUpManager.cs — 레벨업 발화·일시정지·UI placeholder (Phase 2-B 통합) 기존 파일 수정 (2 파일): - EnemyDeath.cs Execute 마지막 영역 ExperienceSystem.OnEnemyKilled 호출 - PlayerController.cs Awake PlayerProgression 자동 부착 회귀 위험: - BT5-Dev 발판/몬스터 영역 영향 X (EnemyDeath 호출 마지막·PlayerController 자동 부착) - BT7-Dev VS 순수형 영향 X (Schedule 영역 변경 X) - BT12-Dev v1 영역 충돌 X (PlayerStats 분리·신규 namespace EerieVillage.Progression) Phase 2-A 영역 검증: - 적 처치 → EXP 누적 → Lv 임계점 → Console [LevelUpManager] 영역 출력 확증 - Phase 2-B 영역 = SkillSelectionUI prefab + 5 placeholder asset + Scene 통합
2026-05-08 08:53:39 +00:00
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;
docs(BT12-MVP-A Phase 2-B B+C·2-1·2-2 통합 완료): SkillSelectionCanvas Prefab + Scene 통합 + 한글 폰트 + 디자인 정정 산출물 (D안 — 기능 우선·그래픽 디테일 차후): Prefab (신규): - Assets/Prefabs/UI/SkillSelectionCanvas.prefab — 28 GameObject·Canvas Screen Space-Overlay·Sort Order 200 - SkillSelectionPanel (anchor stretch·반투명 검정 RGBA(0,0,0,0.78)) - Header (top stretch 120·베이지 9-slice·"기술 선택" 한글) - CardArea (center 1000x700·HorizontalLayoutGroup·SkillCardSlot ×3) - Footer (bottom stretch 200·"남은 포인트"·"확인" 노랑 버튼) - SkillCardSlot 자식 (TopBanner 갈색·NameText 흰색·IconArea·LevelText/DescriptionText 갈색·ClickArea·HighlightFrame) 한글 폰트: - Assets/Fonts/NotoSansKR-Regular.ttf (Apache 2.0·Google Noto Sans CJK KR) - Assets/Fonts/NotoSansKR-Regular SDF.asset (Multi Atlas·Dynamic mode·atlas 2x 2048) - Assets/TextMesh Pro/Resources/TMP Settings.asset (fallback NotoSansKR 등록) Scene 영역: - [LevelUpManager] GameObject + LevelUpManager·SkillCardPlaceholderPool 영역 - Pool _allCards 5 asset 매핑 (A01·A05·P01·P12·AW01) - LevelUpManager _pool/_ui 영역 매핑 - SkillSelectionCanvas Prefab 인스턴스 영역 SkillSelectionUI 8 field (_rootPanel·_titleText·_slot1·2·3·_pointText·_confirmButton) 영역 매핑 스크립트 (Debug.Log 추가·차후 가드 처리 의무): - ExperienceSystem.cs (DEFAULT_XP_REWARD 5→1 임시·OnEnemyKilled 진단 Log) - PlayerProgression.cs (GainXP·LEVEL UP 진단 Log) - LevelUpManager.cs (HandleLevelUp·_ui.Show 호출 진단 Log) - LevelXPTableLoader.cs (GetXPToNextLevel return 1 임시·기능 테스트 영역) - SkillSelectionUI.cs (Awake·Show 진단 Log + gameObject.SetActive 영역) 회귀 영역 정리: - Phase 2-B B+C MCP 작업 시 SkillSelectionPanel 자식 영역 중복 (Header/CardArea/Footer × 2 + 빈 Panel2) 영역 발견·정리 - Canvas WorldSpace → ScreenSpaceOverlay 정정 (Phase 2-2 manage_components silent fail 영역) - Image color RGBA(1,1,1,1) → RGBA(0,0,0,0.78) 정정 (execute_code 영역 직접 변경) - Player·SpawnPoint 영역 BT5-Dev 영역 정상 (본 PM 임시 변경 영역 stash 보존) 본 PM 자성 (영구 등재 의무): 1. manage_components set_property silent fail (Color·RectTransform·Canvas) — execute_code 영역 직접 변경 + 호출 직후 검증 의무 2. manage_gameobject batch 결과 검증 X — ReadMcpResource 호출 후 자식 영역 정합 검증 의무 3. 본 BT 영역 외 영역 임의 변경 금지 (Player·SpawnPoint·Camera·Tilemap·BT5-Dev) 4. TMP_FontAsset 검증 = characterTable.Count만 단정 X·isMultiAtlasTexturesEnabled·atlasPopulationMode·TryAddCharacters 동작 확인 의무 5. "영역" 어휘 무차별 부착 자제 (feedback_pm_filler_word_overuse) 6. PD 명시 외 임의 추가 (한자) 금지 PD 결정 (D안): - 기능 검증 우선 (한글 표시·카드 UI·레벨업 흐름 정합) - 그래픽 디테일 (PD 첨부 SD UI 정합) = 차기 BT 영역 후속 (Asset Store sprite 영역 또는 디자이너 영역) C49 표준 — Phase 1 dev-team-lead 설계 + Phase 2 본 PM MCP 집행 + Phase 3 본 PM 직접 검증 (단순 반복 카탈로그 v1)
2026-05-09 09:00:27 +00:00
Debug.Log($"[PlayerProgression] GainXP +{amount} → Lv.{Level} {CurrentXP}/{XPToNextLevel}");
BT12-MVP-A Phase 2-A: 경험치·레벨업 시스템 코드 + JSON 테이블 PD 직접 지시 2026-05-08 — (b) 채택 + JSON 테이블 영역 관리. 신규 영역 (8 파일): - Assets/Resources/Progression/level_xp_table.json — Lv 1~30 EXP 테이블 (balance-designer SOT) - Assets/Scripts/Progression/LevelXPTableLoader.cs — Resources.Load + JsonUtility 캐시 - Assets/Scripts/Progression/PlayerProgression.cs — Level·EXP 진행도 (BT12-Dev v1 PlayerStats와 직무 분리) - Assets/Scripts/Progression/ExperienceSystem.cs — EXP 발급 정적 게이트웨이 - Assets/Scripts/Progression/SkillCardPlaceholder.cs — placeholder ScriptableObject - Assets/Scripts/Progression/SkillCardPlaceholderPool.cs — 카드 풀·Draw3Random - Assets/Scripts/Progression/LevelUpManager.cs — 레벨업 발화·일시정지·UI placeholder (Phase 2-B 통합) 기존 파일 수정 (2 파일): - EnemyDeath.cs Execute 마지막 영역 ExperienceSystem.OnEnemyKilled 호출 - PlayerController.cs Awake PlayerProgression 자동 부착 회귀 위험: - BT5-Dev 발판/몬스터 영역 영향 X (EnemyDeath 호출 마지막·PlayerController 자동 부착) - BT7-Dev VS 순수형 영향 X (Schedule 영역 변경 X) - BT12-Dev v1 영역 충돌 X (PlayerStats 분리·신규 namespace EerieVillage.Progression) Phase 2-A 영역 검증: - 적 처치 → EXP 누적 → Lv 임계점 → Console [LevelUpManager] 영역 출력 확증 - Phase 2-B 영역 = SkillSelectionUI prefab + 5 placeholder asset + Scene 통합
2026-05-08 08:53:39 +00:00
while (CurrentXP >= XPToNextLevel)
{
CurrentXP -= XPToNextLevel;
Level++;
XPToNextLevel = LevelXPTableLoader.GetXPToNextLevel(Level);
docs(BT12-MVP-A Phase 2-B B+C·2-1·2-2 통합 완료): SkillSelectionCanvas Prefab + Scene 통합 + 한글 폰트 + 디자인 정정 산출물 (D안 — 기능 우선·그래픽 디테일 차후): Prefab (신규): - Assets/Prefabs/UI/SkillSelectionCanvas.prefab — 28 GameObject·Canvas Screen Space-Overlay·Sort Order 200 - SkillSelectionPanel (anchor stretch·반투명 검정 RGBA(0,0,0,0.78)) - Header (top stretch 120·베이지 9-slice·"기술 선택" 한글) - CardArea (center 1000x700·HorizontalLayoutGroup·SkillCardSlot ×3) - Footer (bottom stretch 200·"남은 포인트"·"확인" 노랑 버튼) - SkillCardSlot 자식 (TopBanner 갈색·NameText 흰색·IconArea·LevelText/DescriptionText 갈색·ClickArea·HighlightFrame) 한글 폰트: - Assets/Fonts/NotoSansKR-Regular.ttf (Apache 2.0·Google Noto Sans CJK KR) - Assets/Fonts/NotoSansKR-Regular SDF.asset (Multi Atlas·Dynamic mode·atlas 2x 2048) - Assets/TextMesh Pro/Resources/TMP Settings.asset (fallback NotoSansKR 등록) Scene 영역: - [LevelUpManager] GameObject + LevelUpManager·SkillCardPlaceholderPool 영역 - Pool _allCards 5 asset 매핑 (A01·A05·P01·P12·AW01) - LevelUpManager _pool/_ui 영역 매핑 - SkillSelectionCanvas Prefab 인스턴스 영역 SkillSelectionUI 8 field (_rootPanel·_titleText·_slot1·2·3·_pointText·_confirmButton) 영역 매핑 스크립트 (Debug.Log 추가·차후 가드 처리 의무): - ExperienceSystem.cs (DEFAULT_XP_REWARD 5→1 임시·OnEnemyKilled 진단 Log) - PlayerProgression.cs (GainXP·LEVEL UP 진단 Log) - LevelUpManager.cs (HandleLevelUp·_ui.Show 호출 진단 Log) - LevelXPTableLoader.cs (GetXPToNextLevel return 1 임시·기능 테스트 영역) - SkillSelectionUI.cs (Awake·Show 진단 Log + gameObject.SetActive 영역) 회귀 영역 정리: - Phase 2-B B+C MCP 작업 시 SkillSelectionPanel 자식 영역 중복 (Header/CardArea/Footer × 2 + 빈 Panel2) 영역 발견·정리 - Canvas WorldSpace → ScreenSpaceOverlay 정정 (Phase 2-2 manage_components silent fail 영역) - Image color RGBA(1,1,1,1) → RGBA(0,0,0,0.78) 정정 (execute_code 영역 직접 변경) - Player·SpawnPoint 영역 BT5-Dev 영역 정상 (본 PM 임시 변경 영역 stash 보존) 본 PM 자성 (영구 등재 의무): 1. manage_components set_property silent fail (Color·RectTransform·Canvas) — execute_code 영역 직접 변경 + 호출 직후 검증 의무 2. manage_gameobject batch 결과 검증 X — ReadMcpResource 호출 후 자식 영역 정합 검증 의무 3. 본 BT 영역 외 영역 임의 변경 금지 (Player·SpawnPoint·Camera·Tilemap·BT5-Dev) 4. TMP_FontAsset 검증 = characterTable.Count만 단정 X·isMultiAtlasTexturesEnabled·atlasPopulationMode·TryAddCharacters 동작 확인 의무 5. "영역" 어휘 무차별 부착 자제 (feedback_pm_filler_word_overuse) 6. PD 명시 외 임의 추가 (한자) 금지 PD 결정 (D안): - 기능 검증 우선 (한글 표시·카드 UI·레벨업 흐름 정합) - 그래픽 디테일 (PD 첨부 SD UI 정합) = 차기 BT 영역 후속 (Asset Store sprite 영역 또는 디자이너 영역) C49 표준 — Phase 1 dev-team-lead 설계 + Phase 2 본 PM MCP 집행 + Phase 3 본 PM 직접 검증 (단순 반복 카탈로그 v1)
2026-05-09 09:00:27 +00:00
Debug.Log($"[PlayerProgression] LEVEL UP → Lv.{Level} (next {XPToNextLevel}) — OnLevelUp 발화");
BT12-MVP-A Phase 2-A: 경험치·레벨업 시스템 코드 + JSON 테이블 PD 직접 지시 2026-05-08 — (b) 채택 + JSON 테이블 영역 관리. 신규 영역 (8 파일): - Assets/Resources/Progression/level_xp_table.json — Lv 1~30 EXP 테이블 (balance-designer SOT) - Assets/Scripts/Progression/LevelXPTableLoader.cs — Resources.Load + JsonUtility 캐시 - Assets/Scripts/Progression/PlayerProgression.cs — Level·EXP 진행도 (BT12-Dev v1 PlayerStats와 직무 분리) - Assets/Scripts/Progression/ExperienceSystem.cs — EXP 발급 정적 게이트웨이 - Assets/Scripts/Progression/SkillCardPlaceholder.cs — placeholder ScriptableObject - Assets/Scripts/Progression/SkillCardPlaceholderPool.cs — 카드 풀·Draw3Random - Assets/Scripts/Progression/LevelUpManager.cs — 레벨업 발화·일시정지·UI placeholder (Phase 2-B 통합) 기존 파일 수정 (2 파일): - EnemyDeath.cs Execute 마지막 영역 ExperienceSystem.OnEnemyKilled 호출 - PlayerController.cs Awake PlayerProgression 자동 부착 회귀 위험: - BT5-Dev 발판/몬스터 영역 영향 X (EnemyDeath 호출 마지막·PlayerController 자동 부착) - BT7-Dev VS 순수형 영향 X (Schedule 영역 변경 X) - BT12-Dev v1 영역 충돌 X (PlayerStats 분리·신규 namespace EerieVillage.Progression) Phase 2-A 영역 검증: - 적 처치 → EXP 누적 → Lv 임계점 → Console [LevelUpManager] 영역 출력 확증 - Phase 2-B 영역 = SkillSelectionUI prefab + 5 placeholder asset + Scene 통합
2026-05-08 08:53:39 +00:00
OnLevelUp?.Invoke(Level);
}
}
}
}