| 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<int> 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; | 
|             } | 
|         } | 
|     } | 
| } |