diff options
author | chai <chaifix@163.com> | 2021-04-07 15:38:57 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2021-04-07 15:38:57 +0800 |
commit | ff5a3fbf31db349db11bbc5c60ba199d26780f19 (patch) | |
tree | cd8fec7d2910408470dc9d141dc72ac00cd148bf /Assets/uGUI-2017.1/UnityEngine.UI/EventSystem/ExecuteEvents.cs | |
parent | 6b25723ca33a657882588b2cc3a58101bb9d33e6 (diff) |
*绉诲姩鐩綍
Diffstat (limited to 'Assets/uGUI-2017.1/UnityEngine.UI/EventSystem/ExecuteEvents.cs')
-rw-r--r-- | Assets/uGUI-2017.1/UnityEngine.UI/EventSystem/ExecuteEvents.cs | 368 |
1 files changed, 0 insertions, 368 deletions
diff --git a/Assets/uGUI-2017.1/UnityEngine.UI/EventSystem/ExecuteEvents.cs b/Assets/uGUI-2017.1/UnityEngine.UI/EventSystem/ExecuteEvents.cs deleted file mode 100644 index a749ce8..0000000 --- a/Assets/uGUI-2017.1/UnityEngine.UI/EventSystem/ExecuteEvents.cs +++ /dev/null @@ -1,368 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine.UI; - -namespace UnityEngine.EventSystems -{ - // 最关键的类,调用gameobject对应的回调函数 - public static class ExecuteEvents - { - public delegate void EventFunction<T1>(T1 handler, BaseEventData eventData); - - public static T ValidateEventData<T>(BaseEventData data) where T : class - { - if ((data as T) == null) - throw new ArgumentException(String.Format("Invalid type: {0} passed to event expecting {1}", data.GetType(), typeof(T))); - return data as T; - } - - private static readonly EventFunction<IPointerEnterHandler> s_PointerEnterHandler = Execute; - - private static void Execute(IPointerEnterHandler handler, BaseEventData eventData) - { - handler.OnPointerEnter(ValidateEventData<PointerEventData>(eventData)); - } - - private static readonly EventFunction<IPointerExitHandler> s_PointerExitHandler = Execute; - - private static void Execute(IPointerExitHandler handler, BaseEventData eventData) - { - handler.OnPointerExit(ValidateEventData<PointerEventData>(eventData)); - } - - private static readonly EventFunction<IPointerDownHandler> s_PointerDownHandler = Execute; - - private static void Execute(IPointerDownHandler handler, BaseEventData eventData) - { - handler.OnPointerDown(ValidateEventData<PointerEventData>(eventData)); - } - - private static readonly EventFunction<IPointerUpHandler> s_PointerUpHandler = Execute; - - private static void Execute(IPointerUpHandler handler, BaseEventData eventData) - { - handler.OnPointerUp(ValidateEventData<PointerEventData>(eventData)); - } - - private static readonly EventFunction<IPointerClickHandler> s_PointerClickHandler = Execute; - - private static void Execute(IPointerClickHandler handler, BaseEventData eventData) - { - handler.OnPointerClick(ValidateEventData<PointerEventData>(eventData)); - } - - private static readonly EventFunction<IInitializePotentialDragHandler> s_InitializePotentialDragHandler = Execute; - - private static void Execute(IInitializePotentialDragHandler handler, BaseEventData eventData) - { - handler.OnInitializePotentialDrag(ValidateEventData<PointerEventData>(eventData)); - } - - private static readonly EventFunction<IBeginDragHandler> s_BeginDragHandler = Execute; - - private static void Execute(IBeginDragHandler handler, BaseEventData eventData) - { - handler.OnBeginDrag(ValidateEventData<PointerEventData>(eventData)); - } - - private static readonly EventFunction<IDragHandler> s_DragHandler = Execute; - - private static void Execute(IDragHandler handler, BaseEventData eventData) - { - handler.OnDrag(ValidateEventData<PointerEventData>(eventData)); - } - - private static readonly EventFunction<IEndDragHandler> s_EndDragHandler = Execute; - - private static void Execute(IEndDragHandler handler, BaseEventData eventData) - { - handler.OnEndDrag(ValidateEventData<PointerEventData>(eventData)); - } - - private static readonly EventFunction<IDropHandler> s_DropHandler = Execute; - - private static void Execute(IDropHandler handler, BaseEventData eventData) - { - handler.OnDrop(ValidateEventData<PointerEventData>(eventData)); - } - - private static readonly EventFunction<IScrollHandler> s_ScrollHandler = Execute; - - private static void Execute(IScrollHandler handler, BaseEventData eventData) - { - handler.OnScroll(ValidateEventData<PointerEventData>(eventData)); - } - - private static readonly EventFunction<IUpdateSelectedHandler> s_UpdateSelectedHandler = Execute; - - private static void Execute(IUpdateSelectedHandler handler, BaseEventData eventData) - { - handler.OnUpdateSelected(eventData); - } - - private static readonly EventFunction<ISelectHandler> s_SelectHandler = Execute; - - private static void Execute(ISelectHandler handler, BaseEventData eventData) - { - handler.OnSelect(eventData); - } - - private static readonly EventFunction<IDeselectHandler> s_DeselectHandler = Execute; - - private static void Execute(IDeselectHandler handler, BaseEventData eventData) - { - handler.OnDeselect(eventData); - } - - private static readonly EventFunction<IMoveHandler> s_MoveHandler = Execute; - - private static void Execute(IMoveHandler handler, BaseEventData eventData) - { - handler.OnMove(ValidateEventData<AxisEventData>(eventData)); - } - - private static readonly EventFunction<ISubmitHandler> s_SubmitHandler = Execute; - - private static void Execute(ISubmitHandler handler, BaseEventData eventData) - { - handler.OnSubmit(eventData); - } - - private static readonly EventFunction<ICancelHandler> s_CancelHandler = Execute; - - private static void Execute(ICancelHandler handler, BaseEventData eventData) - { - handler.OnCancel(eventData); - } - - public static EventFunction<IPointerEnterHandler> pointerEnterHandler - { - get { return s_PointerEnterHandler; } - } - - public static EventFunction<IPointerExitHandler> pointerExitHandler - { - get { return s_PointerExitHandler; } - } - - public static EventFunction<IPointerDownHandler> pointerDownHandler - { - get { return s_PointerDownHandler; } - } - - public static EventFunction<IPointerUpHandler> pointerUpHandler - { - get { return s_PointerUpHandler; } - } - - public static EventFunction<IPointerClickHandler> pointerClickHandler - { - get { return s_PointerClickHandler; } - } - - public static EventFunction<IInitializePotentialDragHandler> initializePotentialDrag - { - get { return s_InitializePotentialDragHandler; } - } - - public static EventFunction<IBeginDragHandler> beginDragHandler - { - get { return s_BeginDragHandler; } - } - - public static EventFunction<IDragHandler> dragHandler - { - get { return s_DragHandler; } - } - - public static EventFunction<IEndDragHandler> endDragHandler - { - get { return s_EndDragHandler; } - } - - public static EventFunction<IDropHandler> dropHandler - { - get { return s_DropHandler; } - } - - public static EventFunction<IScrollHandler> scrollHandler - { - get { return s_ScrollHandler; } - } - - public static EventFunction<IUpdateSelectedHandler> updateSelectedHandler - { - get { return s_UpdateSelectedHandler; } - } - - public static EventFunction<ISelectHandler> selectHandler - { - get { return s_SelectHandler; } - } - - public static EventFunction<IDeselectHandler> deselectHandler - { - get { return s_DeselectHandler; } - } - - public static EventFunction<IMoveHandler> moveHandler - { - get { return s_MoveHandler; } - } - - public static EventFunction<ISubmitHandler> submitHandler - { - get { return s_SubmitHandler; } - } - - public static EventFunction<ICancelHandler> cancelHandler - { - get { return s_CancelHandler; } - } - - private static void GetEventChain(GameObject root, IList<Transform> eventChain) - { - eventChain.Clear(); - if (root == null) - return; - - var t = root.transform; - while (t != null) - { - eventChain.Add(t); - t = t.parent; - } - } - - //IEventSystemHandler是所有接口的基类 - private static readonly ObjectPool<List<IEventSystemHandler>> s_HandlerListPool = new ObjectPool<List<IEventSystemHandler>>(null, l => l.Clear()); - - // 向target gameobject发送一个事件,对每个实现了T接口的类执行functor方法(就是接口中定义的回调) - public static bool Execute<T>(GameObject target, BaseEventData eventData, EventFunction<T> functor) where T : IEventSystemHandler - { - var internalHandlers = s_HandlerListPool.Get(); - GetEventList<T>(target, internalHandlers); - // if (s_InternalHandlers.Count > 0) - // Debug.Log("Executinng " + typeof (T) + " on " + target); - - // 拿到实现了T接口的组件,调用对应的方法 - - for (var i = 0; i < internalHandlers.Count; i++) - { - T arg; - try - { - arg = (T)internalHandlers[i]; - } - catch (Exception e) - { - var temp = internalHandlers[i]; - Debug.LogException(new Exception(string.Format("Type {0} expected {1} received.", typeof(T).Name, temp.GetType().Name), e)); - continue; - } - - try - { - functor(arg, eventData); - } - catch (Exception e) - { - Debug.LogException(e); - } - } - - var handlerCount = internalHandlers.Count; - s_HandlerListPool.Release(internalHandlers); - return handlerCount > 0; - } - - /// <summary> - /// Execute the specified event on the first game object underneath the current touch. - /// </summary> - private static readonly List<Transform> s_InternalTransformList = new List<Transform>(30); - - public static GameObject ExecuteHierarchy<T>(GameObject root, BaseEventData eventData, EventFunction<T> callbackFunction) where T : IEventSystemHandler - { - GetEventChain(root, s_InternalTransformList); - - for (var i = 0; i < s_InternalTransformList.Count; i++) - { - var transform = s_InternalTransformList[i]; - if (Execute(transform.gameObject, eventData, callbackFunction)) - return transform.gameObject; - } - return null; - } - - //c component是否匹配类型T且是否被激活 - private static bool ShouldSendToComponent<T>(Component component) where T : IEventSystemHandler - { - var valid = component is T; - if (!valid) - return false; - - var behaviour = component as Behaviour; - if (behaviour != null) - return behaviour.isActiveAndEnabled; - return true; - } - - /// <summary> - /// Get the specified object's event event. - /// </summary> - private static void GetEventList<T>(GameObject go, IList<IEventSystemHandler> results) where T : IEventSystemHandler - { - // Debug.LogWarning("GetEventList<" + typeof(T).Name + ">"); - if (results == null) - throw new ArgumentException("Results array is null", "results"); - - if (go == null || !go.activeInHierarchy) - return; - - var components = ListPool<Component>.Get(); - go.GetComponents(components); - // 遍历所有的组件,找到匹配类型T的 - for (var i = 0; i < components.Count; i++) - { - // 如果不匹配类型T,跳过这个 - if (!ShouldSendToComponent<T>(components[i])) - continue; - - // Debug.Log(string.Format("{2} found! On {0}.{1}", go, s_GetComponentsScratch[i].GetType(), typeof(T))); - results.Add(components[i] as IEventSystemHandler); - } - ListPool<Component>.Release(components); - // Debug.LogWarning("end GetEventList<" + typeof(T).Name + ">"); - } - - /// <summary> - /// Whether the specified game object will be able to handle the specified event. - /// </summary> - public static bool CanHandleEvent<T>(GameObject go) where T : IEventSystemHandler - { - var internalHandlers = s_HandlerListPool.Get(); - GetEventList<T>(go, internalHandlers); - var handlerCount = internalHandlers.Count; - s_HandlerListPool.Release(internalHandlers); - return handlerCount != 0; - } - - /// <summary> - /// Bubble the specified event on the game object, figuring out which object will actually receive the event. - /// </summary> - public static GameObject GetEventHandler<T>(GameObject root) where T : IEventSystemHandler - { - if (root == null) - return null; - - Transform t = root.transform; - while (t != null) - { - if (CanHandleEvent<T>(t.gameObject)) - return t.gameObject; - t = t.parent; - } - return null; - } - } -} |