private void OnValidate() { for (int f = 0; f < fingers.Count; f++) { if (fingers[f].finger == HumanFinger.Thumb) { thumb = fingers[f]; } else if (fingers[f].finger == HumanFinger.Index) { index = fingers[f]; } else if (fingers[f].finger == HumanFinger.Middle) { middle = fingers[f]; } else if (fingers[f].finger == HumanFinger.Ring) { ring = fingers[f]; } else if (fingers[f].finger == HumanFinger.Pinky) { pinky = fingers[f]; } } }
public void FromFingerPoseToBones(FingerPose finger, List <AbstractTsf> bonesList) { // We have to copy the content as we can't overwrite the item's references. It will be merged again from the splitted bones array to InputDataProvider.bones for (int b = 0; b < bonesList.Count; b++) { if (b < finger.bones.Count) { AbstractTsf.Copy(finger.bones[b], bonesList[b]); } else { bonesList[b] = new AbstractTsf("Missing bone pose", Space.Self); } } }
void UpdateFingerFromPose(int idpFirstBoneIndex, int idpFingerBonesLength, FingerPose startPose, FingerPose endPose) { int idpFingerBoneIndex, startPoseIndex, endPoseIndex; Vector3 lerpedPos; Quaternion lerpedRot; for (int b = 1; b <= idpFingerBonesLength; b++) { idpFingerBoneIndex = idpFingerBonesLength - b; startPoseIndex = startPose.bones.Count - b; endPoseIndex = endPose.bones.Count - b; if (startPoseIndex >= 0 && endPoseIndex < 0) { lerpedPos = startPose.bones[startPoseIndex].position; lerpedRot = startPose.bones[startPoseIndex].rotation; } else if (startPoseIndex < 0 && endPoseIndex >= 0) { lerpedPos = endPose.bones[endPoseIndex].position; lerpedRot = endPose.bones[endPoseIndex].rotation; } else if (startPoseIndex >= 0 && endPoseIndex >= 0) { lerpedPos = Vector3.Lerp(startPose.bones[startPoseIndex].position, endPose.bones[endPoseIndex].position, poseLerp); lerpedRot = Quaternion.Lerp(startPose.bones[startPoseIndex].rotation, endPose.bones[endPoseIndex].rotation, poseLerp); } else { lerpedPos = Vector3.zero; lerpedRot = Quaternion.identity; } UpdateBone(idpFirstBoneIndex + idpFingerBoneIndex, Space.Self, lerpedRot, lerpedPos); } }
void FromBonesToFingerPose(FingerPose finger, List <AbstractTsf> bonesList) { // We can overwrite the item's references. The splitted array will remain splitted in fingers finger.bones = bonesList; }