/*****************************************************
    * 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);
                }
            }
        }
    }
Пример #2
0
 /*****************************************************
 * AWAKE
 *
 * INFO:    Initialise l'instance de la classe pour
 *          rendre accessible la main et le doigt qui
 *          ont été initialisés pour effectuer le geste.
 *
 *****************************************************/
 void Awake()
 {
     //Initialise l'instance de cette classe
     if (instance == null)
     {
         instance = this;
     }
     else
     {
         Destroy(this);
     }
 }
    /*****************************************************
    * 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);
    }