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