92 lines
2.5 KiB
C#
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);
|
|
}
|
|
} |