Files
Studio/Assets/Scripts/XED/UI/UI_DragDrop.cs
2025-02-19 17:43:14 +09:00

59 lines
1.6 KiB
C#

using System;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
using UnityEngine.UI.Extensions;
using WI.UI;
using static DrawLine;
namespace XED.UI
{
public class UI_DragDrop : MonoBehaviour,IBeginDragHandler,IDragHandler,IEndDragHandler,IDropHandler
{
protected UI_DragDrop Clone;
public float cloneAlpha=1f;
public Action<UIBase, UIBase> OnDropItem;
public virtual void OnBeginDrag(PointerEventData eventData)
{
CreateClone();
}
public virtual void Clear()
{
}
UI_DragDrop CreateClone()
{
Clone = Instantiate(gameObject, gameObject.transform.parent).GetComponent<UI_DragDrop>();
var CI = Clone.GetComponentsInChildren<Image>();
foreach (var c in CI)
{
c.color = new Color(c.color.r, c.color.g, c.color.b, cloneAlpha);
}
return Clone;
}
public virtual void OnDrag(PointerEventData eventData)
{
Clone.transform.position = Input.mousePosition;
}
public virtual void OnEndDrag(PointerEventData eventData)
{
Destroy(Clone);
}
public virtual void OnDrop(PointerEventData eventData)
{
if (eventData.pointerDrag != null)
{
UI_DragDrop draggedItem = eventData.pointerDrag.GetComponent<UI_DragDrop>();
if (draggedItem)
{
OnDropItem?.Invoke(gameObject.GetComponent<UIBase>(), draggedItem.GetComponent<UIBase>());
}
}
}
}
}