using TMPro; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; public class SkillEntry : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler { [SerializeField] private Image _iconImage; [SerializeField] private TextMeshProUGUI _nameText; public SkillData Data { get; private set; } private Transform _dragTransform; private Transform _originalParent; private CanvasGroup _canvasGroup; private Vector3 _originalLocalPos; private void Awake() { _canvasGroup = GetComponent(); if (_canvasGroup == null) _canvasGroup = gameObject.AddComponent(); } public void SetData(SkillData data) { Data = data; if (_iconImage != null) { _iconImage.sprite = data != null ? data.Icon : null; _iconImage.enabled = data != null && data.Icon != null; } if (_nameText != null) _nameText.text = data != null ? data.EntryName : ""; } public void OnBeginDrag(PointerEventData eventData) { if (Data == null) { eventData.pointerDrag = null; return; } _dragTransform = GameManager.Instance.InGameUI.DragCanvas; _originalParent = transform.parent; _originalLocalPos = transform.localPosition; transform.SetParent(_dragTransform); _canvasGroup.blocksRaycasts = false; } public void OnDrag(PointerEventData eventData) { transform.position = eventData.position; } public void OnEndDrag(PointerEventData eventData) { _canvasGroup.blocksRaycasts = true; // 드롭된 오브젝트 판정 — 퀵슬롯이면 등록 GameObject hovered = eventData.pointerEnter; if (hovered != null) { QuickSlot slot = hovered.GetComponentInParent(); if (slot != null && Data != null) { slot.SetEntry(Data); } } // 엔트리는 항상 제자리로 복귀 (원본은 목록에 남아있어야 함) transform.SetParent(_originalParent); transform.localPosition = _originalLocalPos; } }