Leg GetLeg(IBone leg) { var bones = leg.Traverse().Where(x => !x.Name.ToLower().Contains("buttock")).ToArray(); switch (bones.Length) { case 0: case 1: case 2: throw new NotImplementedException(); case 3: return(new Leg { UpperLeg = bones[0], LowerLeg = bones[1], Foot = bones[2], }); default: return(new Leg { UpperLeg = bones[bones.Length - 4], LowerLeg = bones[bones.Length - 3], Foot = bones[bones.Length - 2], Toes = bones[bones.Length - 1], }); } }
public static Vector3 CenterOfDescendant(this IBone self) { var sum = Vector3.zero; int i = 0; foreach (var x in self.Traverse()) { sum += x.SkeletonLoacalPosition; ++i; } return(sum / i); }
Arm GetArm(IBone shoulder) { var bones = shoulder.Traverse().ToArray(); switch (bones.Length) { case 0: case 1: case 2: case 3: throw new NotImplementedException(); default: return(new Arm { Shoulder = bones[0], UpperArm = bones[1], LowerArm = bones[2], Hand = bones[3], }); } }