Esempio n. 1
0
        public void SecondUpdateIterration()
        {
            if (palm != null)
            {
                if (modelPalmAtLeapWrist)
                {
                    palm.position = GetWristPosition();
                }
                else
                {
                    palm.position = GetPalmPosition();
                    if (wristJoint)
                    {
                        wristJoint.position = GetWristPosition();
                    }
                }
                palm.rotation = getRiggedPalmRotation() * userBoneRotation;
            }

            if (forearm != null)
            {
                forearm.rotation = GetArmRotation() * userBoneRotation;
            }

            for (int i = 0; i < fingers.Length; ++i)
            {
                FingerModel finger = fingers[i];
                if (fingers[i] != null && fingers[i].fingerType == Finger.FingerType.TYPE_RING)
                {
                    fingers[i].fingerType = (Finger.FingerType)i;
                    fingers[i].UpdateFinger();
                }
            }
        }
Esempio n. 2
0
    void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.name == "bone3" || collision.gameObject.name == "bone2")
        {
            Leap.Unity.FingerModel finger = collision.gameObject.GetComponentInParent <Leap.Unity.FingerModel>();

            if (finger && finger.fingerType.ToString() == "TYPE_INDEX" && rightIndex)
            {
                // instantiate new prefab, set local position to be the palm position
                this.prefab = Instantiate(externalPrefab);
                this.prefab.transform.localPosition = new Vector3(LeapHandController.transform.position.x, LeapHandController.transform.position.y, LeapHandController.transform.position.z) + new Vector3(0.00f, 0.00f, 0.25f) + LeapHandController.transform.rotation * (new Vector3(0.0f, 0.00f, 0.04f));
                this.prefab.transform.localScale    = new Vector3(.02f, .02f, .02f);
                // set color of spawned prefab to the current hud color
                this.prefab.gameObject.GetComponent <Renderer>().material.color = HUDMgr.getHUDColor();
                Mesh mesh = this.prefab.GetComponent <MeshFilter>().mesh;
                new Solid(mesh, Matrix4x4.TRS(prefab.transform.position, prefab.transform.rotation, prefab.transform.localScale), prefab.transform.position);
            }
        }
    }
Esempio n. 3
0
    void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.name == "bone3" || collision.gameObject.name == "bone2")
        {
            Leap.Unity.FingerModel finger = collision.gameObject.GetComponentInParent <Leap.Unity.FingerModel>();

            //cdTime = HUD.getCooldown();
            if (Time.time > cdTime)
            {
                if (finger && finger.fingerType.ToString() == "TYPE_INDEX")
                {
                    Color color;
                    color.r = Random.Range(0.0f, 0.65f);
                    color.g = color.r;
                    color.b = color.r;
                    color.a = 1f;
                    HUD.setHUDColor(color);
                    //HUD.setCooldownTime(Time.time + HUD.getCooldown());
                }
            }
        }
    }
