Projext/Assets/7.Other Code/Card_Scripts/CardUI.cs
2026-01-30 18:27:44 +09:00

73 lines
2.2 KiB
C#

using UnityEngine;
using TMPro;
using UnityEngine.UI;
public class CardUI : MonoBehaviour
{
[SerializeField] private TextMeshProUGUI effectText;
[SerializeField] private Image iconImage;
private CardData cardData;
private LevelUpUIManager uiManager;
private StatType s1, s2;
private int v1, v2;
private bool isRandomCard = false;
public void Setup(CardData data, LevelUpUIManager manager)
{
cardData = data;
uiManager = manager;
RandomStatCardData randomData = cardData as RandomStatCardData;
if (randomData != null)
{
isRandomCard = true;
// 스탯 2개 랜덤 선택 (중복 방지)
s1 = randomData.possibleStats[Random.Range(0, randomData.possibleStats.Length)];
do
{
s2 = randomData.possibleStats[Random.Range(0, randomData.possibleStats.Length)];
}
while (s1 == s2);
// ✅ v1 = 무조건 양수
int positiveMin = Mathf.Max(1, randomData.minValue);
int positiveMax = Mathf.Max(1, randomData.maxValue);
v1 = Random.Range(positiveMin, positiveMax + 1);
// ✅ v2 = 무조건 음수
int negativeMin = Mathf.Min(-1, randomData.minValue);
int negativeMax = -1;
v2 = Random.Range(negativeMin, negativeMax + 1);
effectText.text = $"{s1} +{v1}\n{s2} {v2}";
}
else
{
effectText.text = cardData.GetText();
}
}
public void OnClick()
{
if (isRandomCard)
{
Debug.Log($"[CardClick] clicked = {gameObject.name}");
RandomStatCardData randomData = cardData as RandomStatCardData;
randomData.ApplyToPlayer(s1, v1);
randomData.ApplyToPlayer(s2, v2);
}
else
{
cardData.Execute();
}
// ⭐ [추가] 카드 선택 직후 플레이어의 체력 UI를 강제로 동기화합니다.
// 씬에서 PlayerHealth 스크립트를 찾아 갱신 함수를 실행합니다.
FindObjectOfType<PlayerHealth>()?.RefreshHealthUI();
uiManager.Close();
}
}