/***************************************************** * UPDATE THUMB/INDEX ROTATION * * INFO: Maintient à jour la rotation de l'objet 3D * en fonction du pouce et de l'index de la main. * Ajuste dynamiquement la vitesse de rotation * selon la position du ou des doigts qui * causent la rotation. C'est ici qu'on valide * quels sont les doigts ouverts. * * *** TO OPTIMIZE *** * *****************************************************/ private void ThumbIndexRotation() { //Si la main qui permet d'effecuer la rotation est détectée. //Si la manipulation contrôlé d'objet est activé. if (DetectionController.GetInstance().IsHandDetected(ThumbOrIndexGesture.GetInstance().GetHand()) && PalmUIController.GetInstance().IsManipulationControlled()) { //La liste des objets sélectionnés avec le raycast List <SelectedObject> objectsToRotateList = SelectionController.GetInstance().GetSelectedObjects(); if (objectsToRotateList.Count > 0) { //Recupère le contrôleur de la la main detectedHand = DetectionController.GetInstance().GetHand(ThumbOrIndexGesture.GetInstance().GetHand()); //Change l'etat des doigts si le pouce et/ou l'index est ouvert if (detectedHand.GetFinger(FingersE.pouce).IsFingerOpen() || detectedHand.GetFinger(FingersE.index).IsFingerOpen()) { isThumbOpen = detectedHand.GetFinger(FingersE.pouce).IsFingerOpen() ? true : false; isIndexOpen = detectedHand.GetFinger(FingersE.index).IsFingerOpen() ? true : false; } foreach (SelectedObject objectToRotate in objectsToRotateList) { //Applique la rotation en fonction de la force Vector3 rotationSpeed = stopPosition * amplifyFingerRotation; Vector3 dynamicRotation = objectToRotate.TransformObject.worldToLocalMatrix * rotationSpeed; objectToRotate.TransformObject.Rotate(dynamicRotation); startPosition = Vector3.Lerp(stopPosition, Vector3.zero, Time.deltaTime); } } } }
/***************************************************** * GET FINGER POSITION * * INFO: Supporte la rotation effectuée avec l'index * et/ou le pouce. * * Retourne la position du bout du doigt. On * met la priorité sur l'index. Sinon ce sera * avec la position du bout du pouce pour indiquer * quel sens la rotation doit prendre. * *****************************************************/ private Vector3 GetFingerPosition() { //La main utilisée pour effectuer le geste Pouce ou Index. HandsE hand = ThumbOrIndexGesture.GetInstance().GetHand(); //Si la main initialisée pour effecuer la rotation est détectée if (DetectionController.GetInstance().IsHandDetected(hand)) { Vector3 fingertip = Vector3.zero; detectedHand = DetectionController.GetInstance().GetHand(hand); if (isIndexOpen) { fingertip += detectedHand.GetFinger(FingersE.index).GetFingertipPosition(); } else if (isThumbOpen) { fingertip += detectedHand.GetFinger(FingersE.pouce).GetFingertipPosition(); } return(fingertip); } return(Vector3.zero); }