コード例 #1
0
ファイル: Pointer3DInputModule.cs プロジェクト: S4nop/URGS

        
コード例 #2
0
        protected static void HandlePressExitAndEnter(Pointer3DEventData eventData, GameObject newEnterTarget)
        {
            if (eventData.pressEnter == newEnterTarget)
            {
                return;
            }

            var oldTarget  = eventData.pressEnter == null ? null : eventData.pressEnter.transform;
            var newTarget  = newEnterTarget == null ? null : newEnterTarget.transform;
            var commonRoot = default(Transform);

            for (var t = oldTarget; t != null; t = t.parent)
            {
                if (newTarget != null && newTarget.IsChildOf(t))
                {
                    commonRoot = t;
                    break;
                }
                else
                {
                    ExecuteEvents.Execute(t.gameObject, eventData, ExecutePointer3DEvents.PressExitHandler);
                }
            }

            eventData.pressEnter = newEnterTarget;

            for (var t = newTarget; t != commonRoot; t = t.parent)
            {
                ExecuteEvents.Execute(t.gameObject, eventData, ExecutePointer3DEvents.PressEnterHandler);
            }
        }
コード例 #3
0
        protected void ProcessPressUp(Pointer3DEventData eventData)
        {
            var currentOverGo = eventData.pointerCurrentRaycast.gameObject;

            if (eventData.pointerPress != null)
            {
                ExecuteEvents.Execute(eventData.pointerPress, eventData, ExecuteEvents.pointerUpHandler);

                // see if we mouse up on the same element that we clicked on...
                var pointerUpHandler = ExecuteEvents.GetEventHandler <IPointerClickHandler>(currentOverGo);

                if (eventData.pointerPress == pointerUpHandler && eventData.eligibleForClick)
                {
                    ExecuteEvents.Execute(eventData.pointerPress, eventData, ExecuteEvents.pointerClickHandler);
                }
            }

            // Drop events
            if (currentOverGo != null && eventData.pointerDrag != null && eventData.dragging)
            {
                ExecuteEvents.ExecuteHierarchy(currentOverGo, eventData, ExecuteEvents.dropHandler);
            }

            eventData.eligibleForClick = false;
            eventData.pointerPress     = null;
            eventData.rawPointerPress  = null;

            if (eventData.pointerDrag != null && eventData.dragging)
            {
                ExecuteEvents.Execute(eventData.pointerDrag, eventData, ExecuteEvents.endDragHandler);
            }

            eventData.dragging    = false;
            eventData.pointerDrag = null;
        }
コード例 #4
0
        protected void ProcessPressDown(Pointer3DEventData eventData)
        {
            var currentOverGo = eventData.pointerCurrentRaycast.gameObject;

            eventData.eligibleForClick    = true;
            eventData.delta               = Vector2.zero;
            eventData.dragging            = false;
            eventData.useDragThreshold    = true;
            eventData.pressPosition       = eventData.position;
            eventData.pressPosition3D     = eventData.position3D;
            eventData.pressRotation       = eventData.rotation;
            eventData.pressDistance       = eventData.pointerCurrentRaycast.distance;
            eventData.pointerPressRaycast = eventData.pointerCurrentRaycast;

            DeselectIfSelectionChanged(currentOverGo, eventData);

            // search for the control that will receive the press
            // if we can't find a press handler set the press
            // handler to be what would receive a click.
            var newPressed = ExecuteEvents.ExecuteHierarchy(currentOverGo, eventData, ExecuteEvents.pointerDownHandler);

            // didnt find a press handler... search for a click handler
            if (newPressed == null)
            {
                newPressed = ExecuteEvents.GetEventHandler <IPointerClickHandler>(currentOverGo);
            }

            float time = Time.unscaledTime;

            if (newPressed == eventData.lastPress)
            {
                if (eventData.raycaster != null && time < (eventData.clickTime + eventData.raycaster.clickInterval))
                {
                    ++eventData.clickCount;
                }
                else
                {
                    eventData.clickCount = 1;
                }

                eventData.clickTime = time;
            }
            else
            {
                eventData.clickCount = 1;
            }

            eventData.pointerPress    = newPressed;
            eventData.rawPointerPress = currentOverGo;

            eventData.clickTime = time;

            // Save the drag handler as well
            eventData.pointerDrag = ExecuteEvents.GetEventHandler <IDragHandler>(currentOverGo);

            if (eventData.pointerDrag != null)
            {
                ExecuteEvents.Execute(eventData.pointerDrag, eventData, ExecuteEvents.initializePotentialDrag);
            }
        }
