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); } }
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); } }
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; }