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