private void readSkeleton() throws IOException { entityData.skeletonData = new SkeletonData(); if (header.ofs_joints == readBytes) { byte[] buffer = new byte[JOINT_SIZE * header.num_joints]; readBytes += in.read(buffer); int pos = 0; for (int i = 0; i < header.num_joints; ++i) { BoneData bone = new BoneData(); entityData.skeletonData.bones.add(bone); pos++; bone.name = texts.get(textPos++); bone.parentIndex = toInt(buffer, (pos++) * 4); bone.pos = new Vector3(); bone.pos.x = toFloat(buffer, (pos++) * 4); bone.pos.y = toFloat(buffer, (pos++) * 4); bone.pos.z = toFloat(buffer, (pos++) * 4); bone.rot = new Quaternion(); bone.rot.x = toFloat(buffer, (pos++) * 4); bone.rot.y = toFloat(buffer, (pos++) * 4); bone.rot.z = toFloat(buffer, (pos++) * 4); bone.rot.w = toFloat(buffer, (pos++) * 4); pos += 3; // Scale info not supported yet } } if (header.ofs_poses == readBytes) { // Dont know why the f**k I would need these... byte[] buffer = new byte[POSE_SIZE * header.num_poses]; readBytes += in.read(buffer); int pos = 0; entityData.skeletonData.poses = new PoseData[header.num_poses]; for (int i = 0; i < header.num_poses; ++i) { PoseData pose = new PoseData(); entityData.skeletonData.poses[i] = pose; pose.parent = toInt(buffer, (pos++) * 4); pose.channelmask = toInt(buffer, (pos++) * 4); for (int j = 0; j < 10; ++j) { pose.channeloffset[j] = toFloat(buffer, (pos++) * 4); } for (int j = 0; j < 10; ++j) { pose.channelscale[j] = toFloat(buffer, (pos++) * 4); } } } }