//----------------------------------------------------------------------------------------------------------------------------------------- // Hand Model WireFrame Functions /// <summary> Generate a base wireframe for the hand: 5 Fingers with 4 joints each. </summary> private void GenerateFingers() { if (fingerJoints == null) { float baseLength = 0; //all phalanges are 20mm, just for the sake of being able to see them(?) if (phalangeModel != null && handBase != null) { this.fingerJoints = new Transform[5][]; for (int f = 0; f < fingerJoints.Length; f++) { fingerJoints[f] = new Transform[4]; for (int i = 0; i < fingerJoints[f].Length; i++) { GameObject handPosition = GameObject.Instantiate(phalangeModel, this.handBase.transform); handPosition.name = "HandPostion" + f + "" + i; handPosition.transform.localRotation = new Quaternion(); fingerJoints[f][i] = handPosition.transform; if (i < fingerJoints[f].Length - 1) { if (handPosition.transform.childCount > 0) { Transform dX = handPosition.transform.GetChild(0); //Setup correct sizes. dX.localScale = new Vector3(dX.localScale.x, baseLength / 2.0f, dX.localScale.z); dX.localPosition = new Vector3(baseLength / 2.0f, 0, 0); } } else { Transform dX = handPosition.transform.GetChild(0); GameObject.Destroy(dX.gameObject); //remove dX } handPosition.SetActive(true); } } } else { SG_Debugger.Log("WARNING : No base model for Hand Wireframe"); } } }
/// <summary> Connect this Grabable's rigidBody to another using a FixedJoint </summary> /// <param name="other"></param> /// <returns>True, if the connection was sucesfully made.</returns> public bool ConnectJoint(Rigidbody other, float breakForce = SG_Grabable.defaultBreakForce) { if (other != null) { if (this.physicsBody) { this.connection = this.physicsBody.gameObject.AddComponent <FixedJoint>(); this.connection.connectedBody = other; this.connection.enableCollision = false; this.connection.breakForce = breakForce; return(true); } else { SG_Debugger.Log("Using a FixedJoint connection requires a Rigidbody."); } } else { SG_Debugger.Log("No rigidbody to connect to " + other.name); } return(false); }
/// <summary> Create a new glove section based on the parameters sent from the Sense Glove. </summary> /// <param name="gloveData"></param> private void SetupGlove(SenseGlove_Data gloveData) { if (!this.setupComplete && gloveData != null) { gloveBase.SetActive(true); gloveSectionModel.SetActive(false); int x = 0, y = 1, z = 2; if (gloveData.dataLoaded) { this.gloveBase.transform.localPosition = gloveData.commonOriginPos; this.gloveBase.transform.localRotation = gloveData.commonOriginRot; Vector3[][] glovePos = gloveData.glovePositions; Vector3[][] gloveLengths = gloveData.gloveLengths; this.gloveJoints = new Transform[glovePos.Length][]; for (int f = 0; f < gloveJoints.Length; f++) { gloveJoints[f] = new Transform[glovePos[f].Length]; for (int i = 0; i < gloveJoints[f].Length; i++) { GameObject gloveJoint = GameObject.Instantiate(gloveSectionModel, this.gloveBase.gameObject.transform); gloveJoint.name = "GlovePostion" + f + "" + i; gloveJoint.transform.localRotation = new Quaternion(); gloveJoint.transform.localPosition = glovePos[f][0]; if (i < gloveJoints[f].Length - 1) { if (gloveJoint.transform.childCount > 2) { Transform dX = gloveJoint.transform.GetChild(2); Transform dY = gloveJoint.transform.GetChild(1); Transform dZ = gloveJoint.transform.GetChild(0); //Setup correct sizes. if (gloveLengths[f][i][x] != 0) { dX.localScale = new Vector3(dX.localScale.x, gloveLengths[f][i][x] / 2.0f, dX.localScale.z); } else { dX.gameObject.SetActive(false); } if (gloveLengths[f][i][y] != 0) { dY.localScale = new Vector3(dX.localScale.x, gloveLengths[f][i][y] / 2.0f, dX.localScale.z); } else { dY.gameObject.SetActive(false); } if (gloveLengths[f][i][z] != 0) { dZ.localScale = new Vector3(dX.localScale.x, gloveLengths[f][i][z] / 2.0f, dX.localScale.z); } else { dZ.gameObject.SetActive(false); } //set correct positions based on ZYX? dY.localPosition = new Vector3(0, gloveLengths[f][i][y] / 2.0f, 0); dX.localPosition = new Vector3(gloveLengths[f][i][x] / 2.0f, gloveLengths[f][i][y], 0); //dY ? } } else { for (int j = 0; j < gloveJoint.transform.childCount - 1; j++) { gloveJoint.transform.GetChild(j).gameObject.SetActive(false); } } gloveJoint.SetActive(true); gloveJoints[f][i] = gloveJoint.transform; } } } else { SG_Debugger.Log("ERROR : No Glove Data was found..."); } } else { SG_Debugger.Log("WARNING : No base model for Glove Wireframe"); } }
/// <summary> Create all the individual finger sections based on the glove's handModel. </summary> /// <param name="gloveData"></param> private void SetupFingers(SenseGlove_Data gloveData) { this.resizeFingers = true; if (!this.setupComplete && gloveData != null) { int x = 0; if (phalangeModel != null && handBase != null) { if (gloveData.dataLoaded) { this.handBase.transform.localPosition = gloveData.commonOriginPos; this.handBase.transform.localRotation = gloveData.commonOriginRot; Vector3[][] handPos = gloveData.handPositions; Vector3[][] handLengths = gloveData.handLengths; this.fingerJoints = new Transform[handPos.Length][]; for (int f = 0; f < handPos.Length; f++) { List <Transform> joints = new List <Transform>(); for (int i = 0; i < handPos[f].Length; i++) { GameObject handPosition = GameObject.Instantiate(phalangeModel, this.handBase.transform); handPosition.name = "HandPostion" + f + "" + i; handPosition.transform.localRotation = new Quaternion(); if (i < handPos[f].Length - 1) { if (handPosition.transform.childCount > 0) { Transform dX = handPosition.transform.GetChild(0); //Setup correct sizes. if (handLengths[f][i][x] != 0) { dX.localScale = new Vector3(dX.localScale.x, handLengths[f][i][x] / 2.0f, dX.localScale.z); } else { dX.gameObject.SetActive(false); } dX.localPosition = new Vector3(handLengths[f][i][x] / 2.0f, 0, 0); } } else { Transform dX = handPosition.transform.GetChild(0); dX.gameObject.SetActive(false); } handPosition.SetActive(true); joints.Add(handPosition.transform); } this.fingerJoints[f] = (joints).ToArray(); } } else { SG_Debugger.Log("ERROR : No Hand Data was found..."); } } else { SG_Debugger.Log("WARNING : No base model for Hand Wireframe"); } } else { SG_Debugger.Log("WARNING : GloveData is null?"); } }
//----------------------------------------------------------------------------------------------------------------------------------------- // Glove Model WireFrame Functions /// <summary> Generate a wireframe for a glove, based on its GloveModel </summary> /// <param name="gloveModel"></param> public void GenerateGlove(SGCore.SG.SG_GloveInfo gloveModel) { if (gloveModel != null) { gloveBase.SetActive(true); gloveSectionModel.SetActive(true); Vector3[][] gloveLengths = SG.Util.SG_Conversions.ToUnityPositions(gloveModel.GloveLengths, true); int x = 0, y = 1, z = 2; this.gloveJoints = new Transform[gloveModel.GloveLengths.Length][]; for (int f = 0; f < gloveJoints.Length; f++) { gloveJoints[f] = new Transform[gloveModel.GloveLengths[f].Length + 1]; for (int i = 0; i < gloveJoints[f].Length; i++) { GameObject gloveJoint = GameObject.Instantiate(gloveSectionModel, this.gloveBase.gameObject.transform); gloveJoint.name = "GlovePostion" + f + "" + i; gloveJoint.transform.localRotation = Quaternion.identity; gloveJoints[f][i] = gloveJoint.transform; //gloveJoint.SetActive(true); if (i < gloveJoints[f].Length - 1) { if (gloveJoint.transform.childCount > 2) { Transform dX = gloveJoint.transform.GetChild(2); Transform dY = gloveJoint.transform.GetChild(1); Transform dZ = gloveJoint.transform.GetChild(0); //Setup correct sizes. if (gloveLengths[f][i][x] != 0) { dX.localScale = new Vector3(dX.localScale.x, gloveLengths[f][i][x] / 2.0f, dX.localScale.z); } else { dX.gameObject.SetActive(false); } if (gloveLengths[f][i][y] != 0) { dY.localScale = new Vector3(dX.localScale.x, gloveLengths[f][i][y] / 2.0f, dX.localScale.z); } else { dY.gameObject.SetActive(false); } if (gloveLengths[f][i][z] != 0) { dZ.localScale = new Vector3(dX.localScale.x, gloveLengths[f][i][z] / 2.0f, dX.localScale.z); } else { dZ.gameObject.SetActive(false); } //set correct positions based on ZYX? dY.localPosition = new Vector3(0, gloveLengths[f][i][y] / 2.0f, 0); dX.localPosition = new Vector3(gloveLengths[f][i][x] / 2.0f, gloveLengths[f][i][y] / 1.0f, 0); //dY ? } } else { for (int j = 0; j < gloveJoint.transform.childCount - 1; j++) //the last one is just the dot { GameObject.Destroy(gloveJoint.transform.GetChild(j).gameObject); } } } } gloveSectionModel.SetActive(false); } else { SG_Debugger.Log("WARNING : No base model for Glove Wireframe"); } }