private bool PanGestureHasEnoughMovementOnOneAxis(ref float xVelocity, ref float yVelocity) { if (AllowMovementOnBothAxisSimultaneously) { return(true); } float unitsX = Mathf.Abs(DeviceInfo.PixelsToUnits(PanGesture.DistanceX)); float unitsY = Mathf.Abs(DeviceInfo.PixelsToUnits(PanGesture.DistanceY)); if (lockedAxis == 0 && unitsX <= PanGesture.ThresholdUnits && unitsY <= PanGesture.ThresholdUnits) { return(false); } else if (lockedAxis == 1 || (lockedAxis == 0 && unitsX > unitsY * 3.0f)) { lockedAxis = 1; yVelocity = 0.0f; return(true); } else if (lockedAxis == 2 || (lockedAxis == 0 && unitsY > unitsX * 3.0f)) { lockedAxis = 2; xVelocity = 0.0f; return(true); } return(false); }
private void XAxisStateUpdated(GestureRecognizer r) { if (TransformToScale == null) { return; } else if (r.State == GestureRecognizerState.Began) { // if moved too much up/down, reset gesture float vertUnits = DeviceInfo.PixelsToUnits(r.DistanceY); if (vertUnits > 0.15f) { r.Reset(); } else { // reset y axis gesture, we only want one scale direction at a time YAxisScaleGesture.Reset(); } } else if (r.State == GestureRecognizerState.Executing) { Vector3 scale = TransformToScale.localScale; scale.x *= XAxisScaleGesture.ScaleMultiplierX; TransformToScale.localScale = scale; } }
private void YAxisStateUpdated(GestureRecognizer r) { if (TransformToScale == null) { return; } else if (r.State == GestureRecognizerState.Began) { // if moved too much left/right, reset gesture float horizUnits = DeviceInfo.PixelsToUnits(r.DistanceX); if (horizUnits > 0.15f) { r.Reset(); } else { // reset x axis gesture, we only want one scale direction at a time XAxisScaleGesture.Reset(); } } else if (r.State == GestureRecognizerState.Executing) { Vector3 scale = TransformToScale.localScale; scale.y *= YAxisScaleGesture.ScaleMultiplierY; TransformToScale.localScale = scale; } }
private void TiltGesture_StateUpdated(GestureRecognizer gesture) { if (PlayerCamera != null && gesture.State == GestureRecognizerState.Executing) { Vector3 currentRotation = PlayerCamera.transform.localRotation.eulerAngles; if (currentRotation.x > 270.0f) { currentRotation.x -= 360.0f; } if (currentRotation.y > 270.0f) { currentRotation.y -= 360.0f; } float amountX = DeviceInfo.PixelsToUnits(tiltGesture.DeltaY) * Time.deltaTime * TiltSpeed * 1000.0f; float amountY = DeviceInfo.PixelsToUnits(tiltGesture.DeltaX) * Time.deltaTime * TiltSpeed * -1000.0f; currentRotation.x = Mathf.Clamp(currentRotation.x + amountX, TiltLimits.x, TiltLimits.y); currentRotation.y = Mathf.Clamp(currentRotation.y + amountY, TiltLimits.x, TiltLimits.y); PlayerCamera.transform.localRotation = Quaternion.Euler(currentRotation); resetTilt = false; } else if (gesture.State == GestureRecognizerState.Ended) { resetTilt = true; } }
private void TiltGestureCallback(GestureRecognizer gesture) { if (gesture.State == GestureRecognizerState.Executing) { tiltVelocity += (DeviceInfo.PixelsToUnits(gesture.DeltaY) * Time.deltaTime * TiltSpeed * 25.0f); } }
private void PanGestureCallback(GestureRecognizer gesture) { if (gesture.State == GestureRecognizerState.Executing) { Quaternion q = Target.rotation; q = Quaternion.Euler(0.0f, q.eulerAngles.y, 0.0f); moveVelocity += (q * Vector3.right * DeviceInfo.PixelsToUnits(gesture.DeltaX) * Time.deltaTime * PanSpeed * 500.0f); moveVelocity += (q * Vector3.forward * DeviceInfo.PixelsToUnits(gesture.DeltaY) * Time.deltaTime * PanSpeed * 500.0f); } }
private void PanGestureUpdated(GestureRecognizer r) { if (TransformToRotate == null) { return; } if (r.State == GestureRecognizerState.Executing) { rotationVelocity = Vector2.zero; ApplyRotation(DeviceInfo.PixelsToUnits(r.DeltaX) * RotationSpeed, DeviceInfo.PixelsToUnits(r.DeltaY) * RotationSpeed); } else if (r.State == GestureRecognizerState.Ended) { rotationVelocity = new Vector2(DeviceInfo.PixelsToUnits(r.VelocityX) * RotationSpeed * 0.01f, DeviceInfo.PixelsToUnits(r.VelocityY) * RotationSpeed * 0.01f); } }
private void Panned(GestureRecognizer panGesture) { if (panGesture.State == GestureRecognizerState.Began) { if (PanAnchor != null) { PanAnchor.enabled = true; PanAnchor.transform.position = new Vector3(panGesture.StartFocusX, panGesture.StartFocusY, PanAnchor.transform.position.z); } if (PanAnchorLine != null) { PanAnchorLine.enabled = true; PanAnchorLine.DrawLine(Vector2.zero, Vector2.zero, 0.0f); } } else if (panGesture.State == GestureRecognizerState.Executing) { float unitsX = DeviceInfo.PixelsToUnits(panGesture.DistanceX); float unitsY = DeviceInfo.PixelsToUnits(panGesture.DistanceY); float panX = Mathf.Sign(unitsX) * Mathf.Lerp(0.0f, 1.0f, Mathf.Abs(unitsX) / PanUnitsForMaxMove); float panY = Mathf.Sign(unitsY) * Mathf.Lerp(0.0f, 1.0f, Mathf.Abs(unitsY) / PanUnitsForMaxMove); if (PanCallback != null) { PanCallback.Invoke(new Vector2(panX, panY)); } if (crossPlatformInputHorizontalAxisObject != null) { FingersCrossPlatformInputReflectionScript.UpdateVirtualAxis(crossPlatformInputHorizontalAxisObject, panX); } if (crossPlatformInputVerticalAxisObject != null) { FingersCrossPlatformInputReflectionScript.UpdateVirtualAxis(crossPlatformInputVerticalAxisObject, panY); } if (PanAnchor != null) { panLocation = new Vector2(panGesture.FocusX, panGesture.FocusY); } } else if (panGesture.State == GestureRecognizerState.Ended || panGesture.State == GestureRecognizerState.Failed) { if (PanCallback != null) { PanCallback.Invoke(new Vector2(0.0f, 0.0f)); } if (crossPlatformInputHorizontalAxisObject != null) { FingersCrossPlatformInputReflectionScript.UpdateVirtualAxis(crossPlatformInputHorizontalAxisObject, 0.0f); } if (crossPlatformInputVerticalAxisObject != null) { FingersCrossPlatformInputReflectionScript.UpdateVirtualAxis(crossPlatformInputVerticalAxisObject, 0.0f); } if (PanAnchor != null) { PanAnchor.enabled = false; panLocation = Vector2.zero; } if (PanAnchorLine != null) { PanAnchorLine.enabled = false; } } }