buildSkeleton method

dynamic buildSkeleton(
  1. dynamic relationships,
  2. dynamic skeletons,
  3. dynamic id,
  4. dynamic name,
)

Implementation

buildSkeleton(relationships, skeletons, id, name) {
  var bone = null;

  relationships["parents"].forEach((parent) {
    for (var ID in skeletons.keys) {
      var skeleton = skeletons[ID];

      skeleton["rawBones"].asMap().forEach((i, rawBone) {
        if (rawBone["ID"] == parent["ID"]) {
          var subBone = bone;
          bone = new Bone();

          bone.matrixWorld.copy(rawBone["transformLink"]);

          // set name and id here - otherwise in cases where "subBone" is created it will not have a name / id

          bone.name =
              name != null ? PropertyBinding.sanitizeNodeName(name) : '';
          bone.id = id;

          if (skeleton["bones"].length <= i) {
            final boneList =
                List<Bone>.filled((i + 1) - skeleton["bones"].length, Bone());

            skeleton["bones"].addAll(boneList);
          }

          skeleton["bones"][i] = bone;

          // In cases where a bone is shared between multiple meshes
          // duplicate the bone here and and it as a child of the first bone
          if (subBone != null) {
            bone.add(subBone);
          }
        }
      });
    }
  });

  return bone;
}