少年修仙传客户端代码仓库
lcy
2024-12-16 a39c35fc6449430cd02bccb681c4a0a880e46cd9
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
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class TreasureModelDrag : MonoBehaviour, IBeginDragHandler, IEndDragHandler, IPointerDownHandler,
    IPointerUpHandler, IDragHandler, IPointerClickHandler
{
    Vector2 m_Start;
    bool m_Drag = false;
 
    public event Action<float> OnValueChange;
    public event Action OnDragComplete;
    public event Action OnDragBegine;
 
    public void OnBeginDrag(PointerEventData eventData)
    {
        m_Start = eventData.position;
        m_Drag = true;
        if (OnDragBegine != null)
        {
            OnDragBegine();
        }
    }
 
    public void OnDrag(PointerEventData eventData)
    {
        if (m_Drag)
        {
            var _delta = eventData.position - m_Start;
            m_Start = eventData.position;
            if (OnValueChange != null)
            {
                OnValueChange(_delta.x);
            }
        }
    }
 
    public void OnEndDrag(PointerEventData eventData)
    {
        if (m_Drag && OnDragComplete != null)
        {
            OnDragComplete();
        }
        m_Drag = false;
    }
 
    public void OnPointerClick(PointerEventData eventData)
    {
        if (m_Drag)
        {
            return;
        }
        PassEvent(eventData, ExecuteEvents.pointerClickHandler);
    }
 
    public void OnPointerDown(PointerEventData eventData)
    {
        PassEvent(eventData, ExecuteEvents.pointerDownHandler);
    }
 
    public void OnPointerUp(PointerEventData eventData)
    {
        if (m_Drag && OnDragComplete != null)
        {
            OnDragComplete();
        }
        m_Drag = false;
        PassEvent(eventData, ExecuteEvents.pointerUpHandler);
    }
 
    void PassEvent<T>(PointerEventData data, ExecuteEvents.EventFunction<T> function) where T : IEventSystemHandler
    {
        List<RaycastResult> results = new List<RaycastResult>();
        EventSystem.current.RaycastAll(data, results);
        GameObject current = data.pointerCurrentRaycast.gameObject;
        for (int i = 0; i < results.Count; i++)
        {
            if (current != results[i].gameObject)
            {
                ExecuteEvents.Execute(results[i].gameObject, data, function);
            }
        }
    }
}