protected virtual void Update() { // Get fingers var fingers = Use.GetFingers(); if (fingers.Count > 1 && onPinch != null) { switch (Coordinate) { case CoordinateType.OneBasedScale: { var scale = LeanGesture.GetPinchScale(fingers); scale = Mathf.Pow(scale, Multiplier); onPinch.Invoke(scale); } break; case CoordinateType.OneBasedRatio: { var ratio = LeanGesture.GetPinchRatio(fingers); ratio = Mathf.Pow(ratio, Multiplier); onPinch.Invoke(ratio); } break; case CoordinateType.ZeroBasedScale: { var scale = LeanGesture.GetPinchScale(fingers); scale = (scale - 1.0f) * Multiplier; onPinch.Invoke(scale); } break; case CoordinateType.ZeroBasedRatio: { var ratio = LeanGesture.GetPinchRatio(fingers); ratio = (ratio - 1.0f) * Multiplier; onPinch.Invoke(ratio); } break; case CoordinateType.ZeroBasedDistance: { var oldDistance = LeanGesture.GetLastScaledDistance(fingers, LeanGesture.GetLastScreenCenter(fingers)); var newDistance = LeanGesture.GetScaledDistance(fingers, LeanGesture.GetScreenCenter(fingers)); var movement = (newDistance - oldDistance) * Multiplier; onPinch.Invoke(movement); } break; } } }
private void FingerSwipe(List <LeanFinger> fingers, LeanFinger swipedFinger) { var scaledDelta = swipedFinger.SwipeScaledDelta; var isParallel = true; swiped = true; // Go through all fingers for (var i = fingers.Count - 1; i >= 0; i--) { var finger = fingers[i]; // If it's too old to swipe, skip if (finger.Age > LeanTouch.CurrentTapThreshold) { return; } // If it didn't move far enough to swipe, skip if (finger.SwipeScaledDelta.magnitude < ScaledDistanceThreshold) { return; } // If the finger didn't move parallel the others, make the OnSwipeParallel event inelligible if (finger != swipedFinger) { var angle = Vector2.Angle(scaledDelta, finger.SwipeScaledDelta); if (angle > ParallelAngleThreshold) { isParallel = false; } } } if (onFingers != null) { onFingers.Invoke(fingers); } if (fingers.Count > 1) { var centerA = LeanGesture.GetStartScreenCenter(fingers); var centerB = LeanGesture.GetScreenCenter(fingers); if (onSwipeParallel != null && isParallel == true) { var delta = centerA - centerB; onSwipeParallel.Invoke(delta * LeanTouch.ScalingFactor); } else { var pinch = LeanGesture.GetScaledDistance(fingers, centerB) - LeanGesture.GetStartScaledDistance(fingers, centerA); if (onSwipeIn != null && pinch <= -PinchScaledDistanceThreshold) { onSwipeIn.Invoke(-pinch); } if (onSwipeOut != null && pinch >= PinchScaledDistanceThreshold) { onSwipeOut.Invoke(pinch); } } } }
private void FingerSwipe(LeanFinger swipedFinger) { // Prevent multi invocation if (swiped == false) { // Get all valid fingers for swipe var fingers = LeanSelectable.GetFingers(IgnoreStartedOverGui, false, RequiredFingerCount, RequiredSelectable); // Make sure there are some fingers, and the current finger is a part of it if (fingers.Count > 0 && fingers.Contains(swipedFinger) == true) { swiped = true; var scaledDelta = swipedFinger.SwipeScaledDelta; var isParallel = true; // Go through all fingers for (var i = fingers.Count - 1; i >= 0; i--) { var finger = fingers[i]; // If it's too old to swipe, skip if (finger.Age > LeanTouch.CurrentTapThreshold) { return; } // If it didn't move far enough to swipe, skip if (finger.SwipeScaledDelta.magnitude < ScaledDistanceThreshold) { return; } // If the finger didn't move parallel the others, make the OnSwipeParallel event inelligible if (finger != swipedFinger) { var angle = Vector2.Angle(scaledDelta, finger.SwipeScaledDelta); if (angle > ParallelAngleThreshold) { isParallel = false; } } } if (OnSwipe != null) { OnSwipe.Invoke(fingers); } if (fingers.Count > 1) { var centerA = LeanGesture.GetStartScreenCenter(fingers); var centerB = LeanGesture.GetScreenCenter(fingers); if (OnSwipeParallel != null && isParallel == true) { var delta = centerA - centerB; OnSwipeParallel.Invoke(delta * LeanTouch.ScalingFactor); } else { var pinch = LeanGesture.GetScaledDistance(fingers, centerB) - LeanGesture.GetStartScaledDistance(fingers, centerA); if (OnSwipeIn != null && pinch <= -PinchScaledDistanceThreshold) { OnSwipeIn.Invoke(-pinch); } if (OnSwipeOut != null && pinch >= PinchScaledDistanceThreshold) { OnSwipeOut.Invoke(pinch); } } } } } }