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