using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using System;
public class UIEventTrigger : EventTrigger {
public delegate void ObjectDelegate(GameObject go,PointerEventData eventData);
public delegate void OneParamDelegate(GameObject go);
public delegate void PointerEvtDataDelegate(PointerEventData eventData);
public delegate void NoParamDelegate();
public ObjectDelegate OnClick;
public OneParamDelegate OneParaClick;
private bool doubleClick = false;
private bool m_DoubleClick = false;
private bool continueClick = true;
private NoParamDelegate m_OnDoubleClick;
private bool m_OnScroll = false;
public NoParamDelegate OnDoubleClick {
get { return m_OnDoubleClick; }
set {
doubleClick = value!=null;
m_OnDoubleClick = value;
}
}
///
/// 用于处理ScrollRect中点击事件和拖动事件的冲突
///
public PointerEvtDataDelegate OnScrollBeginDrag;
///
/// 用于处理ScrollRect中点击事件和拖动事件的冲突
///
private PointerEvtDataDelegate m_OnScrollDrag;
public PointerEvtDataDelegate OnScrollDrag {
get { return m_OnScrollDrag; }
set {
//m_OnScroll= value != null;
m_OnScrollDrag = value;
}
}
///
/// 用于处理ScrollRect中点击事件和拖动事件的冲突
///
public PointerEvtDataDelegate OnScrollEndDrag;
///
/// 鼠标按下事件
///
public OneParamDelegate OnDown;
///
/// 鼠标放开事件
///
public OneParamDelegate OnUp;
public NoParamDelegate OnNoParamsClick;
public static PointerEventData EventData;
private void Awake()
{
if (EventData == null) EventData =new PointerEventData(EventSystem.current);
}
public static UIEventTrigger Get(GameObject go)
{
UIEventTrigger listener = null;
listener = go.GetComponent();
if(listener==null) {
listener = go.AddComponent();
}
listener.enabled = true;
return listener;
}
///
/// 重载点击UI点击的事件,包含所有的UI组件,并传递被点击的物体
///
///
public override void OnPointerClick(PointerEventData eventData)
{
if (CheckDouble()) return;
if (CheckScroll()) return;
if (null != OnClick && enabled) OnClick(gameObject, eventData);
if (null != OneParaClick && enabled) OneParaClick(gameObject);
if (null != OnNoParamsClick && enabled) OnNoParamsClick();
}
private bool CheckDouble()
{
if (!doubleClick) return doubleClick;
if (!continueClick) return doubleClick;
if (m_DoubleClick) {
OnDoubleClick();
continueClick = false;
m_DoubleClick = false;
}
else {
this.OnWaitCompelete(OnDoubleWait);
this.SetWait(0.3f);
this.DoWaitRestart();
m_DoubleClick = true;
}
return doubleClick;
}
private bool CheckScroll()
{
return m_OnScroll;
}
private void OnDoubleWait(Component comp)
{
if (m_DoubleClick) {
if (null != OneParaClick && enabled) OneParaClick(gameObject);
if (null != OnNoParamsClick && enabled) OnNoParamsClick();
}
continueClick = true;
m_DoubleClick = false;
}
///
/// 开始拖动
///
///
private Vector2 m_BeginSrPos = Vector2.zero;
public override void OnBeginDrag(PointerEventData eventData)
{
if (null != OnScrollBeginDrag && enabled)
{
m_BeginSrPos = eventData.position;
OnScrollBeginDrag(eventData);
}
}
///
/// 拖动中
///
///
public override void OnDrag(PointerEventData eventData)
{
if (null != OnScrollDrag && enabled)
{
if (Vector2.Distance(m_BeginSrPos, eventData.position) < 10.0f) {
return;
}
m_OnScroll = true;
OnScrollDrag(eventData);
}
}
///
/// 结束拖动
///
///
public override void OnEndDrag(PointerEventData eventData)
{
if (null != OnScrollEndDrag && enabled)
{
m_OnScroll = false;
OnScrollEndDrag(eventData);
}
}
///
/// 鼠标按下
///
///
public override void OnPointerDown(PointerEventData eventData)
{
if (null != OnDown && enabled) OnDown(gameObject);
}
///
/// 鼠标放开
///
///
public override void OnPointerUp(PointerEventData eventData)
{
if (null != OnUp && enabled) OnUp(gameObject);
}
public static UIEventTrigger Contains(GameObject go)
{
return go.GetComponent();
}
private void OnDisable()
{
m_DoubleClick = false;
continueClick = true;
m_OnScroll = false;
}
}