void Update() { // dont run Update() if there is no user (safety checks to ensure it) KinectManager kinectManager = KinectManager.Instance; if (!kinectManager || !kinectManager.IsInitialized() || !kinectManager.IsUserDetected()) { return; } if (!isSpinning && !isPulling && !isExiting) { // here we can set the animation to perform if (gestureListener) { bool IsInOriginalPos = Math.Abs(originalPosition.z - transform.position.z) < 1f; if (gestureListener.IsSwipeLeft() && IsInOriginalPos) { RotateToNext(); } else if (gestureListener.IsSwipeRight() && IsInOriginalPos) { RotateToPrevious(); } else if (gestureListener.IsPulling() && IsInOriginalPos) // si entra aquí desactiva los otros { AnimatePush(false); } else if (gestureListener.IsExiting() && !IsInOriginalPos) { AnimatePush(true); } } } else if (isSpinning) // there is a current rotation in action { // spin the presentation transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, spinSpeed * Time.deltaTime); // check if transform reaches the target rotation. If yes - stop spinning float deltaTargetX = Mathf.Abs(targetRotation.eulerAngles.x - transform.rotation.eulerAngles.x); float deltaTargetY = Mathf.Abs(targetRotation.eulerAngles.y - transform.rotation.eulerAngles.y); if (deltaTargetX < epsilon && deltaTargetY < epsilon) { // delay the slide isSpinning = false; } } else if (isPulling || isExiting) // there is a current translation in action // animate the presentation { transform.position = Vector3.Lerp(transform.position, targetTranslation, translationSpeed * Time.deltaTime); // check if transform reaches the target translation. If yes - stop translating float deltaTargetZ = Mathf.Abs(targetTranslation.z - transform.position.z); if (deltaTargetZ < epsilon) { // delay the slide if (isPulling) { isPulling = false; } if (isExiting) { isExiting = false; } } } }