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