示例#1
0
        protected bool CanHandleEvent(EventTriggerType _nID, GameObject _specGO)
        {
            switch (_nID)
            {
            case EventTriggerType.PointerUp:
                return(ExecuteEvents.CanHandleEvent <IPointerUpHandler>(_specGO));

            case EventTriggerType.PointerDown:
                return(ExecuteEvents.CanHandleEvent <IPointerDownHandler>(_specGO));

            case EventTriggerType.PointerClick:
                return(ExecuteEvents.CanHandleEvent <IPointerClickHandler>(_specGO));

            default:
                Debug.LogWarning("目前能冒泡的事件只使用Up,Down,Click事件");
                break;
            }

            return(false);
        }
示例#2
0
        public static GameObject GetEventHandler <T>(GameObject root) where T : IEventSystemHandler
        {
            GameObject result;

            if (root == null)
            {
                result = null;
            }
            else
            {
                Transform transform = root.transform;
                while (transform != null)
                {
                    if (ExecuteEvents.CanHandleEvent <T>(transform.gameObject))
                    {
                        return(transform.gameObject);
                    }
                    transform = transform.parent;
                }
                result = null;
            }
            return(result);
        }
        protected override void ProcessDrag(PointerEventData pointerEvent)
        {        /*	used in StandaloneInputModule.ProcessToucheEvents() and StandaloneInputModule.ProcessMouseEvent(int id)
                  *     call OnBeginDrag
                  *     call OnPointerUp, if for some reason pointerPress != pointerDrag
                  *     call OnDrag
                  *
                  *     pointerDrag could be DragHandler, HorizontalDragHandler, or VerticalDragHandler
                  */
            if (pointerEvent.IsPointerMoving() && Cursor.lockState != CursorLockMode.Locked && !(pointerEvent.pointerDrag == null))
            {
                if (!pointerEvent.dragging && ShouldStartDrag(pointerEvent.pressPosition, pointerEvent.position, (float)base.eventSystem.pixelDragThreshold, pointerEvent.useDragThreshold))
                {
                    ExecuteEvents.Execute <IBeginDragHandler>(pointerEvent.pointerDrag, pointerEvent, ExecuteEvents.beginDragHandler);
                    pointerEvent.dragging = true;
                }
                if (pointerEvent.dragging)
                {
                    // if (pointerEvent.pointerPress != pointerEvent.pointerDrag)
                    // {
                    //  ExecuteEvents.Execute<IPointerUpHandler>(pointerEvent.pointerPress, pointerEvent, ExecuteEvents.pointerUpHandler);
                    //  pointerEvent.pointerPress = null;
                    //  pointerEvent.eligibleForClick = false;
                    //  pointerEvent.rawPointerPress = null;
                    // }
                    print("pointerDrag is " + pointerEvent.pointerDrag.gameObject.name);
                    if (!ExecuteEvents.CanHandleEvent <IHorizontalDragHandler>(pointerEvent.pointerDrag) && !ExecuteEvents.CanHandleEvent <IVerticalDragHandler>(pointerEvent.pointerDrag) && ExecuteEvents.CanHandleEvent <IDragHandler>(pointerEvent.pointerDrag))
                    {
                        ExecuteEvents.Execute <IDragHandler>(pointerEvent.pointerDrag, pointerEvent, ExecuteEvents.dragHandler);
                    }
                    else
                    {
                        float thresh = (float)base.eventSystem.pixelDragThreshold;

                        if (pointerEvent.delta.sqrMagnitude > (thresh * thresh))
                        {
                            if (Mathf.Abs(Vector2.Dot(Vector2.right, pointerEvent.delta.normalized)) > Mathf.Cos(45f * Mathf.Deg2Rad))
                            {
                                if (ExecuteEvents.CanHandleEvent <IHorizontalDragHandler>(pointerEvent.pointerDrag))
                                {
                                    ExecuteEvents.Execute <IHorizontalDragHandler>(pointerEvent.pointerDrag, pointerEvent, CustomEvents.horizontalDragHandler);
                                }
                                else
                                {
                                    GameObject prevPointerDrag = pointerEvent.pointerDrag;
                                    pointerEvent.pointerDrag = ExecuteEvents.GetEventHandler <IHorizontalDragHandler>(pointerEvent.pointerCurrentRaycast.gameObject);
                                    if (pointerEvent.pointerDrag != null)
                                    {
                                        // print("switch to h");

                                        ExecuteEvents.Execute <IEndDragHandler>(prevPointerDrag, pointerEvent, ExecuteEvents.endDragHandler);

                                        ExecuteEvents.Execute <IInitializePotentialDragHandler>(pointerEvent.pointerDrag, pointerEvent, ExecuteEvents.initializePotentialDrag);
                                        ExecuteEvents.Execute <IBeginDragHandler>(pointerEvent.pointerDrag, pointerEvent, ExecuteEvents.beginDragHandler);
                                        ExecuteEvents.Execute <IHorizontalDragHandler>(pointerEvent.pointerDrag, pointerEvent, CustomEvents.horizontalDragHandler);
                                    }
                                    else
                                    {
                                        // print("no handler for h");
                                        pointerEvent.pointerDrag = prevPointerDrag;
                                        ExecuteEvents.Execute <IDragHandler>(pointerEvent.pointerDrag, pointerEvent, ExecuteEvents.dragHandler);
                                    }
                                }
                            }
                            else
                            {
                                if (ExecuteEvents.CanHandleEvent <IVerticalDragHandler>(pointerEvent.pointerDrag))
                                {
                                    ExecuteEvents.Execute <IVerticalDragHandler>(pointerEvent.pointerDrag, pointerEvent, CustomEvents.verticalDragHandler);
                                }
                                else
                                {
                                    GameObject prevPointerDrag = pointerEvent.pointerDrag;
                                    pointerEvent.pointerDrag = ExecuteEvents.GetEventHandler <IVerticalDragHandler>(pointerEvent.pointerCurrentRaycast.gameObject);
                                    if (pointerEvent.pointerDrag != null)
                                    {
                                        // print("switch to v");
                                        ExecuteEvents.Execute <IEndDragHandler>(prevPointerDrag, pointerEvent, ExecuteEvents.endDragHandler);

                                        ExecuteEvents.Execute <IInitializePotentialDragHandler>(pointerEvent.pointerDrag, pointerEvent, ExecuteEvents.initializePotentialDrag);
                                        ExecuteEvents.Execute <IBeginDragHandler>(pointerEvent.pointerDrag, pointerEvent, ExecuteEvents.beginDragHandler);
                                        ExecuteEvents.Execute <IVerticalDragHandler>(pointerEvent.pointerDrag, pointerEvent, CustomEvents.verticalDragHandler);
                                    }
                                    else
                                    {
                                        // print("no handler for v");
                                        pointerEvent.pointerDrag = prevPointerDrag;
                                        ExecuteEvents.Execute <IDragHandler>(pointerEvent.pointerDrag, pointerEvent, ExecuteEvents.dragHandler);
                                    }
                                }
                            }
                        }
                        else
                        {
                            // print("under thresh");

                            if (Mathf.Abs(Vector2.Dot(Vector2.right, pointerEvent.delta.normalized)) > Mathf.Cos(45f * Mathf.Deg2Rad))
                            {
                                if (ExecuteEvents.CanHandleEvent <IHorizontalDragHandler>(pointerEvent.pointerDrag))
                                {
                                    ExecuteEvents.Execute <IHorizontalDragHandler>(pointerEvent.pointerDrag, pointerEvent, CustomEvents.horizontalDragHandler);
                                }
                                else
                                {
                                    ExecuteEvents.Execute <IDragHandler>(pointerEvent.pointerDrag, pointerEvent, ExecuteEvents.dragHandler);
                                }
                            }
                            else
                            {
                                if (ExecuteEvents.CanHandleEvent <IVerticalDragHandler>(pointerEvent.pointerDrag))
                                {
                                    ExecuteEvents.Execute <IVerticalDragHandler>(pointerEvent.pointerDrag, pointerEvent, CustomEvents.verticalDragHandler);
                                }
                                else
                                {
                                    ExecuteEvents.Execute <IDragHandler>(pointerEvent.pointerDrag, pointerEvent, ExecuteEvents.dragHandler);
                                }
                            }
                        }
                    }
                    prevDelta = pointerEvent.delta;
                }
            }
        }