コード例 #5
0
        private bool ShouldStartDrag(Pointer3DEventData eventData)
        {
            if (!eventData.useDragThreshold)
            {
                return(true);
            }
            var currentPos = eventData.position3D + (eventData.rotation * Vector3.forward) * eventData.pressDistance;
            var pressPos   = eventData.pressPosition3D + (eventData.pressRotation * Vector3.forward) * eventData.pressDistance;

            return((currentPos - pressPos).sqrMagnitude >= dragThreshold * dragThreshold);
        }
コード例 #6
0
        protected bool ShouldStartDrag(Pointer3DEventData eventData)
        {
            if (!eventData.useDragThreshold || eventData.raycaster == null)
            {
                return(true);
            }
            var currentPos = eventData.position3D + (eventData.rotation * Vector3.forward) * eventData.pressDistance;
            var pressPos   = eventData.pressPosition3D + (eventData.pressRotation * Vector3.forward) * eventData.pressDistance;
            var threshold  = eventData.raycaster.dragThreshold;

            return((currentPos - pressPos).sqrMagnitude >= threshold * threshold);
        }
コード例 #7
0
        protected virtual void ProcessPress(Pointer3DEventData eventData)
        {
            if (eventData.GetPress())
            {
                if (!eventData.pressPrecessed)
                {
                    ProcessPressDown(eventData);
                }

                HandlePressExitAndEnter(eventData, eventData.pointerCurrentRaycast.gameObject);
            }
            else if (eventData.pressPrecessed)
            {
                ProcessPressUp(eventData);
                HandlePressExitAndEnter(eventData, null);
            }
        }
コード例 #8
0
 protected virtual void ProcessPress(Pointer3DEventData eventData)
 {
     if (!eventData.eligibleForClick)
     {
         if (eventData.GetPress())
         {
             ProcessPressDown(eventData);
         }
     }
     else
     {
         if (!eventData.GetPress())
         {
             ProcessPressUp(eventData);
         }
     }
 }
コード例 #9
0
        protected void ProcessPressUp(Pointer3DEventData eventData)
        {
            var currentOverGo = eventData.pointerCurrentRaycast.gameObject;

            ExecuteEvents.Execute(eventData.pointerPress, eventData, ExecuteEvents.pointerUpHandler);

            // see if we mouse up on the same element that we clicked on...
            var pointerUpHandler = ExecuteEvents.GetEventHandler <IPointerClickHandler>(currentOverGo);

            // PointerClick and Drop events
            if (eventData.pointerPress == pointerUpHandler && eventData.eligibleForClick)
            {
                ExecuteEvents.Execute(eventData.pointerPress, eventData, ExecuteEvents.pointerClickHandler);
            }
            else if (eventData.pointerDrag != null && eventData.dragging)
            {
                ExecuteEvents.ExecuteHierarchy(currentOverGo, eventData, ExecuteEvents.dropHandler);
            }

            eventData.pressPrecessed   = false;
            eventData.eligibleForClick = false;
            eventData.pointerPress     = null;
            eventData.rawPointerPress  = null;

            if (eventData.pointerDrag != null && eventData.dragging)
            {
                ExecuteEvents.Execute(eventData.pointerDrag, eventData, ExecuteEvents.endDragHandler);
            }

            eventData.dragging    = false;
            eventData.pointerDrag = null;

            // redo pointer enter / exit to refresh state
            // so that if we moused over something that ignored it before
            // due to having pressed on something else
            // it now gets it.
            if (currentOverGo != eventData.pointerEnter)
            {
                HandlePointerExitAndEnter(eventData, null);
                HandlePointerExitAndEnter(eventData, currentOverGo);
            }
        }
コード例 #10
0
        protected virtual void ProcessPress(Pointer3DEventData eventData)
        {
            if (eventData.GetPress())
            {
                if (!eventData.pressPrecessed)
                {
                    ProcessPressDown(eventData);
                }

                HandlePressExitAndEnter(eventData, eventData.pointerCurrentRaycast.gameObject);
            }
            else if (eventData.pressPrecessed)
            {
                ProcessPressUp(eventData);
                HandlePressExitAndEnter(eventData, null);
            }
            else if (eventData.hovered.Count > 0)
            {
                ExecuteEvents.Execute(eventData.hovered[0], eventData, ExecutePointer3DEvents.HoverHandler);
            }
        }
