Projext/Assets/7.Other Code/LevelUpUIManager.cs
2026-01-29 15:58:38 +09:00

92 lines
2.5 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LevelUpUIManager : MonoBehaviour
{
[SerializeField] private GameObject panel;
[SerializeField] private CardUI[] cardPrefabs;
[SerializeField] private Transform cardParent;
[SerializeField] private List<CardData> cardPool;
private void OnEnable()
{
PlayerLevelSystem.OnLevelUp += Show;
}
private void OnDisable()
{
PlayerLevelSystem.OnLevelUp -= Show;
}
void Show()
{
panel.SetActive(true);
Time.timeScale = 0f;
foreach (Transform child in cardParent)
Destroy(child.gameObject);
int slotCount = 2;
// ===============================
// 🔒 방어 코드
// ===============================
if (cardPool.Count == 0)
{
Debug.LogWarning("cardPool이 비어 있습니다.");
return;
}
if (cardPrefabs.Length < slotCount)
{
Debug.LogError("cardPrefabs 개수가 slotCount보다 적습니다.");
return;
}
// ===============================
// 카드 데이터 선택
// ===============================
List<CardData> selectedCards = new List<CardData>();
if (cardPool.Count >= slotCount)
{
List<CardData> tempCardPool = new List<CardData>(cardPool);
for (int i = 0; i < slotCount; i++)
{
int index = Random.Range(0, tempCardPool.Count);
selectedCards.Add(tempCardPool[index]);
tempCardPool.RemoveAt(index);
}
}
else
{
// ⭐ 카드 부족하면 순환
for (int i = 0; i < slotCount; i++)
{
selectedCards.Add(cardPool[i % cardPool.Count]);
}
}
// ===============================
// ⭐ 카드 프리팹 중복 제거
// ===============================
List<CardUI> tempPrefabs = new List<CardUI>(cardPrefabs);
for (int i = 0; i < slotCount; i++)
{
int prefabIndex = Random.Range(0, tempPrefabs.Count);
CardUI prefab = tempPrefabs[prefabIndex];
tempPrefabs.RemoveAt(prefabIndex);
CardUI ui = Instantiate(prefab, cardParent);
ui.Setup(selectedCards[i], this);
}
}
public void Close()
{
Time.timeScale = 1f;
panel.SetActive(false);
}
}