Files
Genesis_Unity/Assets/02_Scripts/UI/SkillWindow/SkillEntry.cs

78 lines
2.2 KiB
C#

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<CanvasGroup>();
if (_canvasGroup == null)
_canvasGroup = gameObject.AddComponent<CanvasGroup>();
}
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<QuickSlot>();
if (slot != null && Data != null)
{
slot.SetEntry(Data);
}
}
// 엔트리는 항상 제자리로 복귀 (원본은 목록에 남아있어야 함)
transform.SetParent(_originalParent);
transform.localPosition = _originalLocalPos;
}
}