loadScene
loadScene: any = (((): any => {// scene node hierachy builderfunction buildNodeHierachy(nodeId: any, parentObject: any, json: any, parser: any): any {const { THREE } = Externals.getInstance();const nodeDef = json.nodes[nodeId];return parser.getDependency('node', nodeId).then((node: any) => {if (nodeDef.skin === undefined) return node;// build skeleton here as welllet skinEntry: any;return parser.getDependency('skin', nodeDef.skin).then((skin: any) => {skinEntry = skin;const pendingJoints = [];for (let i = 0, il = skinEntry.joints.length; i < il; i++) {pendingJoints.push(parser.getDependency('node', skinEntry.joints[i]));}return Promise.all(pendingJoints);}).then((jointNodes: any) => {node.traverse((mesh: any) => {if (!mesh.isMesh) return;const bones = [];const boneInverses = [];for (let j = 0, jl = jointNodes.length; j < jl; j++) {const jointNode = jointNodes[j];if (jointNode) {bones.push(jointNode);const mat = new THREE.Matrix4();if (skinEntry.inverseBindMatrices !== undefined) {mat.fromArray(skinEntry.inverseBindMatrices.array, j * 16);}boneInverses.push(mat);} else {console.warn('THREE.GLTFLoader: Joint "%s" could not be found.', skinEntry.joints[j]);}}mesh.bind(new THREE.Skeleton(bones, boneInverses), mesh.matrixWorld);});return node;});}).then((node: any) => {// build node hierachyparentObject.add(node);const pending = [];if (nodeDef.children) {const children = nodeDef.children;for (let i = 0, il = children.length; i < il; i++) {const child = children[i];pending.push(buildNodeHierachy(child, node, json, parser));}}return Promise.all(pending);});}const that = this;return function loadScene(sceneIndex: any): any {const json = that.json;const extensions = that.extensions;const sceneDef = that.json.scenes[sceneIndex];const parser = that;const { THREE } = Externals.getInstance();// Loader returns Group, not Scene.// See: https://github.com/mrdoob/three.js/issues/18342#issuecomment-578981172const scene = new THREE.Group();if (sceneDef.name) scene.name = parser.createUniqueName(sceneDef.name);assignExtrasToUserData(scene, sceneDef);if (sceneDef.extensions) addUnknownExtensionsToUserData(extensions, scene, sceneDef);const nodeIds = sceneDef.nodes || [];const pending = [];for (let i = 0, il = nodeIds.length; i < il; i++) {pending.push(buildNodeHierachy(nodeIds[i], scene, json, parser));}return Promise.all(pending).then(() => scene);};})())