Exemplo n.º 1
0
        private static void ExecuteHandler(ILongPress handler, BaseEventData eventData)
        {
            GestureEventData gestureEvent = eventData as GestureEventData;

            if (gestureEvent == null || handler == null)
            {
                return;
            }

            if (gestureEvent.pressed || gestureEvent.released)
            {
                handler.LongPressActivated = false;
            }

            if (gestureEvent.isTouched == false || handler.LongPressActivated)
            {
                return;
            }

            if (gestureEvent.isTouched == false)
            {
                return;
            }

            float timePassed = (gestureEvent.time - gestureEvent.timePressed);
            bool  canFire    = timePassed >= handler.LongPressActivateTime;

            if (canFire && handler.LongPressActivated == false)
            {
                handler.LongPressActivated = true;
                handler.OnLongPress(gestureEvent.pointer);
            }
        }
Exemplo n.º 2
0
        private static int GetTouchSwipeMatch(GestureEventData touch, ISwipeGesture handler)
        {
            int   matchDir        = -1;
            float matchDotProduct = 0;

            for (int i = 0; i < handler.SwipeDirections.Length; i++)
            {
                Vector2 testDir  = handler.SwipeDirections[i];
                Vector2 swipeDir = touch.pointer.position - touch.startPosition;

                //float distance = resIndependent.magnitude;
                //Debug.LogFormat("Distance is {0}", distance);

                float dotProduct = Vector2.Dot(testDir.normalized, swipeDir.normalized);

                float deviance = 1f - dotProduct;
                if (deviance <= handler.SwipeMaxDeviance)
                {
                    float testDeviance = 1f - matchDotProduct;
                    if (deviance < testDeviance)
                    {
                        matchDir        = i;
                        matchDotProduct = dotProduct;
                    }
                }
            }
            return(matchDir);
        }
        private GestureEventData MouseToTouch(MouseButtonEventData data)
        {
            GestureEventData gestureData = new GestureEventData(eventSystem)
            {
                pointer  = data.buttonData,
                pressed  = data.PressedThisFrame(),
                released = data.ReleasedThisFrame()
            };

            return(gestureData);
        }
        public void HandleGesture(GestureEventData[] gestureEvents)
        {
            for (int i = 0; i < gestureEvents.Length; i++)
            {
                PointerEventData data = gestureEvents[i].pointer;
                GameObject currentOverGO = data.pointerCurrentRaycast.gameObject;
                if (currentOverGO == null)
                    continue;

                ExecuteEvents.ExecuteHierarchy(currentOverGO, gestureEvents[i], handleActivate);
            }
        }
 private int[] CleanTrackingData(GestureEventData[] touchEvents)
 {
     List<int> removeFromTracking = new List<int>();
     foreach (KeyValuePair<int, GestureTrackingData> kv in trackingData)
     {
         int indexOf = Array.FindIndex(touchEvents, evt => evt.pointer.pointerId == kv.Key);
         if (indexOf < 0)
             removeFromTracking.Add(kv.Key);
     }
     foreach (int clearTrackId in removeFromTracking)
     {
         trackingData.Remove(clearTrackId);
     }
     return removeFromTracking.ToArray();
 }
        private GestureEventData[] GetTouchEvents()
        {
            GestureEventData[] outData = new GestureEventData[Input.touchCount];
            for (int i = 0; i < Input.touchCount; ++i)
            {
                Touch input = Input.GetTouch(i);

                bool             released;
                bool             pressed;
                PointerEventData pointer = GetTouchPointerEventData(input, out pressed, out released);
                outData[i] = new GestureEventData(eventSystem)
                {
                    pointer  = pointer,
                    pressed  = pressed,
                    released = released
                };
            }
            return(outData);
        }
        private void ProcessTouches(GestureEventData[] touchEvents)
        {
            // First, setup the data in the gesture events
            // fill with data that was being tracked per pointer id
            for (int idxEvt = 0; idxEvt < touchEvents.Length; idxEvt++)
            {
                GestureEventData evt = touchEvents[idxEvt];

                int   pointerId   = evt.pointer.pointerId;
                float currentTime = Time.unscaledTime;

                if (trackingData.ContainsKey(pointerId) == false)
                {
                    trackingData.Add(pointerId, new GestureTrackingData());
                }

                // Update tracking data
                GestureTrackingData tracking = trackingData[pointerId];
                tracking.Update(currentTime, evt.pressed, evt.released, evt.pointer.position);
                trackingData[pointerId] = tracking;

                // Fill empty gesture event data with data that was tracked
                evt.time          = currentTime;
                evt.timePressed   = tracking.timePressed;
                evt.timeReleased  = tracking.timeReleased;
                evt.startPosition = tracking.startPosition;
                evt.isTouched     = tracking.isTouched;
            }

            // Send gesture event data to recognizers
            for (int idxGest = 0; idxGest < gestureRecongizers.Length; idxGest++)
            {
                gestureRecongizers[idxGest].HandleGesture(touchEvents);
            }

            // Non touch input modules will never change number of touch events
            // can skip tracking data book keeping
            if (isTouch)
            {
                CleanTrackingData(touchEvents);
            }
        }
