少年修仙传客户端代码仓库
client_linchunjie
2018-08-23 522ca3468a56c88cb15eaa428eb7499d3dba386f
UI/Manager/UIEventTrigger.cs
@@ -1,192 +1,192 @@
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;
    }
}
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;
    }
}