コード例 #1
0
        void ProcessOthers(PointerInput input)
        {
            // Process scrolling
            if (input.isScrolling && !input.isScrollInertiaInEffect)
            {
                if (input.scrollObject == null)
                {
                    input.scrollObject = ExecuteEvents.ExecuteHierarchy(input.hitObject, input.eventData, ExecuteEvents.scrollHandler);
                    if (input.scrollObject != null)
                    {
                        input.scrollRect = input.scrollObject.GetComponent <UnityEngine.UI.ScrollRect>();
                    }
                }
                else
                {
                    ExecuteEvents.Execute(input.scrollObject, input.eventData, ExecuteEvents.scrollHandler);
                }
            }
            else if (input.isScrollInertiaInEffect && input.scrollObject != null)
            {
                if (input.scrollRect != null)
                {
                    var vPos = input.scrollRect.verticalNormalizedPosition;
                    if (vPos < 0 || vPos > 1 || Mathf.Approximately(vPos, 0) || Mathf.Approximately(vPos, 1))
                    {
                        input.isScrollInertiaInEffect = false;
                        input.scrollObject            = null;
                        return;
                    }
                }

                ExecuteEvents.Execute(input.scrollObject, input.eventData, ExecuteEvents.scrollHandler);
            }
            else
            {
                input.scrollObject = null;
            }
        }
コード例 #2
0
        void ProcessDrag(PointerInput input)
        {
            var eventData = input.eventData;

            // Begin dragging if pointer down on an object that has drag handler
            if (input.buttonDown && input.hitObject != null && eventData.pointerDrag == null)
            {
                // Obtain the drag handler if available
                eventData.pointerDrag = ExecuteEvents.GetEventHandler <IDragHandler>(input.hitObject);
            }

            // Begin drag?
            if (eventData.pointerDrag != null && !eventData.dragging && ShouldBeginDrag(input))
            {
                eventData.dragging = true;
                ExecuteEvents.Execute(eventData.pointerDrag, eventData, ExecuteEvents.beginDragHandler);
            }

            // End drag on pointer up
            if (input.buttonUp && eventData.pointerDrag != null)
            {
                if (eventData.dragging)
                {
                    ExecuteEvents.Execute(eventData.pointerDrag, eventData, ExecuteEvents.endDragHandler);
                    eventData.dragging = false;
                }

                eventData.pointerDrag = null;
            }

            // Send drag event
            if (eventData.dragging)
            {
                ExecuteEvents.Execute(eventData.pointerDrag, eventData, ExecuteEvents.dragHandler);
            }
        }
コード例 #3
0
 void InvokePointerUp(PointerInput input)
 {
     ExecuteEvents.Execute(input.eventData.pointerPress, input.eventData, ExecuteEvents.pointerUpHandler);
     input.eventData.pointerPress = null;
 }
コード例 #4
0
        void ProcessEnterExit(PointerInput input)
        {
            var eventData  = input.eventData;
            var pointerHit = input.eventData.pointerCurrentRaycast.gameObject;

            //we are pointing at a new object (or nothing), so clear the current highlight list
            ClearHighlights();
            //if we are pointing at an object, try adding an object highlight
            if (pointerHit)
            {
                HighlightObject(pointerHit);
            }

            // Handle hover enter / exit when the pointerHit differs from previously hovered object
            if (input.hitObject != pointerHit)
            {
                var oldHovered = eventData.hovered;
                var newHovered = new List <GameObject>();

                // Handle pointer enter
                if (pointerHit != null)
                {
                    // Get the first event handler and set it as pointerEnter
                    var pointerEnterHandler = ExecuteEvents.GetEventHandler <IPointerEnterHandler>(pointerHit);
                    eventData.pointerEnter = pointerEnterHandler;

                    // Loop through object hierarchy to find all hovered objects with a pointer enter handler
                    while (pointerEnterHandler != null)
                    {
                        // Add handler to the new hovered list
                        newHovered.Add(pointerEnterHandler);

                        // Remove the item from the old list so the pointerExit is not called on it
                        // Invoke pointer enter if haven't done so before
                        if (oldHovered.Exists(x => x.Equals(pointerEnterHandler)))
                        {
                            oldHovered.Remove(pointerEnterHandler);
                        }
                        else
                        {
                            ExecuteEvents.Execute(pointerEnterHandler, eventData, ExecuteEvents.pointerEnterHandler);
                        }

                        // Break if this is the root object
                        var parent = pointerEnterHandler.transform.parent;
                        if (parent == null)
                        {
                            break;
                        }

                        pointerEnterHandler = ExecuteEvents.GetEventHandler <IPointerEnterHandler>(parent.gameObject);
                    }
                }

                // Update the hover stack
                eventData.hovered = newHovered;

                // Invoke pointer exit on all old objects
                foreach (var hovered in oldHovered)
                {
                    ExecuteEvents.Execute(hovered, eventData, ExecuteEvents.pointerExitHandler);
                }

                // In the future, selecting object will require passing an availability test
                // to make sure no other pointer is interacting with the object
                input.hitObject = pointerHit;
            }
        }