using UnityEngine; using UnityEngine.UI; using TMPro; using EerieVillage.Skills; namespace EerieVillage.MyUI { /// /// BT12-MVP-A 영역 단일 카드 슬롯 — PD 첨부 예시 ("기술 선택" 화면) 정합. /// SkillSelectionUI 영역 3개 자식. /// /// Phase 2-D 정정 (2026-05-09) — SkillCardPlaceholder → ActiveSkillData 전환. /// SkillDataAsset base에 rarity 필드 부재 → 배너 고정 갈색 (BT12-MVP-A Phase 2-2 영역 정합). /// /// PD 예시 카드 구성: /// 1. 상단 색상 배너 (갈색 고정 — rarity 미지원) /// 2. 카드 이름 (한글) /// 3. 원형 아이콘 + 동심원 빛 효과 /// 4. "레벨 N" 표시 /// 5. 효과 설명 3~4 라인 /// public class SkillCardSlot : MonoBehaviour { [Header("PD 예시 정합 — 카드 구성")] [SerializeField] Image _topBanner; // 1. 상단 색상 배너 (갈색 고정) [SerializeField] TMP_Text _nameText; // 2. 카드 이름 (한글) [SerializeField] Image _icon; // 3. 원형 아이콘 [SerializeField] Image _glowEffect; // 3. 동심원 빛 효과 [SerializeField] TMP_Text _levelText; // 4. 레벨 표시 [SerializeField] TMP_Text _descriptionText; // 5. 효과 설명 [Header("인터랙션")] [SerializeField] Button _clickArea; // 카드 전체 클릭 영역 [SerializeField] GameObject _highlightFrame; // 선택 시 활성 [Header("배너 고정 색상 (rarity 미지원 — 갈색 통일)")] [SerializeField] Color _bannerColor = new Color(0.5f, 0.35f, 0.15f, 1f); // 갈색 고정 public ActiveSkillData Card { get; private set; } public void Bind(ActiveSkillData card, System.Action onClick) { Card = card; if (card == null) { gameObject.SetActive(false); return; } gameObject.SetActive(true); // 2. 카드 이름 (DisplayName — SkillDataAsset base PascalCase) if (_nameText != null) _nameText.text = card.DisplayName; // 3. 아이콘 (sprite null 시 image enable=false) if (_icon != null) { _icon.sprite = card.Icon; _icon.enabled = card.Icon != null; } // 5. 효과 설명 if (_descriptionText != null) _descriptionText.text = card.Description; // 1. 상단 색상 배너 — rarity 필드 부재 → 갈색 고정 if (_topBanner != null) _topBanner.color = _bannerColor; // 4. 레벨 표시 — SkillDataAsset base에 currentLevel 없음 → "레벨 1" 고정 표시 if (_levelText != null) { _levelText.text = "레벨 1"; _levelText.color = Color.white; } // 클릭 영역 if (_clickArea != null) { _clickArea.onClick.RemoveAllListeners(); _clickArea.onClick.AddListener(() => onClick?.Invoke()); } SetHighlight(false); } public void SetHighlight(bool active) { if (_highlightFrame != null) _highlightFrame.SetActive(active); } } }