122 lines
4.3 KiB
C#
122 lines
4.3 KiB
C#
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using Platformer.Mechanics;
|
|
using EerieVillage.MyUI;
|
|
using EerieVillage.Skills;
|
|
|
|
namespace EerieVillage.Progression
|
|
{
|
|
/// <summary>
|
|
/// 레벨업 발화 시 일시정지 + UI 호출 + 카드 선택 결과 수령.
|
|
/// PlayerProgression.OnLevelUp 구독.
|
|
///
|
|
/// Phase 2-D 정정 (2026-05-09) — SkillRuntimeFactory.RandomDraw3() + PlayerSkillInventory.AddSkillByCardId() 정식 통합.
|
|
/// Phase 2-B 영역 (2026-05-08) — SkillSelectionUI 정식 통합.
|
|
/// </summary>
|
|
public class LevelUpManager : MonoBehaviour
|
|
{
|
|
public static LevelUpManager Instance { get; private set; }
|
|
|
|
[SerializeField] SkillSelectionUI _ui;
|
|
|
|
PlayerController _player;
|
|
PlayerProgression _progression;
|
|
bool _isLevelUpActive = false;
|
|
|
|
void Awake()
|
|
{
|
|
if (Instance != null && Instance != this)
|
|
{
|
|
Destroy(gameObject);
|
|
return;
|
|
}
|
|
Instance = this;
|
|
}
|
|
|
|
void Start()
|
|
{
|
|
_player = Object.FindFirstObjectByType<PlayerController>();
|
|
if (_player == null)
|
|
{
|
|
Debug.LogWarning("[LevelUpManager] PlayerController 영역 부재 — Start 시점 참조 X");
|
|
return;
|
|
}
|
|
|
|
_progression = _player.GetComponent<PlayerProgression>();
|
|
if (_progression == null)
|
|
{
|
|
_progression = _player.gameObject.AddComponent<PlayerProgression>();
|
|
}
|
|
_progression.OnLevelUp += HandleLevelUp;
|
|
}
|
|
|
|
void OnDestroy()
|
|
{
|
|
if (_progression != null) _progression.OnLevelUp -= HandleLevelUp;
|
|
if (Instance == this) Instance = null;
|
|
}
|
|
|
|
void HandleLevelUp(int newLevel)
|
|
{
|
|
Debug.Log($"[LevelUpManager] HandleLevelUp 호출 Lv.{newLevel} _ui={(_ui == null ? "NULL" : _ui.name)}");
|
|
if (_isLevelUpActive) return;
|
|
_isLevelUpActive = true;
|
|
|
|
// 일시정지 + 입력 차단
|
|
Time.timeScale = 0f;
|
|
if (_player != null) _player.controlEnabled = false;
|
|
|
|
// Phase 2-D — SkillRuntimeFactory.RandomDraw3()로 카드 3장 추출
|
|
List<ActiveSkillData> cards = SkillRuntimeFactory.RandomDraw3();
|
|
Debug.Log($"[LevelUpManager] cards.Count={cards.Count}");
|
|
|
|
// Phase 2-B/D 통합 — SkillSelectionUI 정식 호출
|
|
if (_ui != null)
|
|
{
|
|
Debug.Log($"[LevelUpManager] _ui.Show 호출 → SkillSelectionCanvas 활성 의도");
|
|
_ui.Show(cards, newLevel, HandleCardConfirmed);
|
|
}
|
|
else
|
|
{
|
|
// UI 부재 fallback
|
|
Debug.LogWarning($"[LevelUpManager] SkillSelectionUI 부재 — Lv.{newLevel} 카드 {cards.Count}장 자동 확정");
|
|
HandleCardConfirmed(cards.Count > 0 ? cards[0] : null);
|
|
}
|
|
}
|
|
|
|
void HandleCardConfirmed(ActiveSkillData selected)
|
|
{
|
|
// UI 닫기
|
|
if (_ui != null) _ui.Hide();
|
|
|
|
// Phase 2-D — PlayerSkillInventory.AddSkillByCardId() 정식 호출
|
|
if (selected != null)
|
|
{
|
|
var inventory = _player != null
|
|
? _player.GetComponent<PlayerSkillInventory>()
|
|
: null;
|
|
|
|
if (inventory != null)
|
|
{
|
|
bool ok = inventory.AddSkillByCardId(selected.CardId);
|
|
Debug.Log($"[LevelUpManager] 카드 확정 — {selected.DisplayName} (AddSkillByCardId={ok})");
|
|
}
|
|
else
|
|
{
|
|
Debug.LogWarning("[LevelUpManager] PlayerSkillInventory 영역 부재 — 스킬 등록 X (PlayerController에 컴포넌트 확인 필요)");
|
|
Debug.Log($"[LevelUpManager] 카드 확정 — {selected.DisplayName} (인벤토리 X)");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Debug.Log("[LevelUpManager] 카드 확정 — NONE");
|
|
}
|
|
|
|
// 일시정지 해제 + 입력 복원
|
|
Time.timeScale = 1f;
|
|
if (_player != null) _player.controlEnabled = true;
|
|
_isLevelUpActive = false;
|
|
}
|
|
}
|
|
}
|