2026-02-12 15:23:25 +00:00
|
|
|
|
using UnityEngine; // 유니티 엔진의 기본 기능을 불러올거에요 -> UnityEngine을
|
|
|
|
|
|
using TMPro; // 텍스트메쉬프로 기능을 사용할거에요 -> TMPro를
|
|
|
|
|
|
using UnityEngine.UI; // 유니티 UI 기능을 사용할거에요 -> UnityEngine.UI를
|
2026-01-29 06:58:38 +00:00
|
|
|
|
|
2026-02-12 15:23:25 +00:00
|
|
|
|
public class CardUI : MonoBehaviour // 클래스를 선언할거에요 -> MonoBehaviour를 상속받는 CardUI를
|
2026-01-29 06:58:38 +00:00
|
|
|
|
{
|
2026-02-12 15:23:25 +00:00
|
|
|
|
[SerializeField] private TextMeshProUGUI effectText; // 변수를 선언할거에요 -> 효과 설명 텍스트 UI를 effectText에
|
|
|
|
|
|
[SerializeField] private Image iconImage; // 변수를 선언할거에요 -> 아이콘 이미지 UI를 iconImage에
|
|
|
|
|
|
[SerializeField] private Outline selectionOutline; // 변수를 선언할거에요 -> 선택 시 켜질 테두리 컴포넌트를 selectionOutline에
|
2026-01-29 06:58:38 +00:00
|
|
|
|
|
2026-02-12 15:23:25 +00:00
|
|
|
|
private CardData cardData; // 변수를 선언할거에요 -> 이 UI가 표시할 카드 데이터를 cardData에
|
|
|
|
|
|
private LevelUpUIManager uiManager; // 변수를 선언할거에요 -> UI 매니저를 uiManager에
|
2026-01-29 06:58:38 +00:00
|
|
|
|
|
2026-02-12 15:23:25 +00:00
|
|
|
|
private StatType s1, s2; // 변수를 선언할거에요 -> 랜덤 스탯 타입 2개를 저장할 s1, s2를
|
|
|
|
|
|
private int v1, v2; // 변수를 선언할거에요 -> 랜덤 스탯 수치 2개를 저장할 v1, v2를
|
|
|
|
|
|
private bool isRandomCard = false; // 변수를 초기화할거에요 -> 랜덤 카드 여부를 거짓으로
|
2026-01-29 06:58:38 +00:00
|
|
|
|
|
2026-02-12 15:23:25 +00:00
|
|
|
|
public void Setup(CardData data, LevelUpUIManager manager) // 함수를 선언할거에요 -> 카드를 설정하는 Setup을
|
2026-01-29 06:58:38 +00:00
|
|
|
|
{
|
2026-02-12 15:23:25 +00:00
|
|
|
|
cardData = data; // 값을 저장할거에요 -> 전달받은 카드 데이터를
|
|
|
|
|
|
uiManager = manager; // 값을 저장할거에요 -> 전달받은 매니저를
|
|
|
|
|
|
if (selectionOutline != null) selectionOutline.enabled = false; // 조건이 맞으면 실행할거에요 -> 테두리가 있다면 끄기를
|
2026-01-29 06:58:38 +00:00
|
|
|
|
|
2026-02-01 15:49:12 +00:00
|
|
|
|
// (랜덤 스탯 카드 데이터 처리 로직 - 기존 코드 유지)
|
2026-02-12 15:23:25 +00:00
|
|
|
|
RandomStatCardData randomData = cardData as RandomStatCardData; // 형변환을 시도할거에요 -> 카드 데이터를 랜덤 스탯 카드 데이터로
|
|
|
|
|
|
if (randomData != null) // 조건이 맞으면 실행할거에요 -> 랜덤 스탯 카드가 맞다면
|
2026-01-29 06:58:38 +00:00
|
|
|
|
{
|
2026-02-12 15:23:25 +00:00
|
|
|
|
isRandomCard = true; // 상태를 바꿀거에요 -> 랜덤 카드 상태를 참으로
|
|
|
|
|
|
s1 = randomData.possibleStats[Random.Range(0, randomData.possibleStats.Length)]; // 값을 뽑을거에요 -> 첫 번째 스탯을 랜덤으로
|
|
|
|
|
|
do { s2 = randomData.possibleStats[Random.Range(0, randomData.possibleStats.Length)]; } while (s1 == s2); // 반복할거에요 -> 두 번째 스탯이 첫 번째와 다를 때까지 뽑기를
|
|
|
|
|
|
v1 = Random.Range(Mathf.Max(1, randomData.minValue), Mathf.Max(1, randomData.maxValue) + 1); // 값을 뽑을거에요 -> 첫 번째 수치를 범위 내 랜덤으로
|
|
|
|
|
|
v2 = Random.Range(Mathf.Min(-1, randomData.minValue), -1 + 1); // 값을 뽑을거에요 -> 두 번째 수치를 (음수 범위 등 고려하여) 랜덤으로
|
|
|
|
|
|
effectText.text = $"{s1} +{v1}\n{s2} {v2}"; // 텍스트를 설정할거에요 -> 뽑힌 스탯과 수치를 UI에 표시하도록
|
2026-01-29 06:58:38 +00:00
|
|
|
|
}
|
2026-02-12 15:23:25 +00:00
|
|
|
|
else { effectText.text = cardData.GetText(); } // 조건이 틀리면 실행할거에요 -> 일반 카드라면 기본 텍스트를 표시하도록
|
2026-02-01 15:49:12 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 카드 클릭 시 매니저에게 알림
|
2026-02-12 15:23:25 +00:00
|
|
|
|
public void OnClick() { uiManager.OnCardClick(this); } // 함수를 실행할거에요 -> 매니저에게 이 카드가 클릭되었음을 알리기를
|
2026-02-01 15:49:12 +00:00
|
|
|
|
|
|
|
|
|
|
// 선택 시 하이라이트 연출
|
2026-02-12 15:23:25 +00:00
|
|
|
|
public void SetSelected(bool isSelected) // 함수를 선언할거에요 -> 선택 상태를 설정하는 SetSelected를
|
2026-02-01 15:49:12 +00:00
|
|
|
|
{
|
2026-02-12 15:23:25 +00:00
|
|
|
|
if (selectionOutline != null) selectionOutline.enabled = isSelected; // 조건이 맞으면 실행할거에요 -> 테두리를 켜거나 끄기를
|
|
|
|
|
|
transform.localScale = isSelected ? Vector3.one * 1.05f : Vector3.one; // 크기를 조절할거에요 -> 선택되면 살짝 키우고 아니면 원래대로
|
2026-01-29 06:58:38 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-02-01 15:49:12 +00:00
|
|
|
|
// APPLY 버튼 누를 때 최종 실행될 효과
|
2026-02-12 15:23:25 +00:00
|
|
|
|
public void ApplyCurrentEffect() // 함수를 선언할거에요 -> 효과를 최종 적용하는 ApplyCurrentEffect를
|
2026-01-29 06:58:38 +00:00
|
|
|
|
{
|
2026-02-12 15:23:25 +00:00
|
|
|
|
if (isRandomCard) // 조건이 맞으면 실행할거에요 -> 랜덤 카드라면
|
2026-01-29 06:58:38 +00:00
|
|
|
|
{
|
2026-02-12 15:23:25 +00:00
|
|
|
|
RandomStatCardData rd = cardData as RandomStatCardData; // 형변환할거에요 -> 데이터를 랜덤 카드 데이터로
|
|
|
|
|
|
rd.ApplyToPlayer(s1, v1); rd.ApplyToPlayer(s2, v2); // 실행할거에요 -> 저장해둔 스탯(s1, s2)과 수치(v1, v2)를 플레이어에게 적용하기를
|
2026-01-29 06:58:38 +00:00
|
|
|
|
}
|
2026-02-12 15:23:25 +00:00
|
|
|
|
else { cardData.Execute(); } // 조건이 틀리면 실행할거에요 -> 일반 카드라면 기본 실행 함수를
|
|
|
|
|
|
FindObjectOfType<PlayerHealth>()?.RefreshHealthUI(); // 실행할거에요 -> 체력 UI 갱신을 (혹시 체력이 변했을 수 있으니)
|
2026-01-29 06:58:38 +00:00
|
|
|
|
}
|
|
|
|
|
|
}
|