Esempio n. 4
0
        public override void UpdateHand()
        {
            //Finger f1, f2;
            FingerModel f1 = null, f2 = null, f3 = null, f4 = null, f5 = null;

            //float angulo= 0.0f;
            for (int f = 0; f < fingers.Length; ++f)
            {
                if (fingers[f] != null)
                {
                    fingers[f].UpdateFinger();
                    //Debug.Log("Dedo "+fingers[f].fingerType+ "Direcao"+ fingers[f].GetBoneDirection(3).ToString()+ "basis osso"+ fingers[f].GetBoneCenter(3));
                    if (fingers[f].GetLeapFinger().Type == Finger.FingerType.TYPE_MIDDLE)
                    {
                        f3 = fingers[f];
                    }
                    if (fingers[f].GetLeapFinger().Type == Finger.FingerType.TYPE_INDEX)
                    {
                        f2 = fingers[f];
                    }
                    if (fingers[f].GetLeapFinger().Type == Finger.FingerType.TYPE_THUMB)
                    {
                        f1 = fingers[f];
                    }
                    if (fingers[f].GetLeapFinger().Type == Finger.FingerType.TYPE_RING)
                    {
                        f4 = fingers[f];
                    }
                    if (fingers[f].GetLeapFinger().Type == Finger.FingerType.TYPE_PINKY)
                    {
                        f5 = fingers[f];
                    }
                    //   Debug.Log("Angulo: " + produto_escalar();
                }
            }

            if (booleano_botao.text.Equals("sim") && concluido)
            {
                //bol = !bol;
                //Debug.Log("bol:" + bol);
                Debug.Log("Proximo exercicio");
                booleano_botao.text = "";
                exerciciosBolean[contadorNumeroDeExercicios] = false;
                contadorNumeroDeExercicios++;
                contadorAbducao       = 0;
                contadorLevant        = 0;
                conta_text_Pinch.text = "0";
                if (nome_exercicio.text.Contains("levantamento"))
                {
                    nome_exercicio.text    = "Contador de Pinch Indicador: ";
                    info_exercicio.enabled = true;
                    info_exercicio.texture = (Texture)Resources.Load("rv_instru_pinca");
                }

                if (nome_exercicio.text.Contains("aducao"))
                {
                    nome_exercicio.text    = "Contador de levantamento: ";
                    info_exercicio.enabled = true;
                    info_exercicio.texture = (Texture)Resources.Load("rv_instru_levant");
                }

                //System.Threading.Thread.Sleep(1000);
                if (contadorNumeroDeExercicios < exerciciosBolean.Length)
                {
                    exerciciosBolean[contadorNumeroDeExercicios] = true;
                    concluido = false;
                }
                else
                {
                    nome_exercicio.text = "GG";
                    Debug.Log("Parabens");
                }
            }
            if (f2 != null) //se um dedo é visível, os outros provavelmente estão visíveis - nosso setup fará com que todos estejam visíveis
            {               //contar abdução dos dedos médio e indicador até 10
              //texto está dando null pointer exception!!!

                if (exerciciosBolean[0])
                {
                    conta_text_Abducao.text = contadorAbducao.ToString();
                    info_exercicio.enabled  = true;

                    if (Mathf.Abs(f2.GetLeapFinger().TipPosition.x - f3.GetLeapFinger().TipPosition.x) > 0.02 && contadorAbducao < qtdAbducao &&
                        Mathf.Abs(f3.GetLeapFinger().TipPosition.x - f4.GetLeapFinger().TipPosition.x) > 0.02 &&
                        Mathf.Abs(f4.GetLeapFinger().TipPosition.x - f5.GetLeapFinger().TipPosition.x) > 0.02 &&
                        aux_texto_abd)
                    {
                        contadorAbducao++;
                        exercicioConcluido.enabled = false;
                        cuboProximoExercicio.SetActive(false);
                        proximoExercicio.enabled = false;
                        aux_texto_abd            = false;
                        Debug.Log(RadianToDegree(angulo_dedos(f2.GetLeapFinger().Bone(Bone.BoneType.TYPE_DISTAL), f3.GetLeapFinger().Bone(Bone.BoneType.TYPE_DISTAL))));

                        //Debug.Log("Contador de abrir-fechar: " + contadorAbducao);
                    }//else if(Mathf.Abs(f2.GetLeapFinger().TipPosition.y - f2.GetLeapFinger().Bone(Bone.BoneType.TYPE_PROXIMAL).Basis.yBasis.y))
                     //{

                    //}
                    if (Mathf.Abs(f2.GetLeapFinger().TipPosition.x - f3.GetLeapFinger().TipPosition.x) < 0.02 &&
                        Mathf.Abs(f3.GetLeapFinger().TipPosition.x - f4.GetLeapFinger().TipPosition.x) < 0.02 &&
                        Mathf.Abs(f4.GetLeapFinger().TipPosition.x - f5.GetLeapFinger().TipPosition.x) < 0.02)
                    {
                        aux_texto_abd = true;
                    }
                    if (contadorAbducao == qtdAbducao)
                    {
                        concluido = true;
                        info_exercicio.enabled     = false;
                        exercicioConcluido.enabled = true;
                        cuboProximoExercicio.SetActive(true);
                        proximoExercicio.enabled = true;

                        // cuboProximoExercicio.SetActive(true);
                        // proximoExercicio.enabled = true;
                    }

                    /*if (contadorAbducao>10)
                     * {
                     *  Debug.Log("Posicao ponta do indicador: " + f2.GetLeapFinger().TipPosition);
                     *
                     * }*/
                }
                else if (exerciciosBolean[1])
                {
                    //exercício de levantar o dedo indicador
                    conta_text_Abducao.text = contadorLevant.ToString();

                    if (f2.GetBoneDirection((int)Bone.BoneType.TYPE_DISTAL).y > 0.04 && aux_texto_levant && contadorLevant < qtdLevantamento)
                    {
                        aux_texto_levant = false;
                        contadorLevant++;
                        exercicioConcluido.enabled = false;
                        cuboProximoExercicio.SetActive(false);
                        proximoExercicio.enabled = false;
                        //  Debug.Log("Contador de levantamentos: " + contadorLevant);
                    }
                    if (f2.GetBoneDirection((int)Bone.BoneType.TYPE_DISTAL).y < 0.02)
                    {
                        aux_texto_levant = true;
                    }
                    if (contadorLevant == qtdLevantamento)
                    {
                        info_exercicio.enabled = false;
                        concluido = true;
                        exercicioConcluido.enabled = true;
                        cuboProximoExercicio.SetActive(true);
                        proximoExercicio.enabled = true;
                    }
                }
                else if (exerciciosBolean[2])
                {
                    //contadores auxiliares para pinça em cada dedo

                    if (contadorPinchInd + contadorPinchAnl + contadorPinchMed + contadorPinchMindi < 4 * qtdPinch) //multiplicado por 4 pois será dito como concluído quando terminar com todos os dedos
                    {
                        if (contadorPinchInd < qtdPinch && PinchBolean[0] && auxiliarPinch)                         //indicador - usa o PinchDetector do LeapMotion, que já é calibrado para ele
                        {
                            if ((qtdPinch - contadorPinchInd) == 1)
                            {
                                PinchBolean[0] = false; PinchBolean[1] = true;
                            }
                            contadorPinch = int.Parse(conta_text_Pinch.text);
                            Debug.Log("conta_text_Pinch" + conta_text_Pinch.text);
                            contadorPinchInd = int.Parse(conta_text_Pinch.text);
                            Debug.Log("contadorPinchInd" + contadorPinchInd.ToString());
                            auxiliarPinch           = false;
                            conta_text_Abducao.text = contadorPinchInd.ToString();
                        }
                        //dedo médio
                        else if (contadorPinchMed < qtdPinch && pinchouDedos(f3.GetBoneCenter((int)Bone.BoneType.TYPE_DISTAL), f1.GetBoneCenter((int)Bone.BoneType.TYPE_DISTAL)) && PinchBolean[1] && auxiliarPinch)
                        {
                            if ((qtdPinch - contadorPinchMed) == 1)
                            {
                                PinchBolean[1] = false; PinchBolean[2] = true;
                            }
                            nome_exercicio.text = "Contador de Pinch Medio: ";
                            contadorPinchMed++;
                            Debug.Log("Pinchou médio: " + contadorPinchMed.ToString());
                            Debug.Log("conta_text_Pinch" + conta_text_Pinch.text);
                            auxiliarPinch           = false;
                            conta_text_Abducao.text = contadorPinchMed.ToString();
                        }
                        else if (!pinchouDedos(f3.GetBoneCenter((int)Bone.BoneType.TYPE_DISTAL), f1.GetBoneCenter((int)Bone.BoneType.TYPE_DISTAL)))
                        {
                            auxiliarPinch = true;
                        }
                        //anelar
                        else if (contadorPinchAnl < qtdPinch && pinchouDedos(f4.GetBoneCenter((int)Bone.BoneType.TYPE_DISTAL), f1.GetBoneCenter((int)Bone.BoneType.TYPE_DISTAL)) && PinchBolean[2] && auxiliarPinch)
                        {
                            if ((qtdPinch - contadorPinchAnl) == 1)
                            {
                                PinchBolean[2] = false; PinchBolean[3] = true;
                            }
                            nome_exercicio.text = "Contador de Pinch Anelar: ";
                            contadorPinchAnl++;
                            Debug.Log("Pinchou anelar: " + contadorPinchAnl.ToString());
                            auxiliarPinch           = false;
                            conta_text_Abducao.text = contadorPinchAnl.ToString();
                        }
                        else if (!pinchouDedos(f3.GetBoneCenter((int)Bone.BoneType.TYPE_DISTAL), f1.GetBoneCenter((int)Bone.BoneType.TYPE_DISTAL)))
                        {
                            auxiliarPinch = true;
                        }
                        //mindinho
                        else if (contadorPinchMindi < qtdPinch && pinchouDedos(f5.GetBoneCenter((int)Bone.BoneType.TYPE_DISTAL), f1.GetBoneCenter((int)Bone.BoneType.TYPE_DISTAL)) && PinchBolean[3] && auxiliarPinch)
                        {
                            if ((qtdPinch - contadorPinchMindi) == 1)
                            {
                                PinchBolean[3] = false; PinchBolean[0] = true;
                            }
                            nome_exercicio.text = "Contador de Pinch Mindinho: ";
                            contadorPinchMindi++;
                            Debug.Log("Pinchou mindinho: " + contadorPinchMindi.ToString());
                            auxiliarPinch           = false;
                            conta_text_Abducao.text = contadorPinchMindi.ToString();
                            Debug.Log("Ind " + contadorPinchInd + " Med " + contadorPinchMed + " Anl " + contadorPinchAnl + " Mindi " + contadorPinchMindi);
                        }
                        else if (!pinchouDedos(f3.GetBoneCenter((int)Bone.BoneType.TYPE_DISTAL), f1.GetBoneCenter((int)Bone.BoneType.TYPE_DISTAL)))
                        {
                            auxiliarPinch = true;
                        }

                        exercicioConcluido.enabled = false;
                        cuboProximoExercicio.SetActive(false);
                        proximoExercicio.enabled = false;
                    }

                    if ((contadorPinchInd == 5) && (contadorPinchAnl == 5) && (contadorPinchMed == 5) && (contadorPinchMindi == 5))
                    {
                        Debug.Log("ACABOU");
                        concluido = true;
                        exercicioConcluido.enabled = true;
                        cuboProximoExercicio.SetActive(true);
                        proximoExercicio.enabled = true;
                    }
                }
                else if (exerciciosBolean[3])
                {
                }
            }

            if (palm != null)
            {
                Rigidbody palmBody = palm.GetComponent <Rigidbody>();
                if (palmBody)
                {
                    palmBody.MovePosition(GetPalmCenter());
                    palmBody.MoveRotation(GetPalmRotation());
                }
                else
                {
                    palm.position = GetPalmCenter();
                    palm.rotation = GetPalmRotation();
                }
            }

            if (forearm != null)
            {
                // Set arm dimensions.
                CapsuleCollider capsule = forearm.GetComponent <CapsuleCollider>();
                if (capsule != null)
                {
                    // Initialization
                    capsule.direction  = 2;
                    forearm.localScale = new Vector3(1f / transform.lossyScale.x, 1f / transform.lossyScale.y, 1f / transform.lossyScale.z);

                    // Update
                    capsule.radius = GetArmWidth() / 2f;
                    capsule.height = GetArmLength() + GetArmWidth();
                }

                Rigidbody forearmBody = forearm.GetComponent <Rigidbody>();
                if (forearmBody)
                {
                    forearmBody.MovePosition(GetArmCenter());
                    forearmBody.MoveRotation(GetArmRotation());
                }
                else
                {
                    forearm.position = GetArmCenter();
                    forearm.rotation = GetArmRotation();
                }
            }
        }
