| using System.Collections;  | 
| using System.Collections.Generic;  | 
| using UnityEngine;  | 
| using UnityEngine.EventSystems;  | 
| using CJ.Wait;  | 
| 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;  | 
|         }  | 
|     }  | 
|     /// <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;  | 
|     }  | 
| }  |