private static void linkTrianglesToBones( E3DActor actor, HashMap orphanedTriangleBoneAttachments) { ArrayList triangleList = actor.getTriangleList(); E3DTriangle triangle = null; for (int i = 0; i < triangleList.size(); i++) { triangle = (E3DTriangle) triangleList.get(i); if (orphanedTriangleBoneAttachments.containsKey(triangle)) { VertexBoneInformation boneInfo = (VertexBoneInformation) orphanedTriangleBoneAttachments.get(triangle); E3DBone bone; for (int b = 0; b < 3; b++) { bone = actor.getSkeleton().findBoneByID(boneInfo.boneIDs[b]); if (bone != null) bone.attachVertex(triangle.getVertex(b)); else actor .getEngine() .getLogger() .writeLine( E3DEngineLogger.SEVERITY_WARNING, "The bone: " + E3DStringHelper.getNonNullableString(boneInfo.boneIDs[b]) + " could not be found in the actor thus vertices were not linked to it."); } } } }
private static void linkOrphanedBonesToNewBone( E3DActor actor, E3DBone possibleParentBone, E3DHashListMap orphanedBones) { if (orphanedBones.containsKey(possibleParentBone.getBoneID())) { ArrayList boneList = (ArrayList) orphanedBones.get(possibleParentBone.getBoneID()); for (int i = 0; i < boneList.size(); i++) { E3DBone childBone = (E3DBone) boneList.get(i); actor.getSkeleton().addBone(childBone, possibleParentBone.getBoneID()); // Try to recursively link other orphans to the newly attached bones linkOrphanedBonesToNewBone(actor, childBone, orphanedBones); } // We had to have added all of these, so remove them orphanedBones.remove(possibleParentBone.getBoneID()); } }