Ejemplo n.º 1
0
  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);
        }
      }
    }
  }