using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; public class UIDragDropBehaviour : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IPointerExitHandler, IPointerEnterHandler { public static bool draging = false; public static int dragData = 0; [HideInInspector] public int data; const float dragDelay = 0.2f; bool m_AllowDragDrop = true; bool m_OnPress = false; bool m_AllowClick = false; float m_Time = 0.0f; public event Action onClick; public void Init(int data) { this.data = data; } public void SetDragDropState(bool allow) { m_AllowDragDrop = allow; } public void OnPointerDown(PointerEventData eventData) { draging = false; m_AllowClick = true; m_Time = 0f; if (!m_AllowDragDrop) { return; } m_OnPress = true; } public void OnPointerEnter(PointerEventData eventData) { m_AllowClick = true; } public void OnPointerExit(PointerEventData eventData) { m_AllowClick = false; } public void OnPointerUp(PointerEventData eventData) { var position = Input.mousePosition; if (!draging && m_AllowClick) { if (onClick != null) { onClick(data); } } m_OnPress = false; } private void LateUpdate() { if (m_OnPress && !draging) { m_Time += Time.deltaTime; if (m_Time > dragDelay) { dragData = data; draging = true; m_Time = 0; m_OnPress = false; } } } }