Projext/Assets/Scripts/Level_Scripts/LevelUpUIManager.cs
2026-02-02 17:30:23 +09:00

96 lines
3.1 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; // ⭐ 버튼 제어를 위해 필수!
public class LevelUpUIManager : MonoBehaviour
{
[SerializeField] private GameObject panel;
[SerializeField] private CardUI[] cardPrefabs;
[SerializeField] private Transform cardParent;
[SerializeField] private List<CardData> cardPool;
[Header("--- 확정 버튼 설정 ---")]
// ⭐ 이 변수가 있어야 인스펙터에 Apply Button 칸이 보입니다!
[SerializeField] private Button applyButton;
private CardUI _selectedCardUI; // 현재 클릭된 카드 저장용
private void OnEnable()
{
PlayerLevelSystem.OnLevelUp += Show;
// ⭐ 버튼 클릭 시 OnApplyButtonClick 실행하도록 연결
if (applyButton != null) applyButton.onClick.AddListener(OnApplyButtonClick);
}
private void OnDisable()
{
PlayerLevelSystem.OnLevelUp -= Show;
if (applyButton != null) applyButton.onClick.RemoveListener(OnApplyButtonClick);
}
void Show()
{
panel.SetActive(true);
Time.timeScale = 0f;
_selectedCardUI = null;
if (applyButton != null) applyButton.interactable = false; // 시작 땐 버튼 비활성
foreach (Transform child in cardParent)
Destroy(child.gameObject);
int slotCount = 2;
// ⭐ [에러 해결] selectedCards를 여기서 확실히 선언합니다!
List<CardData> selectedCards = new List<CardData>();
if (cardPool.Count >= slotCount)
{
List<CardData> tempPool = new List<CardData>(cardPool);
for (int i = 0; i < slotCount; i++)
{
int idx = Random.Range(0, tempPool.Count);
selectedCards.Add(tempPool[idx]);
tempPool.RemoveAt(idx);
}
}
else // 카드 부족 시 순환
{
for (int i = 0; i < slotCount; i++)
selectedCards.Add(cardPool[i % cardPool.Count]);
}
// 카드 생성 및 셋업
for (int i = 0; i < slotCount; i++)
{
// 프리팹 랜덤 선택 후 생성
CardUI ui = Instantiate(cardPrefabs[Random.Range(0, cardPrefabs.Length)], cardParent);
ui.Setup(selectedCards[i], this); // ⭐ 이제 selectedCards 에러가 뜨지 않습니다!
}
}
// 카드를 클릭했을 때 호출 (선택 상태 표시)
public void OnCardClick(CardUI clickedUI)
{
if (_selectedCardUI != null) _selectedCardUI.SetSelected(false);
_selectedCardUI = clickedUI;
_selectedCardUI.SetSelected(true);
if (applyButton != null) applyButton.interactable = true; // ⭐ 드디어 버튼 활성화!
}
// APPLY 버튼을 눌렀을 때만 최종 적용!
private void OnApplyButtonClick()
{
if (_selectedCardUI == null) return;
_selectedCardUI.ApplyCurrentEffect();
Close();
}
public void Close()
{
Time.timeScale = 1f;
panel.SetActive(false);
}
}