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