少年修仙传客户端代码仓库
hch
2025-06-12 204ef05a831c9484e2abc561d27ecbff7c797453
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
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;
    }
}