Example #1
0
        /// <summary>
        /// Set's this object to it's default, unused state.
        /// </summary>
        public void Reset()
        {
            lastFrameDelta = ButtonDeltaState.NoChange;
            m_IsDown       = false;

            m_InternalData.Reset();
        }
Example #2
0
        /// <summary>
        /// Set's this object to it's default, unused state.
        /// </summary>
        public void Reset()
        {
            lastFrameDelta = ButtonDeltaState.NoChange;
            m_IsDown       = false;

            m_ImplementationData.Reset();
        }
Example #3
0
 /// <summary>
 /// Call this on each frame in order to reset properties that detect whether or not a certain condition was met this frame.
 /// </summary>
 public void OnFrameFinished()
 {
     lastFrameDelta = ButtonDeltaState.NoChange;
 }
Example #4
0
        private void ProcessMouseButton(ButtonDeltaState mouseButtonChanges, PointerEventData eventData)
        {
            var currentOverGo = eventData.pointerCurrentRaycast.gameObject;

            if ((mouseButtonChanges & ButtonDeltaState.Pressed) != 0)
            {
                eventData.eligibleForClick    = true;
                eventData.delta               = Vector2.zero;
                eventData.dragging            = false;
                eventData.pressPosition       = eventData.position;
                eventData.pointerPressRaycast = eventData.pointerCurrentRaycast;

                var selectHandlerGO = ExecuteEvents.GetEventHandler <ISelectHandler>(currentOverGo);

                // If we have clicked something new, deselect the old thing
                // and leave 'selection handling' up to the press event.
                if (selectHandlerGO != eventSystem.currentSelectedGameObject)
                {
                    eventSystem.SetSelectedGameObject(null, 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);

                // We didn't find a press handler, so we search for a click handler.
                if (newPressed == null)
                {
                    newPressed = ExecuteEvents.GetEventHandler <IPointerClickHandler>(currentOverGo);
                }

                var time = Time.unscaledTime;

                if (newPressed == eventData.lastPress && ((time - eventData.clickTime) < clickSpeed))
                {
                    ++eventData.clickCount;
                }
                else
                {
                    eventData.clickCount = 1;
                }

                eventData.clickTime = time;

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

                // Save the drag handler for drag events during this mouse down.
                eventData.pointerDrag = ExecuteEvents.GetEventHandler <IDragHandler>(currentOverGo);

                if (eventData.pointerDrag != null)
                {
                    ExecuteEvents.Execute(eventData.pointerDrag, eventData, ExecuteEvents.initializePotentialDrag);
                }
            }

            if ((mouseButtonChanges & ButtonDeltaState.Released) != 0)
            {
                ExecuteEvents.Execute(eventData.pointerPress, eventData, ExecuteEvents.pointerUpHandler);

                var pointerUpHandler = ExecuteEvents.GetEventHandler <IPointerClickHandler>(currentOverGo);

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

                eventData.eligibleForClick = eventData.dragging = false;
                eventData.pointerPress     = eventData.rawPointerPress = eventData.pointerDrag = null;
            }
        }
Example #5
0
        private void ProcessButton(ButtonDeltaState mouseButtonChanges, ref MLInputDeviceEventData eventData)
        {
            var currentOverGo = eventData.pointerCurrentRaycast.gameObject;

            if (mouseButtonChanges == ButtonDeltaState.Pressed)
            {
                eventData.eligibleForClick    = true;
                eventData.dragging            = false;
                eventData.pointerPressRaycast = eventData.pointerCurrentRaycast;

                eventData.position      = _mainCamera.WorldToScreenPoint(eventData.pointerCurrentRaycast.worldPosition);
                eventData.pressPosition = eventData.position;

                var selectHandlerGO = ExecuteEvents.GetEventHandler <ISelectHandler>(currentOverGo);

                // If we have clicked something new, deselect the old thing
                // and leave 'selection handling' up to the press event.
                if (selectHandlerGO != eventSystem.currentSelectedGameObject)
                {
                    eventSystem.SetSelectedGameObject(null, 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);

                // We didn't find a press handler, so we search for a click handler.
                if (newPressed == null)
                {
                    newPressed = ExecuteEvents.GetEventHandler <IPointerClickHandler>(currentOverGo);
                }

                var time = Time.unscaledTime;

                if (newPressed == eventData.lastPress && ((time - eventData.clickTime) < _triggerClickSpeed))
                {
                    ++eventData.clickCount;
                }
                else
                {
                    eventData.clickCount = 1;
                }

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

                // Save the drag handler for drag events during this mouse down.
                var canPointerDrag = ExecuteEvents.GetEventHandler <IDragHandler>(currentOverGo);

                if (canPointerDrag != null && (newPressed == null || canPointerDrag == newPressed))
                {
                    eventData.pointerDrag = canPointerDrag;
                    ExecuteEvents.Execute(eventData.pointerDrag, eventData, ExecuteEvents.initializePotentialDrag);
                }
            }
            else if (mouseButtonChanges == ButtonDeltaState.Released)
            {
                ExecuteEvents.Execute(eventData.pointerPress, eventData, ExecuteEvents.pointerUpHandler);

                var clickHandlerGO = ExecuteEvents.GetEventHandler <IPointerClickHandler>(currentOverGo);

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

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

                eventData.eligibleForClick = eventData.dragging = false;
                eventData.pointerPress     = eventData.rawPointerPress = eventData.pointerDrag = null;
            }
            else if (eventData.pointerPress != null)
            {
                // Check to see if we've dragged over a press handler
                var newPress = ExecuteEvents.GetEventHandler <IPointerDownHandler>(currentOverGo);

                // We didn't find a press handler, so we search for a click handler.
                if (newPress == null)
                {
                    newPress = ExecuteEvents.GetEventHandler <IPointerClickHandler>(currentOverGo);
                }

                // If we moved from our initial press object, process an up for that object.
                if (eventData.pointerPress != newPress)
                {
                    var pointerUpHandlerGO = ExecuteEvents.ExecuteHierarchy(eventData.pointerPress, eventData, ExecuteEvents.pointerUpHandler);

                    if (pointerUpHandlerGO == null)
                    {
                        pointerUpHandlerGO = ExecuteEvents.GetEventHandler <IPointerUpHandler>(eventData.pointerPress);
                        ExecuteEvents.Execute(pointerUpHandlerGO, eventData, ExecuteEvents.pointerUpHandler);
                    }

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