Exemplo n.º 8
0
        private static void HandleSwipe(ISwipeGesture handler, BaseEventData eventData)
        {
            GestureEventData data = eventData as GestureEventData;

            if (handler == null || data == null)
            {
                return;
            }

            if (handler.SwipeTouchCount != events.Length || data.released == false)
            {
                return;
            }

            int matchDir = -1;

            // Loop through the touch events, finding the matching swipe direction
            for (int i = 0; i < events.Length; i++)
            {
                int match = GetTouchSwipeMatch(events[i], handler);

                if (i == 0)
                {
                    matchDir = match;
                    continue;
                }

                if (match != matchDir)
                {
                    matchDir = -1;
                    break;
                }
            }

            if (matchDir >= 0)
            {
                handler.OnSwipeGesture(data.pointer, matchDir);
            }
        }
        private GestureEventData[] GetTouchEvents()
        {
            GestureEventData[] outData = new GestureEventData[Input.touchCount];
            for (int i = 0; i < Input.touchCount; ++i)
            {
                Touch input = Input.GetTouch(i);

                bool released;
                bool pressed;
                PointerEventData pointer = GetTouchPointerEventData(input, out pressed, out released);
                outData[i] = new GestureEventData(eventSystem)
                {
                    pointer = pointer,
                    pressed = pressed,
                    released = released
                };
            }
            return outData;
        }
        private void ProcessTouches(GestureEventData[] touchEvents)
        {
            // First, setup the data in the gesture events
            // fill with data that was being tracked per pointer id
            for (int idxEvt = 0; idxEvt < touchEvents.Length; idxEvt++)
            {
                GestureEventData evt = touchEvents[idxEvt];

                int pointerId = evt.pointer.pointerId;
                float currentTime = Time.unscaledTime;

                if (trackingData.ContainsKey(pointerId) == false)
                    trackingData.Add(pointerId, new GestureTrackingData());

                // Update tracking data
                GestureTrackingData tracking = trackingData[pointerId];
                tracking.Update(currentTime, evt.pressed, evt.released, evt.pointer.position);
                trackingData[pointerId] = tracking;

                // Fill empty gesture event data with data that was tracked
                evt.time			= currentTime;
                evt.timePressed		= tracking.timePressed;
                evt.timeReleased	= tracking.timeReleased;
                evt.startPosition	= tracking.startPosition;
                evt.isTouched		= tracking.isTouched;
            }

            // Send gesture event data to recognizers
            for (int idxGest = 0; idxGest < gestureRecongizers.Length; idxGest++)
            {
                gestureRecongizers[idxGest].HandleGesture(touchEvents);
            }

            // Non touch input modules will never change number of touch events
            // can skip tracking data book keeping
            if (isTouch) { CleanTrackingData(touchEvents); }
        }
 private GestureEventData MouseToTouch(MouseButtonEventData data)
 {
     GestureEventData gestureData = new GestureEventData(eventSystem)
     {
         pointer = data.buttonData,
         pressed = data.PressedThisFrame(),
         released = data.ReleasedThisFrame()
     };
     return gestureData;
 }