Esempio n. 5
0
        public override void UpdateHand()
        {
            Rigidbody palmBody;

            for (int f = 0; f < fingers.Length; ++f)
            {
                if (fingers[f] != null)
                {
                    fingers[f].UpdateFinger();
                }
            }

            if (palm != null)
            {
                palmBody = palm.GetComponent <Rigidbody>();
                if (palmBody)
                {
                    palmBody.MovePosition(GetPalmCenter());
                    palmBody.MoveRotation(GetPalmRotation());
                }
                else
                {
                    palm.position = GetPalmCenter();
                    palm.rotation = GetPalmRotation();
                }
            }

            GameObject[] gameObjects = gameObject.scene.GetRootGameObjects();
            int          i           = 0;

            for (i = 0; i < gameObjects.Length && !gameObjects[i].ToString().StartsWith("LeapHandController"); i++)
            {
                ;
            }

            float differenceX = GetPalmCenter().x - gameObjects[i].transform.position.x;
            float differenceY = GetPalmCenter().y - gameObjects[i].transform.position.y;
            float differenceZ = GetPalmCenter().z - gameObjects[i].transform.position.z;

            Vector3 vec = new Vector3(0, 0, 0);

            vec.x = differenceX * 2;
            vec.y = differenceY * 2;
            vec.z = differenceZ * 2;

            palmBody = palm.GetComponent <Rigidbody>();
            if (palmBody)
            {
                palmBody.MovePosition(palm.position + vec);
            }
            else
            {
                palm.Translate(vec);
            }
            for (int f = 0; f < fingers.Length; ++f)
            {
                if (fingers[f] != null)
                {
                    FingerModel finger = fingers[f];
                    for (int b = 0; b < finger.bones.Length; ++b)
                    {
                        Transform bone = finger.bones[b];
                        if (bone)
                        {
                            Rigidbody boneBody = bone.GetComponent <Rigidbody>();
                            if (boneBody)
                            {
                                boneBody.MovePosition(vec + bone.position);
                            }
                            else
                            {
                                bone.Translate(vec);
                            }
                        }
                    }
                }
            }
        }