using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
using UnityEngine.EventSystems;
|
using System;
|
using CJ.Wait;
|
|
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;
|
}
|
}
|
/// <summary>
|
/// 用于处理ScrollRect中点击事件和拖动事件的冲突
|
/// </summary>
|
public PointerEvtDataDelegate OnScrollBeginDrag;
|
/// <summary>
|
/// 用于处理ScrollRect中点击事件和拖动事件的冲突
|
/// </summary>
|
private PointerEvtDataDelegate m_OnScrollDrag;
|
public PointerEvtDataDelegate OnScrollDrag {
|
get { return m_OnScrollDrag; }
|
set {
|
//m_OnScroll= value != null;
|
m_OnScrollDrag = value;
|
}
|
}
|
/// <summary>
|
/// 用于处理ScrollRect中点击事件和拖动事件的冲突
|
/// </summary>
|
public PointerEvtDataDelegate OnScrollEndDrag;
|
/// <summary>
|
/// 鼠标按下事件
|
/// </summary>
|
public OneParamDelegate OnDown;
|
/// <summary>
|
/// 鼠标放开事件
|
/// </summary>
|
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<UIEventTrigger>();
|
if(listener==null) {
|
listener = go.AddComponent<UIEventTrigger>();
|
}
|
listener.enabled = true;
|
return listener;
|
}
|
/// <summary>
|
/// 重载点击UI点击的事件,包含所有的UI组件,并传递被点击的物体
|
/// </summary>
|
/// <param name="eventData"></param>
|
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;
|
}
|
|
/// <summary>
|
/// 开始拖动
|
/// </summary>
|
/// <param name="eventData"></param>
|
private Vector2 m_BeginSrPos = Vector2.zero;
|
public override void OnBeginDrag(PointerEventData eventData)
|
{
|
if (null != OnScrollBeginDrag && enabled)
|
{
|
m_BeginSrPos = eventData.position;
|
OnScrollBeginDrag(eventData);
|
}
|
|
}
|
/// <summary>
|
/// 拖动中
|
/// </summary>
|
/// <param name="eventData"></param>
|
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);
|
}
|
}
|
/// <summary>
|
/// 结束拖动
|
/// </summary>
|
/// <param name="eventData"></param>
|
public override void OnEndDrag(PointerEventData eventData)
|
{
|
if (null != OnScrollEndDrag && enabled)
|
{
|
m_OnScroll = false;
|
OnScrollEndDrag(eventData);
|
}
|
}
|
/// <summary>
|
/// 鼠标按下
|
/// </summary>
|
/// <param name="eventData"></param>
|
public override void OnPointerDown(PointerEventData eventData)
|
{
|
if (null != OnDown && enabled) OnDown(gameObject);
|
}
|
/// <summary>
|
/// 鼠标放开
|
/// </summary>
|
/// <param name="eventData"></param>
|
public override void OnPointerUp(PointerEventData eventData)
|
{
|
if (null != OnUp && enabled) OnUp(gameObject);
|
}
|
|
public static UIEventTrigger Contains(GameObject go)
|
{
|
return go.GetComponent<UIEventTrigger>();
|
}
|
|
private void OnDisable()
|
{
|
m_DoubleClick = false;
|
continueClick = true;
|
m_OnScroll = false;
|
}
|
}
|