コード例 #11
0
        protected virtual void ProcessPress(Pointer3DEventData eventData)
        {
            if (eventData.GetPress())
            {
                if (!eventData.pressPrecessed)
                {
                    ProcessPressDown(eventData);
                    Debug.Log("GetPress");
                    if (_showItemInfoUI)
                    {
                        _showItemInfoUI.CheckUI_ShouldOff();
                    }
                }

                HandlePressExitAndEnter(eventData, eventData.pointerCurrentRaycast.gameObject);
            }
            else if (eventData.pressPrecessed)
            {
                ProcessPressUp(eventData);
                HandlePressExitAndEnter(eventData, null);
            }
        }
コード例 #12
0
 public static void AssignPointerId(Pointer3DEventData eventData)
 {
     eventData.pointerId = validEventDataId--;
 }
コード例 #13
0
        protected virtual void ProcessPress(Pointer3DEventData eventData)
        {
            var currentOverGo = eventData.pointerCurrentRaycast.gameObject;

            if (eventData.GetPressDown())
            {
                eventData.eligibleForClick    = true;
                eventData.delta               = Vector2.zero;
                eventData.dragging            = false;
                eventData.useDragThreshold    = true;
                eventData.pressPosition       = eventData.position;
                eventData.pressPosition3D     = eventData.position3D;
                eventData.pressRotation       = eventData.rotation;
                eventData.pressDistance       = eventData.pointerCurrentRaycast.distance;
                eventData.pointerPressRaycast = eventData.pointerCurrentRaycast;

                DeselectIfSelectionChanged(currentOverGo, eventData);

                // search for the control that will receive the press
                // if we can't find a press handler set the press
                // handler to be what would receive a click.
                var newPressed = ExecuteEvents.ExecuteHierarchy(currentOverGo, eventData, ExecuteEvents.pointerDownHandler);

                // didnt find a press handler... search for a click handler
                if (newPressed == null)
                {
                    newPressed = ExecuteEvents.GetEventHandler <IPointerClickHandler>(currentOverGo);
                }

                float time = Time.unscaledTime;

                if (newPressed == eventData.lastPress)
                {
                    var diffTime = time - eventData.clickTime;
                    if (diffTime < 0.3f)
                    {
                        ++eventData.clickCount;
                    }
                    else
                    {
                        eventData.clickCount = 1;
                    }

                    eventData.clickTime = time;
                }
                else
                {
                    eventData.clickCount = 1;
                }

                eventData.pointerPress    = newPressed;
                eventData.rawPointerPress = currentOverGo;

                eventData.clickTime = time;

                // Save the drag handler as well
                eventData.pointerDrag = ExecuteEvents.GetEventHandler <IDragHandler>(currentOverGo);

                if (eventData.pointerDrag != null)
                {
                    ExecuteEvents.Execute(eventData.pointerDrag, eventData, ExecuteEvents.initializePotentialDrag);
                }
            }
            else if (eventData.GetPressUp())
            {
                GameObject pointerUpHandler = null;
                if (eventData.pointerPress != null)
                {
                    ExecuteEvents.Execute(eventData.pointerPress, eventData, ExecuteEvents.pointerUpHandler);

                    // see if we mouse up on the same element that we clicked on...
                    //var pointerUpHandler = ExecuteEvents.GetEventHandler<IPointerClickHandler>(currentOverGo);
                    pointerUpHandler = ExecuteEvents.GetEventHandler <IPointerClickHandler>(currentOverGo);

                    if (eventData.pointerPress == pointerUpHandler && eventData.eligibleForClick)
                    {
                        ExecuteEvents.Execute(eventData.pointerPress, eventData, ExecuteEvents.pointerClickHandler);
                    }
                }

                // Drop events
                if (currentOverGo != null && eventData.pointerDrag != null && eventData.dragging)
                {
                    ExecuteEvents.ExecuteHierarchy(currentOverGo, eventData, ExecuteEvents.dropHandler);
                }

                eventData.eligibleForClick = false;
                eventData.pointerPress     = null;
                eventData.rawPointerPress  = null;

                if (eventData.pointerDrag != null && eventData.dragging)
                {
                    ExecuteEvents.Execute(eventData.pointerDrag, eventData, ExecuteEvents.endDragHandler);
                }

                eventData.dragging    = false;
                eventData.pointerDrag = null;
            }
        }