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