@onerjs/core 8.33.6 → 8.33.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -28,7 +28,7 @@ import { Tools } from "../../Misc/tools.js";
|
|
|
28
28
|
import { PostProcess } from "../../PostProcesses/postProcess.js";
|
|
29
29
|
import { SpriteManager } from "../../Sprites/spriteManager.js";
|
|
30
30
|
import { GetIndividualParser, Parse } from "./babylonFileParser.function.js";
|
|
31
|
-
import { Texture } from "../../Materials.js";
|
|
31
|
+
import { Texture } from "../../Materials/Textures/texture.js";
|
|
32
32
|
/** @internal */
|
|
33
33
|
// eslint-disable-next-line @typescript-eslint/naming-convention, no-var
|
|
34
34
|
export var _BabylonLoaderRegistered = true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"babylonFileLoader.js","sourceRoot":"","sources":["../../../../../dev/core/src/Loading/Plugins/babylonFileLoader.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from \"../../Misc/logger\";\r\nimport type { Nullable } from \"../../types\";\r\nimport { Camera } from \"../../Cameras/camera\";\r\nimport type { Scene } from \"../../scene\";\r\nimport { Vector3 } from \"../../Maths/math.vector\";\r\nimport { Color3, Color4 } from \"../../Maths/math.color\";\r\nimport { Mesh } from \"../../Meshes/mesh\";\r\nimport type { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport { Geometry } from \"../../Meshes/geometry\";\r\nimport type { Node } from \"../../node\";\r\nimport { TransformNode } from \"../../Meshes/transformNode\";\r\nimport { Material } from \"../../Materials/material\";\r\nimport { MultiMaterial } from \"../../Materials/multiMaterial\";\r\nimport { CubeTexture } from \"../../Materials/Textures/cubeTexture\";\r\nimport { HDRCubeTexture } from \"../../Materials/Textures/hdrCubeTexture\";\r\nimport { AnimationGroup } from \"../../Animations/animationGroup\";\r\nimport { Light } from \"../../Lights/light\";\r\nimport { SceneComponentConstants } from \"../../sceneComponent\";\r\nimport { RegisterSceneLoaderPlugin } from \"../../Loading/sceneLoader\";\r\nimport { SceneLoaderFlags } from \"../sceneLoaderFlags\";\r\nimport { Constants } from \"../../Engines/constants\";\r\nimport { AssetContainer } from \"../../assetContainer\";\r\nimport { ActionManager } from \"../../Actions/actionManager\";\r\nimport type { IParticleSystem } from \"../../Particles/IParticleSystem\";\r\nimport { Skeleton } from \"../../Bones/skeleton\";\r\nimport { MorphTargetManager } from \"../../Morph/morphTargetManager\";\r\nimport { CannonJSPlugin } from \"../../Physics/v1/Plugins/cannonJSPlugin\";\r\nimport { OimoJSPlugin } from \"../../Physics/v1/Plugins/oimoJSPlugin\";\r\nimport { AmmoJSPlugin } from \"../../Physics/v1/Plugins/ammoJSPlugin\";\r\nimport { ReflectionProbe } from \"../../Probes/reflectionProbe\";\r\nimport { GetClass } from \"../../Misc/typeStore\";\r\nimport { Tools } from \"../../Misc/tools\";\r\nimport { PostProcess } from \"../../PostProcesses/postProcess\";\r\nimport { SpriteManager } from \"core/Sprites/spriteManager\";\r\nimport { GetIndividualParser, Parse } from \"./babylonFileParser.function\";\r\nimport { Texture } from \"core/Materials\";\r\n\r\n/** @internal */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention, no-var\r\nexport var _BabylonLoaderRegistered = true;\r\n\r\n/**\r\n * Helps setting up some configuration for the babylon file loader.\r\n */\r\nexport class BabylonFileLoaderConfiguration {\r\n /**\r\n * The loader does not allow injecting custom physics engine into the plugins.\r\n * Unfortunately in ES6, we need to manually inject them into the plugin.\r\n * So you could set this variable to your engine import to make it work.\r\n */\r\n public static LoaderInjectedPhysicsEngine: any = undefined;\r\n}\r\n\r\nlet TempIndexContainer: { [key: string]: Node } = {};\r\nlet TempMaterialIndexContainer: { [key: string]: Material } = {};\r\nlet TempMorphTargetManagerIndexContainer: { [key: string]: MorphTargetManager } = {};\r\n\r\nconst ParseMaterialByPredicate = (predicate: (parsedMaterial: any) => boolean, parsedData: any, scene: Scene, rootUrl: string) => {\r\n if (!parsedData.materials) {\r\n return null;\r\n }\r\n\r\n for (let index = 0, cache = parsedData.materials.length; index < cache; index++) {\r\n const parsedMaterial = parsedData.materials[index];\r\n if (predicate(parsedMaterial)) {\r\n return { parsedMaterial, material: Material.Parse(parsedMaterial, scene, rootUrl) };\r\n }\r\n }\r\n return null;\r\n};\r\n\r\nconst IsDescendantOf = (mesh: any, names: Array<any>, hierarchyIds: Array<number>) => {\r\n for (const i in names) {\r\n if (mesh.name === names[i]) {\r\n hierarchyIds.push(mesh.id);\r\n return true;\r\n }\r\n }\r\n if (mesh.parentId !== undefined && hierarchyIds.indexOf(mesh.parentId) !== -1) {\r\n hierarchyIds.push(mesh.id);\r\n return true;\r\n }\r\n return false;\r\n};\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nconst logOperation = (operation: string, producer: { file: string; name: string; version: string; exporter_version: string }) => {\r\n return (\r\n operation +\r\n \" of \" +\r\n (producer ? producer.file + \" from \" + producer.name + \" version: \" + producer.version + \", exporter version: \" + producer.exporter_version : \"unknown\")\r\n );\r\n};\r\n\r\nconst LoadDetailLevels = (scene: Scene, mesh: AbstractMesh) => {\r\n const mastermesh: Mesh = mesh as Mesh;\r\n\r\n // Every value specified in the ids array of the lod data points to another mesh which should be used as the lower LOD level.\r\n // The distances (or coverages) array values specified are used along with the lod mesh ids as a hint to determine the switching threshold for the various LODs.\r\n if (mesh._waitingData.lods) {\r\n if (mesh._waitingData.lods.ids && mesh._waitingData.lods.ids.length > 0) {\r\n const lodmeshes: string[] = mesh._waitingData.lods.ids;\r\n const wasenabled: boolean = mastermesh.isEnabled(false);\r\n if (mesh._waitingData.lods.distances) {\r\n const distances: number[] = mesh._waitingData.lods.distances;\r\n if (distances.length >= lodmeshes.length) {\r\n const culling: number = distances.length > lodmeshes.length ? distances[distances.length - 1] : 0;\r\n mastermesh.setEnabled(false);\r\n for (let index = 0; index < lodmeshes.length; index++) {\r\n const lodid: string = lodmeshes[index];\r\n const lodmesh: Mesh = scene.getMeshById(lodid) as Mesh;\r\n if (lodmesh != null) {\r\n mastermesh.addLODLevel(distances[index], lodmesh);\r\n }\r\n }\r\n if (culling > 0) {\r\n mastermesh.addLODLevel(culling, null);\r\n }\r\n if (wasenabled === true) {\r\n mastermesh.setEnabled(true);\r\n }\r\n } else {\r\n Tools.Warn(\"Invalid level of detail distances for \" + mesh.name);\r\n }\r\n }\r\n }\r\n mesh._waitingData.lods = null;\r\n }\r\n};\r\n\r\nconst FindParent = (parentId: any, parentInstanceIndex: any, scene: Scene) => {\r\n if (typeof parentId !== \"number\") {\r\n const parentEntry = scene.getLastEntryById(parentId);\r\n if (parentEntry && parentInstanceIndex !== undefined && parentInstanceIndex !== null) {\r\n const instance = (parentEntry as Mesh).instances[parseInt(parentInstanceIndex)];\r\n return instance;\r\n }\r\n return parentEntry;\r\n }\r\n\r\n const parent = TempIndexContainer[parentId];\r\n if (parent && parentInstanceIndex !== undefined && parentInstanceIndex !== null) {\r\n const instance = (parent as Mesh).instances[parseInt(parentInstanceIndex)];\r\n return instance;\r\n }\r\n\r\n return parent;\r\n};\r\n\r\nconst FindMaterial = (materialId: any, scene: Scene) => {\r\n if (typeof materialId !== \"number\") {\r\n return scene.getLastMaterialById(materialId, true);\r\n }\r\n\r\n return TempMaterialIndexContainer[materialId];\r\n};\r\n\r\n/**\r\n * @experimental\r\n * Loads an AssetContainer from a serialized Babylon scene.\r\n * @param scene The scene to load the asset container into.\r\n * @param serializedScene The serialized scene data. This can be either a JSON string, or an object (e.g. from a call to JSON.parse).\r\n * @param rootUrl The root URL for loading assets.\r\n * @returns The loaded AssetContainer.\r\n */\r\nexport function LoadAssetContainerFromSerializedScene(scene: Scene, serializedScene: string | object, rootUrl: string): AssetContainer {\r\n return LoadAssetContainer(scene, serializedScene, rootUrl);\r\n}\r\n\r\nconst LoadAssetContainer = (scene: Scene, data: string | object, rootUrl: string, onError?: (message: string, exception?: any) => void, addToScene = false): AssetContainer => {\r\n const container = new AssetContainer(scene);\r\n\r\n // Entire method running in try block, so ALWAYS logs as far as it got, only actually writes details\r\n // when SceneLoader.debugLogging = true (default), or exception encountered.\r\n // Everything stored in var log instead of writing separate lines to support only writing in exception,\r\n // and avoid problems with multiple concurrent .babylon loads.\r\n let log = \"importScene has failed JSON parse\";\r\n try {\r\n // eslint-disable-next-line no-var\r\n var parsedData = typeof data === \"object\" ? data : JSON.parse(data);\r\n log = \"\";\r\n const fullDetails = SceneLoaderFlags.loggingLevel === Constants.SCENELOADER_DETAILED_LOGGING;\r\n\r\n let index: number;\r\n let cache: number;\r\n\r\n // Environment texture\r\n if (parsedData.environmentTexture !== undefined && parsedData.environmentTexture !== null) {\r\n // PBR needed for both HDR texture (gamma space) & a sky box\r\n const isPBR = parsedData.isPBR !== undefined ? parsedData.isPBR : true;\r\n if (parsedData.environmentTextureType && parsedData.environmentTextureType === \"BABYLON.HDRCubeTexture\") {\r\n const hdrSize: number = parsedData.environmentTextureSize ? parsedData.environmentTextureSize : 128;\r\n const hdrTexture = new HDRCubeTexture(\r\n (parsedData.environmentTexture.match(/https?:\\/\\//g) ? \"\" : rootUrl) + parsedData.environmentTexture,\r\n scene,\r\n hdrSize,\r\n true,\r\n !isPBR,\r\n undefined,\r\n parsedData.environmentTexturePrefilterOnLoad\r\n );\r\n if (parsedData.environmentTextureRotationY) {\r\n hdrTexture.rotationY = parsedData.environmentTextureRotationY;\r\n }\r\n scene.environmentTexture = hdrTexture;\r\n } else {\r\n if (typeof parsedData.environmentTexture === \"object\") {\r\n const environmentTexture = CubeTexture.Parse(parsedData.environmentTexture, scene, rootUrl);\r\n scene.environmentTexture = environmentTexture;\r\n } else if ((parsedData.environmentTexture as string).endsWith(\".env\")) {\r\n const compressedTexture = new CubeTexture(\r\n (parsedData.environmentTexture.match(/https?:\\/\\//g) ? \"\" : rootUrl) + parsedData.environmentTexture,\r\n scene,\r\n parsedData.environmentTextureForcedExtension\r\n );\r\n if (parsedData.environmentTextureRotationY) {\r\n compressedTexture.rotationY = parsedData.environmentTextureRotationY;\r\n }\r\n scene.environmentTexture = compressedTexture;\r\n } else {\r\n const cubeTexture = CubeTexture.CreateFromPrefilteredData(\r\n (parsedData.environmentTexture.match(/https?:\\/\\//g) ? \"\" : rootUrl) + parsedData.environmentTexture,\r\n scene,\r\n parsedData.environmentTextureForcedExtension\r\n );\r\n if (parsedData.environmentTextureRotationY) {\r\n cubeTexture.rotationY = parsedData.environmentTextureRotationY;\r\n }\r\n scene.environmentTexture = cubeTexture;\r\n }\r\n }\r\n if (parsedData.createDefaultSkybox === true) {\r\n const skyboxScale = scene.activeCamera !== undefined && scene.activeCamera !== null ? (scene.activeCamera.maxZ - scene.activeCamera.minZ) / 2 : 1000;\r\n const skyboxBlurLevel = parsedData.skyboxBlurLevel || 0;\r\n scene.createDefaultSkybox(scene.environmentTexture, isPBR, skyboxScale, skyboxBlurLevel);\r\n }\r\n container.environmentTexture = scene.environmentTexture;\r\n }\r\n\r\n // Environment Intensity\r\n if (parsedData.environmentIntensity !== undefined && parsedData.environmentIntensity !== null) {\r\n scene.environmentIntensity = parsedData.environmentIntensity;\r\n }\r\n\r\n // IBL Intensity\r\n if (parsedData.iblIntensity !== undefined && parsedData.iblIntensity !== null) {\r\n scene.iblIntensity = parsedData.iblIntensity;\r\n }\r\n\r\n // Lights\r\n if (parsedData.lights !== undefined && parsedData.lights !== null) {\r\n for (index = 0, cache = parsedData.lights.length; index < cache; index++) {\r\n const parsedLight = parsedData.lights[index];\r\n const light = Light.Parse(parsedLight, scene);\r\n if (light) {\r\n TempIndexContainer[parsedLight.uniqueId] = light;\r\n container.lights.push(light);\r\n light._parentContainer = container;\r\n log += index === 0 ? \"\\n\\tLights:\" : \"\";\r\n log += \"\\n\\t\\t\" + light.toString(fullDetails);\r\n }\r\n }\r\n }\r\n\r\n // Reflection probes\r\n if (parsedData.reflectionProbes !== undefined && parsedData.reflectionProbes !== null) {\r\n for (index = 0, cache = parsedData.reflectionProbes.length; index < cache; index++) {\r\n const parsedReflectionProbe = parsedData.reflectionProbes[index];\r\n const reflectionProbe = ReflectionProbe.Parse(parsedReflectionProbe, scene, rootUrl);\r\n if (reflectionProbe) {\r\n container.reflectionProbes.push(reflectionProbe);\r\n reflectionProbe._parentContainer = container;\r\n log += index === 0 ? \"\\n\\tReflection Probes:\" : \"\";\r\n log += \"\\n\\t\\t\" + reflectionProbe.toString(fullDetails);\r\n }\r\n }\r\n }\r\n\r\n // Animations\r\n if (parsedData.animations !== undefined && parsedData.animations !== null) {\r\n for (index = 0, cache = parsedData.animations.length; index < cache; index++) {\r\n const parsedAnimation = parsedData.animations[index];\r\n const internalClass = GetClass(\"BABYLON.Animation\");\r\n if (internalClass) {\r\n const animation = internalClass.Parse(parsedAnimation);\r\n scene.animations.push(animation);\r\n container.animations.push(animation);\r\n log += index === 0 ? \"\\n\\tAnimations:\" : \"\";\r\n log += \"\\n\\t\\t\" + animation.toString(fullDetails);\r\n }\r\n }\r\n }\r\n\r\n // Materials\r\n if (parsedData.materials !== undefined && parsedData.materials !== null) {\r\n for (index = 0, cache = parsedData.materials.length; index < cache; index++) {\r\n const parsedMaterial = parsedData.materials[index];\r\n const mat = Material.Parse(parsedMaterial, scene, rootUrl);\r\n if (mat) {\r\n TempMaterialIndexContainer[parsedMaterial.uniqueId || parsedMaterial.id] = mat;\r\n container.materials.push(mat);\r\n mat._parentContainer = container;\r\n log += index === 0 ? \"\\n\\tMaterials:\" : \"\";\r\n log += \"\\n\\t\\t\" + mat.toString(fullDetails);\r\n\r\n // Textures\r\n const textures = mat.getActiveTextures();\r\n for (const t of textures) {\r\n if (container.textures.indexOf(t) == -1) {\r\n container.textures.push(t);\r\n t._parentContainer = container;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (parsedData.textures !== undefined && parsedData.textures !== null) {\r\n for (index = 0, cache = parsedData.textures.length; index < cache; index++) {\r\n const parsedTexture = parsedData.textures[index];\r\n const texture = Texture.Parse(parsedTexture, scene, rootUrl);\r\n if (texture) {\r\n if (container.textures.indexOf(texture) == -1) {\r\n container.textures.push(texture);\r\n texture._parentContainer = container;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (parsedData.multiMaterials !== undefined && parsedData.multiMaterials !== null) {\r\n for (index = 0, cache = parsedData.multiMaterials.length; index < cache; index++) {\r\n const parsedMultiMaterial = parsedData.multiMaterials[index];\r\n const mmat = MultiMaterial.ParseMultiMaterial(parsedMultiMaterial, scene);\r\n TempMaterialIndexContainer[parsedMultiMaterial.uniqueId || parsedMultiMaterial.id] = mmat;\r\n container.multiMaterials.push(mmat);\r\n mmat._parentContainer = container;\r\n\r\n log += index === 0 ? \"\\n\\tMultiMaterials:\" : \"\";\r\n log += \"\\n\\t\\t\" + mmat.toString(fullDetails);\r\n\r\n // Textures\r\n const textures = mmat.getActiveTextures();\r\n for (const t of textures) {\r\n if (container.textures.indexOf(t) == -1) {\r\n container.textures.push(t);\r\n t._parentContainer = container;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Morph targets\r\n if (parsedData.morphTargetManagers !== undefined && parsedData.morphTargetManagers !== null) {\r\n for (const parsedManager of parsedData.morphTargetManagers) {\r\n const manager = MorphTargetManager.Parse(parsedManager, scene);\r\n TempMorphTargetManagerIndexContainer[parsedManager.id] = manager;\r\n container.morphTargetManagers.push(manager);\r\n manager._parentContainer = container;\r\n }\r\n }\r\n\r\n // Skeletons\r\n if (parsedData.skeletons !== undefined && parsedData.skeletons !== null) {\r\n for (index = 0, cache = parsedData.skeletons.length; index < cache; index++) {\r\n const parsedSkeleton = parsedData.skeletons[index];\r\n const skeleton = Skeleton.Parse(parsedSkeleton, scene);\r\n container.skeletons.push(skeleton);\r\n skeleton._parentContainer = container;\r\n log += index === 0 ? \"\\n\\tSkeletons:\" : \"\";\r\n log += \"\\n\\t\\t\" + skeleton.toString(fullDetails);\r\n }\r\n }\r\n\r\n // Geometries\r\n const geometries = parsedData.geometries;\r\n if (geometries !== undefined && geometries !== null) {\r\n const addedGeometry = new Array<Nullable<Geometry>>();\r\n\r\n // VertexData\r\n const vertexData = geometries.vertexData;\r\n if (vertexData !== undefined && vertexData !== null) {\r\n for (index = 0, cache = vertexData.length; index < cache; index++) {\r\n const parsedVertexData = vertexData[index];\r\n addedGeometry.push(Geometry.Parse(parsedVertexData, scene, rootUrl));\r\n }\r\n }\r\n\r\n for (const g of addedGeometry) {\r\n if (g) {\r\n container.geometries.push(g);\r\n g._parentContainer = container;\r\n }\r\n }\r\n }\r\n\r\n // Transform nodes\r\n if (parsedData.transformNodes !== undefined && parsedData.transformNodes !== null) {\r\n for (index = 0, cache = parsedData.transformNodes.length; index < cache; index++) {\r\n const parsedTransformNode = parsedData.transformNodes[index];\r\n const node = TransformNode.Parse(parsedTransformNode, scene, rootUrl);\r\n TempIndexContainer[parsedTransformNode.uniqueId] = node;\r\n container.transformNodes.push(node);\r\n node._parentContainer = container;\r\n }\r\n }\r\n\r\n // Meshes\r\n if (parsedData.meshes !== undefined && parsedData.meshes !== null) {\r\n for (index = 0, cache = parsedData.meshes.length; index < cache; index++) {\r\n const parsedMesh = parsedData.meshes[index];\r\n const mesh = <AbstractMesh>Mesh.Parse(parsedMesh, scene, rootUrl);\r\n TempIndexContainer[parsedMesh.uniqueId] = mesh;\r\n container.meshes.push(mesh);\r\n mesh._parentContainer = container;\r\n if (mesh.hasInstances) {\r\n for (const instance of (mesh as Mesh).instances) {\r\n container.meshes.push(instance);\r\n instance._parentContainer = container;\r\n }\r\n }\r\n log += index === 0 ? \"\\n\\tMeshes:\" : \"\";\r\n log += \"\\n\\t\\t\" + mesh.toString(fullDetails);\r\n }\r\n }\r\n\r\n // Cameras\r\n if (parsedData.cameras !== undefined && parsedData.cameras !== null) {\r\n for (index = 0, cache = parsedData.cameras.length; index < cache; index++) {\r\n const parsedCamera = parsedData.cameras[index];\r\n const camera = Camera.Parse(parsedCamera, scene);\r\n TempIndexContainer[parsedCamera.uniqueId] = camera;\r\n container.cameras.push(camera);\r\n camera._parentContainer = container;\r\n log += index === 0 ? \"\\n\\tCameras:\" : \"\";\r\n log += \"\\n\\t\\t\" + camera.toString(fullDetails);\r\n }\r\n }\r\n\r\n // Postprocesses\r\n if (parsedData.postProcesses !== undefined && parsedData.postProcesses !== null) {\r\n for (index = 0, cache = parsedData.postProcesses.length; index < cache; index++) {\r\n const parsedPostProcess = parsedData.postProcesses[index];\r\n const postProcess = PostProcess.Parse(parsedPostProcess, scene, rootUrl);\r\n if (postProcess) {\r\n container.postProcesses.push(postProcess);\r\n postProcess._parentContainer = container;\r\n log += index === 0 ? \"\\nPostprocesses:\" : \"\";\r\n log += \"\\n\\t\\t\" + postProcess.toString();\r\n }\r\n }\r\n }\r\n\r\n // Animation Groups\r\n if (parsedData.animationGroups !== undefined && parsedData.animationGroups !== null && parsedData.animationGroups.length) {\r\n // Build the nodeMap only for scenes with animationGroups\r\n const nodeMap = new Map<Node[\"id\"], Node>();\r\n // Nodes in scene does not change when parsing animationGroups, so it's safe to build a map.\r\n // This follows the order of scene.getNodeById: mesh, transformNode, light, camera, bone\r\n for (let index = 0; index < scene.meshes.length; index++) {\r\n // This follows the behavior of scene.getXXXById, which picks the first match\r\n if (!nodeMap.has(scene.meshes[index].id)) {\r\n nodeMap.set(scene.meshes[index].id, scene.meshes[index]);\r\n }\r\n }\r\n for (let index = 0; index < scene.transformNodes.length; index++) {\r\n if (!nodeMap.has(scene.transformNodes[index].id)) {\r\n nodeMap.set(scene.transformNodes[index].id, scene.transformNodes[index]);\r\n }\r\n }\r\n for (let index = 0; index < scene.lights.length; index++) {\r\n if (!nodeMap.has(scene.lights[index].id)) {\r\n nodeMap.set(scene.lights[index].id, scene.lights[index]);\r\n }\r\n }\r\n for (let index = 0; index < scene.cameras.length; index++) {\r\n if (!nodeMap.has(scene.cameras[index].id)) {\r\n nodeMap.set(scene.cameras[index].id, scene.cameras[index]);\r\n }\r\n }\r\n for (let skeletonIndex = 0; skeletonIndex < scene.skeletons.length; skeletonIndex++) {\r\n const skeleton = scene.skeletons[skeletonIndex];\r\n for (let boneIndex = 0; boneIndex < skeleton.bones.length; boneIndex++) {\r\n if (!nodeMap.has(skeleton.bones[boneIndex].id)) {\r\n nodeMap.set(skeleton.bones[boneIndex].id, skeleton.bones[boneIndex]);\r\n }\r\n }\r\n }\r\n for (index = 0, cache = parsedData.animationGroups.length; index < cache; index++) {\r\n const parsedAnimationGroup = parsedData.animationGroups[index];\r\n const animationGroup = AnimationGroup.Parse(parsedAnimationGroup, scene, nodeMap);\r\n container.animationGroups.push(animationGroup);\r\n animationGroup._parentContainer = container;\r\n log += index === 0 ? \"\\n\\tAnimationGroups:\" : \"\";\r\n log += \"\\n\\t\\t\" + animationGroup.toString(fullDetails);\r\n }\r\n }\r\n\r\n // Sprites\r\n if (parsedData.spriteManagers) {\r\n for (let index = 0, cache = parsedData.spriteManagers.length; index < cache; index++) {\r\n const parsedSpriteManager = parsedData.spriteManagers[index];\r\n const spriteManager = SpriteManager.Parse(parsedSpriteManager, scene, rootUrl);\r\n log += \"\\n\\t\\tSpriteManager \" + spriteManager.name;\r\n }\r\n }\r\n\r\n // Browsing all the graph to connect the dots\r\n for (index = 0, cache = scene.cameras.length; index < cache; index++) {\r\n const camera = scene.cameras[index];\r\n if (camera._waitingParentId !== null) {\r\n camera.parent = FindParent(camera._waitingParentId, camera._waitingParentInstanceIndex, scene);\r\n camera._waitingParentId = null;\r\n camera._waitingParentInstanceIndex = null;\r\n }\r\n }\r\n\r\n for (index = 0, cache = scene.lights.length; index < cache; index++) {\r\n const light = scene.lights[index];\r\n if (light && light._waitingParentId !== null) {\r\n light.parent = FindParent(light._waitingParentId, light._waitingParentInstanceIndex, scene);\r\n light._waitingParentId = null;\r\n light._waitingParentInstanceIndex = null;\r\n }\r\n }\r\n\r\n // Connect parents & children and parse actions and lods\r\n for (index = 0, cache = scene.transformNodes.length; index < cache; index++) {\r\n const transformNode = scene.transformNodes[index];\r\n if (transformNode._waitingParentId !== null) {\r\n transformNode.parent = FindParent(transformNode._waitingParentId, transformNode._waitingParentInstanceIndex, scene);\r\n transformNode._waitingParentId = null;\r\n transformNode._waitingParentInstanceIndex = null;\r\n }\r\n }\r\n for (index = 0, cache = scene.meshes.length; index < cache; index++) {\r\n const mesh = scene.meshes[index];\r\n if (mesh._waitingParentId !== null) {\r\n mesh.parent = FindParent(mesh._waitingParentId, mesh._waitingParentInstanceIndex, scene);\r\n mesh._waitingParentId = null;\r\n mesh._waitingParentInstanceIndex = null;\r\n }\r\n if (mesh._waitingData.lods) {\r\n LoadDetailLevels(scene, mesh);\r\n }\r\n }\r\n\r\n // link multimats with materials\r\n for (const multimat of scene.multiMaterials) {\r\n for (const subMaterial of multimat._waitingSubMaterialsUniqueIds) {\r\n multimat.subMaterials.push(FindMaterial(subMaterial, scene));\r\n }\r\n multimat._waitingSubMaterialsUniqueIds = [];\r\n }\r\n\r\n // link meshes with materials\r\n for (const mesh of scene.meshes) {\r\n if (mesh._waitingMaterialId !== null) {\r\n mesh.material = FindMaterial(mesh._waitingMaterialId, scene);\r\n mesh._waitingMaterialId = null;\r\n }\r\n }\r\n\r\n // link meshes with morph target managers\r\n for (const mesh of scene.meshes) {\r\n if (mesh._waitingMorphTargetManagerId !== null) {\r\n mesh.morphTargetManager = TempMorphTargetManagerIndexContainer[mesh._waitingMorphTargetManagerId];\r\n mesh._waitingMorphTargetManagerId = null;\r\n }\r\n }\r\n\r\n // link skeleton transform nodes\r\n for (index = 0, cache = scene.skeletons.length; index < cache; index++) {\r\n const skeleton = scene.skeletons[index];\r\n if (skeleton._hasWaitingData) {\r\n if (skeleton.bones != null) {\r\n for (const bone of skeleton.bones) {\r\n if (bone._waitingTransformNodeId) {\r\n const linkTransformNode = scene.getLastEntryById(bone._waitingTransformNodeId) as TransformNode;\r\n if (linkTransformNode) {\r\n bone.linkTransformNode(linkTransformNode);\r\n }\r\n bone._waitingTransformNodeId = null;\r\n }\r\n }\r\n }\r\n\r\n skeleton._hasWaitingData = null;\r\n }\r\n }\r\n\r\n // freeze world matrix application\r\n for (index = 0, cache = scene.meshes.length; index < cache; index++) {\r\n const currentMesh = scene.meshes[index];\r\n if (currentMesh._waitingData.freezeWorldMatrix) {\r\n currentMesh.freezeWorldMatrix();\r\n currentMesh._waitingData.freezeWorldMatrix = null;\r\n } else {\r\n currentMesh.computeWorldMatrix(true);\r\n }\r\n }\r\n\r\n // Lights exclusions / inclusions\r\n for (index = 0, cache = scene.lights.length; index < cache; index++) {\r\n const light = scene.lights[index];\r\n // Excluded check\r\n if (light._excludedMeshesIds.length > 0) {\r\n for (let excludedIndex = 0; excludedIndex < light._excludedMeshesIds.length; excludedIndex++) {\r\n const excludedMesh = scene.getMeshById(light._excludedMeshesIds[excludedIndex]);\r\n\r\n if (excludedMesh) {\r\n light.excludedMeshes.push(excludedMesh);\r\n }\r\n }\r\n\r\n light._excludedMeshesIds = [];\r\n }\r\n\r\n // Included check\r\n if (light._includedOnlyMeshesIds.length > 0) {\r\n for (let includedOnlyIndex = 0; includedOnlyIndex < light._includedOnlyMeshesIds.length; includedOnlyIndex++) {\r\n const includedOnlyMesh = scene.getMeshById(light._includedOnlyMeshesIds[includedOnlyIndex]);\r\n\r\n if (includedOnlyMesh) {\r\n light.includedOnlyMeshes.push(includedOnlyMesh);\r\n }\r\n }\r\n\r\n light._includedOnlyMeshesIds = [];\r\n }\r\n }\r\n\r\n for (const g of scene.geometries) {\r\n g._loadedUniqueId = \"\";\r\n }\r\n\r\n Parse(parsedData, scene, container, rootUrl);\r\n\r\n // Actions (scene) Done last as it can access other objects.\r\n for (index = 0, cache = scene.meshes.length; index < cache; index++) {\r\n const mesh = scene.meshes[index];\r\n if (mesh._waitingData.actions) {\r\n ActionManager.Parse(mesh._waitingData.actions, mesh, scene);\r\n mesh._waitingData.actions = null;\r\n }\r\n }\r\n if (parsedData.actions !== undefined && parsedData.actions !== null) {\r\n ActionManager.Parse(parsedData.actions, null, scene);\r\n }\r\n } catch (err) {\r\n const msg = logOperation(\"loadAssets\", parsedData ? parsedData.producer : \"Unknown\") + log;\r\n if (onError) {\r\n onError(msg, err);\r\n } else {\r\n Logger.Log(msg);\r\n throw err;\r\n }\r\n } finally {\r\n TempIndexContainer = {};\r\n TempMaterialIndexContainer = {};\r\n TempMorphTargetManagerIndexContainer = {};\r\n\r\n if (!addToScene) {\r\n container.removeAllFromScene();\r\n }\r\n if (log !== null && SceneLoaderFlags.loggingLevel !== Constants.SCENELOADER_NO_LOGGING) {\r\n Logger.Log(\r\n logOperation(\"loadAssets\", parsedData ? parsedData.producer : \"Unknown\") + (SceneLoaderFlags.loggingLevel !== Constants.SCENELOADER_MINIMAL_LOGGING ? log : \"\")\r\n );\r\n }\r\n }\r\n\r\n return container;\r\n};\r\n\r\nRegisterSceneLoaderPlugin({\r\n name: \"babylon.js\",\r\n extensions: \".babylon\",\r\n canDirectLoad: (data: string) => {\r\n if (data.indexOf(\"babylon\") !== -1) {\r\n // We consider that the producer string is filled\r\n return true;\r\n }\r\n\r\n return false;\r\n },\r\n importMesh: (\r\n meshesNames: any,\r\n scene: Scene,\r\n data: any,\r\n rootUrl: string,\r\n meshes: AbstractMesh[],\r\n particleSystems: IParticleSystem[],\r\n skeletons: Skeleton[],\r\n onError?: (message: string, exception?: any) => void\r\n ): boolean => {\r\n // Entire method running in try block, so ALWAYS logs as far as it got, only actually writes details\r\n // when SceneLoader.debugLogging = true (default), or exception encountered.\r\n // Everything stored in var log instead of writing separate lines to support only writing in exception,\r\n // and avoid problems with multiple concurrent .babylon loads.\r\n let log = \"importMesh has failed JSON parse\";\r\n try {\r\n // eslint-disable-next-line no-var\r\n var parsedData = JSON.parse(data);\r\n log = \"\";\r\n const fullDetails = SceneLoaderFlags.loggingLevel === Constants.SCENELOADER_DETAILED_LOGGING;\r\n if (!meshesNames) {\r\n meshesNames = null;\r\n } else if (!Array.isArray(meshesNames)) {\r\n meshesNames = [meshesNames];\r\n }\r\n\r\n const hierarchyIds: number[] = [];\r\n const parsedIdToNodeMap = new Map<number, Node>();\r\n\r\n // Transform nodes (the overall idea is to load all of them as this is super fast and then get rid of the ones we don't need)\r\n const loadedTransformNodes = [];\r\n if (parsedData.transformNodes !== undefined && parsedData.transformNodes !== null) {\r\n for (let index = 0, cache = parsedData.transformNodes.length; index < cache; index++) {\r\n const parsedJSONTransformNode = parsedData.transformNodes[index];\r\n const parsedTransformNode = TransformNode.Parse(parsedJSONTransformNode, scene, rootUrl);\r\n loadedTransformNodes.push(parsedTransformNode);\r\n parsedIdToNodeMap.set(parsedTransformNode._waitingParsedUniqueId!, parsedTransformNode);\r\n parsedTransformNode._waitingParsedUniqueId = null;\r\n }\r\n }\r\n if (parsedData.meshes !== undefined && parsedData.meshes !== null) {\r\n const loadedSkeletonsIds = [];\r\n const loadedMaterialsIds: string[] = [];\r\n const loadedMaterialsUniqueIds: string[] = [];\r\n const loadedMorphTargetManagerIds: number[] = [];\r\n for (let index = 0, cache = parsedData.meshes.length; index < cache; index++) {\r\n const parsedMesh = parsedData.meshes[index];\r\n\r\n if (meshesNames === null || IsDescendantOf(parsedMesh, meshesNames, hierarchyIds)) {\r\n if (meshesNames !== null) {\r\n // Remove found mesh name from list.\r\n delete meshesNames[meshesNames.indexOf(parsedMesh.name)];\r\n }\r\n\r\n //Geometry?\r\n if (parsedMesh.geometryId !== undefined && parsedMesh.geometryId !== null) {\r\n //does the file contain geometries?\r\n if (parsedData.geometries !== undefined && parsedData.geometries !== null) {\r\n //find the correct geometry and add it to the scene\r\n let found: boolean = false;\r\n const geoms = [\"boxes\", \"spheres\", \"cylinders\", \"toruses\", \"grounds\", \"planes\", \"torusKnots\", \"vertexData\"];\r\n for (const geometryType of geoms) {\r\n if (!parsedData.geometries[geometryType] || !Array.isArray(parsedData.geometries[geometryType])) {\r\n continue;\r\n }\r\n const geom = parsedData.geometries[geometryType];\r\n for (const parsedGeometryData of geom) {\r\n if (parsedGeometryData.id === parsedMesh.geometryId) {\r\n switch (geometryType) {\r\n case \"vertexData\":\r\n Geometry.Parse(parsedGeometryData, scene, rootUrl);\r\n break;\r\n }\r\n found = true;\r\n break;\r\n }\r\n }\r\n\r\n if (found) {\r\n break;\r\n }\r\n }\r\n if (found === false) {\r\n Logger.Warn(\"Geometry not found for mesh \" + parsedMesh.id);\r\n }\r\n }\r\n }\r\n\r\n // Material ?\r\n if (parsedMesh.materialUniqueId || parsedMesh.materialId) {\r\n // if we have a unique ID, look up and store in loadedMaterialsUniqueIds, else use loadedMaterialsIds\r\n const materialArray = parsedMesh.materialUniqueId ? loadedMaterialsUniqueIds : loadedMaterialsIds;\r\n let materialFound = materialArray.indexOf(parsedMesh.materialUniqueId || parsedMesh.materialId) !== -1;\r\n if (materialFound === false && parsedData.multiMaterials !== undefined && parsedData.multiMaterials !== null) {\r\n // Loads a submaterial of a multimaterial\r\n const loadSubMaterial = (subMatId: string, predicate: (parsedMaterial: any) => boolean) => {\r\n materialArray.push(subMatId);\r\n const mat = ParseMaterialByPredicate(predicate, parsedData, scene, rootUrl);\r\n if (mat && mat.material) {\r\n TempMaterialIndexContainer[mat.parsedMaterial.uniqueId || mat.parsedMaterial.id] = mat.material;\r\n log += \"\\n\\tMaterial \" + mat.material.toString(fullDetails);\r\n }\r\n };\r\n for (let multimatIndex = 0, multimatCache = parsedData.multiMaterials.length; multimatIndex < multimatCache; multimatIndex++) {\r\n const parsedMultiMaterial = parsedData.multiMaterials[multimatIndex];\r\n if (\r\n (parsedMesh.materialUniqueId && parsedMultiMaterial.uniqueId === parsedMesh.materialUniqueId) ||\r\n parsedMultiMaterial.id === parsedMesh.materialId\r\n ) {\r\n if (parsedMultiMaterial.materialsUniqueIds) {\r\n // if the materials inside the multimat are stored by unique id\r\n for (const subMatId of parsedMultiMaterial.materialsUniqueIds) {\r\n loadSubMaterial(subMatId, (parsedMaterial) => parsedMaterial.uniqueId === subMatId);\r\n }\r\n } else {\r\n // if the mats are stored by id instead\r\n for (const subMatId of parsedMultiMaterial.materials) {\r\n loadSubMaterial(subMatId, (parsedMaterial) => parsedMaterial.id === subMatId);\r\n }\r\n }\r\n materialArray.push(parsedMultiMaterial.uniqueId || parsedMultiMaterial.id);\r\n const mmat = MultiMaterial.ParseMultiMaterial(parsedMultiMaterial, scene);\r\n TempMaterialIndexContainer[parsedMultiMaterial.uniqueId || parsedMultiMaterial.id] = mmat;\r\n if (mmat) {\r\n materialFound = true;\r\n log += \"\\n\\tMulti-Material \" + mmat.toString(fullDetails);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (materialFound === false) {\r\n materialArray.push(parsedMesh.materialUniqueId || parsedMesh.materialId);\r\n const mat = ParseMaterialByPredicate(\r\n (parsedMaterial) =>\r\n (parsedMesh.materialUniqueId && parsedMaterial.uniqueId === parsedMesh.materialUniqueId) || parsedMaterial.id === parsedMesh.materialId,\r\n parsedData,\r\n scene,\r\n rootUrl\r\n );\r\n if (!mat || !mat.material) {\r\n Logger.Warn(\"Material not found for mesh \" + parsedMesh.id);\r\n } else {\r\n TempMaterialIndexContainer[mat.parsedMaterial.uniqueId || mat.parsedMaterial.id] = mat.material;\r\n log += \"\\n\\tMaterial \" + mat.material.toString(fullDetails);\r\n }\r\n }\r\n }\r\n\r\n // Skeleton ?\r\n if (\r\n parsedMesh.skeletonId !== null &&\r\n parsedMesh.skeletonId !== undefined &&\r\n parsedData.skeletonId !== -1 &&\r\n parsedData.skeletons !== undefined &&\r\n parsedData.skeletons !== null\r\n ) {\r\n const skeletonAlreadyLoaded = loadedSkeletonsIds.indexOf(parsedMesh.skeletonId) > -1;\r\n if (!skeletonAlreadyLoaded) {\r\n for (let skeletonIndex = 0, skeletonCache = parsedData.skeletons.length; skeletonIndex < skeletonCache; skeletonIndex++) {\r\n const parsedSkeleton = parsedData.skeletons[skeletonIndex];\r\n if (parsedSkeleton.id === parsedMesh.skeletonId) {\r\n const skeleton = Skeleton.Parse(parsedSkeleton, scene);\r\n skeletons.push(skeleton);\r\n loadedSkeletonsIds.push(parsedSkeleton.id);\r\n log += \"\\n\\tSkeleton \" + skeleton.toString(fullDetails);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Morph targets ?\r\n if (parsedMesh.morphTargetManagerId > -1 && parsedData.morphTargetManagers !== undefined && parsedData.morphTargetManagers !== null) {\r\n const morphTargetManagerAlreadyLoaded = loadedMorphTargetManagerIds.indexOf(parsedMesh.morphTargetManagerId) > -1;\r\n if (!morphTargetManagerAlreadyLoaded) {\r\n for (let morphTargetManagerIndex = 0; morphTargetManagerIndex < parsedData.morphTargetManagers.length; morphTargetManagerIndex++) {\r\n const parsedManager = parsedData.morphTargetManagers[morphTargetManagerIndex];\r\n if (parsedManager.id === parsedMesh.morphTargetManagerId) {\r\n const morphTargetManager = MorphTargetManager.Parse(parsedManager, scene);\r\n TempMorphTargetManagerIndexContainer[parsedManager.id] = morphTargetManager;\r\n loadedMorphTargetManagerIds.push(parsedManager.id);\r\n log += \"\\nMorph target manager\" + morphTargetManager.toString();\r\n }\r\n }\r\n }\r\n }\r\n\r\n const mesh = Mesh.Parse(parsedMesh, scene, rootUrl);\r\n meshes.push(mesh);\r\n parsedIdToNodeMap.set(mesh._waitingParsedUniqueId!, mesh);\r\n mesh._waitingParsedUniqueId = null;\r\n log += \"\\n\\tMesh \" + mesh.toString(fullDetails);\r\n }\r\n }\r\n\r\n // link multimats with materials\r\n for (const multimat of scene.multiMaterials) {\r\n for (const subMaterial of multimat._waitingSubMaterialsUniqueIds) {\r\n multimat.subMaterials.push(FindMaterial(subMaterial, scene));\r\n }\r\n multimat._waitingSubMaterialsUniqueIds = [];\r\n }\r\n\r\n // link meshes with materials\r\n for (const mesh of scene.meshes) {\r\n if (mesh._waitingMaterialId !== null) {\r\n mesh.material = FindMaterial(mesh._waitingMaterialId, scene);\r\n mesh._waitingMaterialId = null;\r\n }\r\n }\r\n\r\n // link meshes with morph target managers\r\n for (const mesh of scene.meshes) {\r\n if (mesh._waitingMorphTargetManagerId !== null) {\r\n mesh.morphTargetManager = TempMorphTargetManagerIndexContainer[mesh._waitingMorphTargetManagerId];\r\n mesh._waitingMorphTargetManagerId = null;\r\n }\r\n }\r\n\r\n // Connecting parents and lods\r\n for (let index = 0, cache = scene.transformNodes.length; index < cache; index++) {\r\n const transformNode = scene.transformNodes[index];\r\n if (transformNode._waitingParentId !== null) {\r\n let parent = parsedIdToNodeMap.get(parseInt(transformNode._waitingParentId)) || null;\r\n if (parent === null) {\r\n parent = scene.getLastEntryById(transformNode._waitingParentId);\r\n }\r\n let parentNode = parent;\r\n if (transformNode._waitingParentInstanceIndex) {\r\n parentNode = (parent as Mesh).instances[parseInt(transformNode._waitingParentInstanceIndex)];\r\n transformNode._waitingParentInstanceIndex = null;\r\n }\r\n transformNode.parent = parentNode;\r\n transformNode._waitingParentId = null;\r\n }\r\n }\r\n let currentMesh: AbstractMesh;\r\n for (let index = 0, cache = scene.meshes.length; index < cache; index++) {\r\n currentMesh = scene.meshes[index];\r\n if (currentMesh._waitingParentId) {\r\n let parent = parsedIdToNodeMap.get(parseInt(currentMesh._waitingParentId)) || null;\r\n if (parent === null) {\r\n parent = scene.getLastEntryById(currentMesh._waitingParentId);\r\n }\r\n let parentNode = parent;\r\n if (currentMesh._waitingParentInstanceIndex) {\r\n parentNode = (parent as Mesh).instances[parseInt(currentMesh._waitingParentInstanceIndex)];\r\n currentMesh._waitingParentInstanceIndex = null;\r\n }\r\n currentMesh.parent = parentNode;\r\n currentMesh._waitingParentId = null;\r\n }\r\n if (currentMesh._waitingData.lods) {\r\n LoadDetailLevels(scene, currentMesh);\r\n }\r\n }\r\n\r\n // Remove unused transform nodes\r\n for (const transformNode of loadedTransformNodes) {\r\n const childMeshes = transformNode.getChildMeshes(false);\r\n if (!childMeshes.length) {\r\n transformNode.dispose();\r\n }\r\n }\r\n\r\n // link skeleton transform nodes\r\n for (let index = 0, cache = scene.skeletons.length; index < cache; index++) {\r\n const skeleton = scene.skeletons[index];\r\n if (skeleton._hasWaitingData) {\r\n if (skeleton.bones != null) {\r\n for (const bone of skeleton.bones) {\r\n if (bone._waitingTransformNodeId) {\r\n const linkTransformNode = scene.getLastEntryById(bone._waitingTransformNodeId) as TransformNode;\r\n if (linkTransformNode) {\r\n bone.linkTransformNode(linkTransformNode);\r\n }\r\n bone._waitingTransformNodeId = null;\r\n }\r\n }\r\n }\r\n\r\n skeleton._hasWaitingData = null;\r\n }\r\n }\r\n\r\n // freeze and compute world matrix application\r\n for (let index = 0, cache = scene.meshes.length; index < cache; index++) {\r\n currentMesh = scene.meshes[index];\r\n if (currentMesh._waitingData.freezeWorldMatrix) {\r\n currentMesh.freezeWorldMatrix();\r\n currentMesh._waitingData.freezeWorldMatrix = null;\r\n } else {\r\n currentMesh.computeWorldMatrix(true);\r\n }\r\n }\r\n }\r\n\r\n // Particles\r\n if (parsedData.particleSystems !== undefined && parsedData.particleSystems !== null) {\r\n const parser = GetIndividualParser(SceneComponentConstants.NAME_PARTICLESYSTEM);\r\n if (parser) {\r\n for (let index = 0, cache = parsedData.particleSystems.length; index < cache; index++) {\r\n const parsedParticleSystem = parsedData.particleSystems[index];\r\n if (hierarchyIds.indexOf(parsedParticleSystem.emitterId) !== -1) {\r\n particleSystems.push(parser(parsedParticleSystem, scene, rootUrl));\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (const g of scene.geometries) {\r\n g._loadedUniqueId = \"\";\r\n }\r\n\r\n return true;\r\n } catch (err) {\r\n const msg = logOperation(\"importMesh\", parsedData ? parsedData.producer : \"Unknown\") + log;\r\n if (onError) {\r\n onError(msg, err);\r\n } else {\r\n Logger.Log(msg);\r\n throw err;\r\n }\r\n } finally {\r\n if (log !== null && SceneLoaderFlags.loggingLevel !== Constants.SCENELOADER_NO_LOGGING) {\r\n Logger.Log(\r\n logOperation(\"importMesh\", parsedData ? parsedData.producer : \"Unknown\") + (SceneLoaderFlags.loggingLevel !== Constants.SCENELOADER_MINIMAL_LOGGING ? log : \"\")\r\n );\r\n }\r\n TempMaterialIndexContainer = {};\r\n TempMorphTargetManagerIndexContainer = {};\r\n }\r\n\r\n return false;\r\n },\r\n load: (scene: Scene, data: string, rootUrl: string, onError?: (message: string, exception?: any) => void): boolean => {\r\n // Entire method running in try block, so ALWAYS logs as far as it got, only actually writes details\r\n // when SceneLoader.debugLogging = true (default), or exception encountered.\r\n // Everything stored in var log instead of writing separate lines to support only writing in exception,\r\n // and avoid problems with multiple concurrent .babylon loads.\r\n let log = \"importScene has failed JSON parse\";\r\n try {\r\n // eslint-disable-next-line no-var\r\n var parsedData = JSON.parse(data);\r\n log = \"\";\r\n\r\n // Scene\r\n if (parsedData.useDelayedTextureLoading !== undefined && parsedData.useDelayedTextureLoading !== null) {\r\n scene.useDelayedTextureLoading = parsedData.useDelayedTextureLoading && !SceneLoaderFlags.ForceFullSceneLoadingForIncremental;\r\n }\r\n if (parsedData.autoClear !== undefined && parsedData.autoClear !== null) {\r\n scene.autoClear = parsedData.autoClear;\r\n }\r\n if (parsedData.clearColor !== undefined && parsedData.clearColor !== null) {\r\n scene.clearColor = Color4.FromArray(parsedData.clearColor);\r\n }\r\n if (parsedData.ambientColor !== undefined && parsedData.ambientColor !== null) {\r\n scene.ambientColor = Color3.FromArray(parsedData.ambientColor);\r\n }\r\n if (parsedData.gravity !== undefined && parsedData.gravity !== null) {\r\n scene.gravity = Vector3.FromArray(parsedData.gravity);\r\n }\r\n\r\n if (parsedData.useRightHandedSystem !== undefined) {\r\n scene.useRightHandedSystem = !!parsedData.useRightHandedSystem;\r\n }\r\n\r\n // Fog\r\n if (parsedData.fogMode !== undefined && parsedData.fogMode !== null) {\r\n scene.fogMode = parsedData.fogMode;\r\n }\r\n if (parsedData.fogColor !== undefined && parsedData.fogColor !== null) {\r\n scene.fogColor = Color3.FromArray(parsedData.fogColor);\r\n }\r\n if (parsedData.fogStart !== undefined && parsedData.fogStart !== null) {\r\n scene.fogStart = parsedData.fogStart;\r\n }\r\n if (parsedData.fogEnd !== undefined && parsedData.fogEnd !== null) {\r\n scene.fogEnd = parsedData.fogEnd;\r\n }\r\n if (parsedData.fogDensity !== undefined && parsedData.fogDensity !== null) {\r\n scene.fogDensity = parsedData.fogDensity;\r\n }\r\n log += \"\\tFog mode for scene: \";\r\n switch (scene.fogMode) {\r\n case 0:\r\n log += \"none\\n\";\r\n break;\r\n // getters not compiling, so using hardcoded\r\n case 1:\r\n log += \"exp\\n\";\r\n break;\r\n case 2:\r\n log += \"exp2\\n\";\r\n break;\r\n case 3:\r\n log += \"linear\\n\";\r\n break;\r\n }\r\n\r\n //Physics\r\n if (parsedData.physicsEnabled) {\r\n let physicsPlugin;\r\n if (parsedData.physicsEngine === \"cannon\" || parsedData.physicsEngine === CannonJSPlugin.name) {\r\n physicsPlugin = new CannonJSPlugin(undefined, undefined, BabylonFileLoaderConfiguration.LoaderInjectedPhysicsEngine);\r\n } else if (parsedData.physicsEngine === \"oimo\" || parsedData.physicsEngine === OimoJSPlugin.name) {\r\n physicsPlugin = new OimoJSPlugin(undefined, BabylonFileLoaderConfiguration.LoaderInjectedPhysicsEngine);\r\n } else if (parsedData.physicsEngine === \"ammo\" || parsedData.physicsEngine === AmmoJSPlugin.name) {\r\n physicsPlugin = new AmmoJSPlugin(undefined, BabylonFileLoaderConfiguration.LoaderInjectedPhysicsEngine, undefined);\r\n }\r\n log = \"\\tPhysics engine \" + (parsedData.physicsEngine ? parsedData.physicsEngine : \"oimo\") + \" enabled\\n\";\r\n //else - default engine, which is currently oimo\r\n const physicsGravity = parsedData.gravity ? Vector3.FromArray(parsedData.gravity) : parsedData.physicsGravity ? Vector3.FromArray(parsedData.physicsGravity) : null;\r\n scene.enablePhysics(physicsGravity, physicsPlugin);\r\n }\r\n\r\n // Metadata\r\n if (parsedData.metadata !== undefined && parsedData.metadata !== null) {\r\n scene.metadata = parsedData.metadata;\r\n }\r\n\r\n //collisions, if defined. otherwise, default is true\r\n if (parsedData.collisionsEnabled !== undefined && parsedData.collisionsEnabled !== null) {\r\n scene.collisionsEnabled = parsedData.collisionsEnabled;\r\n }\r\n\r\n const container = LoadAssetContainer(scene, data, rootUrl, onError, true);\r\n if (!container) {\r\n return false;\r\n }\r\n\r\n if (parsedData.autoAnimate) {\r\n scene.beginAnimation(scene, parsedData.autoAnimateFrom, parsedData.autoAnimateTo, parsedData.autoAnimateLoop, parsedData.autoAnimateSpeed || 1.0);\r\n }\r\n\r\n if (parsedData.activeCameraID !== undefined && parsedData.activeCameraID !== null) {\r\n scene.setActiveCameraById(parsedData.activeCameraID);\r\n }\r\n\r\n // Finish\r\n return true;\r\n } catch (err) {\r\n const msg = logOperation(\"importScene\", parsedData ? parsedData.producer : \"Unknown\") + log;\r\n if (onError) {\r\n onError(msg, err);\r\n } else {\r\n Logger.Log(msg);\r\n throw err;\r\n }\r\n } finally {\r\n if (log !== null && SceneLoaderFlags.loggingLevel !== Constants.SCENELOADER_NO_LOGGING) {\r\n Logger.Log(\r\n logOperation(\"importScene\", parsedData ? parsedData.producer : \"Unknown\") + (SceneLoaderFlags.loggingLevel !== Constants.SCENELOADER_MINIMAL_LOGGING ? log : \"\")\r\n );\r\n }\r\n }\r\n return false;\r\n },\r\n loadAssetContainer: (scene: Scene, data: string, rootUrl: string, onError?: (message: string, exception?: any) => void): AssetContainer => {\r\n const container = LoadAssetContainer(scene, data, rootUrl, onError);\r\n return container;\r\n },\r\n});\r\n"]}
|
|
1
|
+
{"version":3,"file":"babylonFileLoader.js","sourceRoot":"","sources":["../../../../../dev/core/src/Loading/Plugins/babylonFileLoader.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from \"../../Misc/logger\";\r\nimport type { Nullable } from \"../../types\";\r\nimport { Camera } from \"../../Cameras/camera\";\r\nimport type { Scene } from \"../../scene\";\r\nimport { Vector3 } from \"../../Maths/math.vector\";\r\nimport { Color3, Color4 } from \"../../Maths/math.color\";\r\nimport { Mesh } from \"../../Meshes/mesh\";\r\nimport type { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport { Geometry } from \"../../Meshes/geometry\";\r\nimport type { Node } from \"../../node\";\r\nimport { TransformNode } from \"../../Meshes/transformNode\";\r\nimport { Material } from \"../../Materials/material\";\r\nimport { MultiMaterial } from \"../../Materials/multiMaterial\";\r\nimport { CubeTexture } from \"../../Materials/Textures/cubeTexture\";\r\nimport { HDRCubeTexture } from \"../../Materials/Textures/hdrCubeTexture\";\r\nimport { AnimationGroup } from \"../../Animations/animationGroup\";\r\nimport { Light } from \"../../Lights/light\";\r\nimport { SceneComponentConstants } from \"../../sceneComponent\";\r\nimport { RegisterSceneLoaderPlugin } from \"../../Loading/sceneLoader\";\r\nimport { SceneLoaderFlags } from \"../sceneLoaderFlags\";\r\nimport { Constants } from \"../../Engines/constants\";\r\nimport { AssetContainer } from \"../../assetContainer\";\r\nimport { ActionManager } from \"../../Actions/actionManager\";\r\nimport type { IParticleSystem } from \"../../Particles/IParticleSystem\";\r\nimport { Skeleton } from \"../../Bones/skeleton\";\r\nimport { MorphTargetManager } from \"../../Morph/morphTargetManager\";\r\nimport { CannonJSPlugin } from \"../../Physics/v1/Plugins/cannonJSPlugin\";\r\nimport { OimoJSPlugin } from \"../../Physics/v1/Plugins/oimoJSPlugin\";\r\nimport { AmmoJSPlugin } from \"../../Physics/v1/Plugins/ammoJSPlugin\";\r\nimport { ReflectionProbe } from \"../../Probes/reflectionProbe\";\r\nimport { GetClass } from \"../../Misc/typeStore\";\r\nimport { Tools } from \"../../Misc/tools\";\r\nimport { PostProcess } from \"../../PostProcesses/postProcess\";\r\nimport { SpriteManager } from \"core/Sprites/spriteManager\";\r\nimport { GetIndividualParser, Parse } from \"./babylonFileParser.function\";\r\nimport { Texture } from \"../../Materials/Textures/texture\";\r\n\r\n/** @internal */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention, no-var\r\nexport var _BabylonLoaderRegistered = true;\r\n\r\n/**\r\n * Helps setting up some configuration for the babylon file loader.\r\n */\r\nexport class BabylonFileLoaderConfiguration {\r\n /**\r\n * The loader does not allow injecting custom physics engine into the plugins.\r\n * Unfortunately in ES6, we need to manually inject them into the plugin.\r\n * So you could set this variable to your engine import to make it work.\r\n */\r\n public static LoaderInjectedPhysicsEngine: any = undefined;\r\n}\r\n\r\nlet TempIndexContainer: { [key: string]: Node } = {};\r\nlet TempMaterialIndexContainer: { [key: string]: Material } = {};\r\nlet TempMorphTargetManagerIndexContainer: { [key: string]: MorphTargetManager } = {};\r\n\r\nconst ParseMaterialByPredicate = (predicate: (parsedMaterial: any) => boolean, parsedData: any, scene: Scene, rootUrl: string) => {\r\n if (!parsedData.materials) {\r\n return null;\r\n }\r\n\r\n for (let index = 0, cache = parsedData.materials.length; index < cache; index++) {\r\n const parsedMaterial = parsedData.materials[index];\r\n if (predicate(parsedMaterial)) {\r\n return { parsedMaterial, material: Material.Parse(parsedMaterial, scene, rootUrl) };\r\n }\r\n }\r\n return null;\r\n};\r\n\r\nconst IsDescendantOf = (mesh: any, names: Array<any>, hierarchyIds: Array<number>) => {\r\n for (const i in names) {\r\n if (mesh.name === names[i]) {\r\n hierarchyIds.push(mesh.id);\r\n return true;\r\n }\r\n }\r\n if (mesh.parentId !== undefined && hierarchyIds.indexOf(mesh.parentId) !== -1) {\r\n hierarchyIds.push(mesh.id);\r\n return true;\r\n }\r\n return false;\r\n};\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nconst logOperation = (operation: string, producer: { file: string; name: string; version: string; exporter_version: string }) => {\r\n return (\r\n operation +\r\n \" of \" +\r\n (producer ? producer.file + \" from \" + producer.name + \" version: \" + producer.version + \", exporter version: \" + producer.exporter_version : \"unknown\")\r\n );\r\n};\r\n\r\nconst LoadDetailLevels = (scene: Scene, mesh: AbstractMesh) => {\r\n const mastermesh: Mesh = mesh as Mesh;\r\n\r\n // Every value specified in the ids array of the lod data points to another mesh which should be used as the lower LOD level.\r\n // The distances (or coverages) array values specified are used along with the lod mesh ids as a hint to determine the switching threshold for the various LODs.\r\n if (mesh._waitingData.lods) {\r\n if (mesh._waitingData.lods.ids && mesh._waitingData.lods.ids.length > 0) {\r\n const lodmeshes: string[] = mesh._waitingData.lods.ids;\r\n const wasenabled: boolean = mastermesh.isEnabled(false);\r\n if (mesh._waitingData.lods.distances) {\r\n const distances: number[] = mesh._waitingData.lods.distances;\r\n if (distances.length >= lodmeshes.length) {\r\n const culling: number = distances.length > lodmeshes.length ? distances[distances.length - 1] : 0;\r\n mastermesh.setEnabled(false);\r\n for (let index = 0; index < lodmeshes.length; index++) {\r\n const lodid: string = lodmeshes[index];\r\n const lodmesh: Mesh = scene.getMeshById(lodid) as Mesh;\r\n if (lodmesh != null) {\r\n mastermesh.addLODLevel(distances[index], lodmesh);\r\n }\r\n }\r\n if (culling > 0) {\r\n mastermesh.addLODLevel(culling, null);\r\n }\r\n if (wasenabled === true) {\r\n mastermesh.setEnabled(true);\r\n }\r\n } else {\r\n Tools.Warn(\"Invalid level of detail distances for \" + mesh.name);\r\n }\r\n }\r\n }\r\n mesh._waitingData.lods = null;\r\n }\r\n};\r\n\r\nconst FindParent = (parentId: any, parentInstanceIndex: any, scene: Scene) => {\r\n if (typeof parentId !== \"number\") {\r\n const parentEntry = scene.getLastEntryById(parentId);\r\n if (parentEntry && parentInstanceIndex !== undefined && parentInstanceIndex !== null) {\r\n const instance = (parentEntry as Mesh).instances[parseInt(parentInstanceIndex)];\r\n return instance;\r\n }\r\n return parentEntry;\r\n }\r\n\r\n const parent = TempIndexContainer[parentId];\r\n if (parent && parentInstanceIndex !== undefined && parentInstanceIndex !== null) {\r\n const instance = (parent as Mesh).instances[parseInt(parentInstanceIndex)];\r\n return instance;\r\n }\r\n\r\n return parent;\r\n};\r\n\r\nconst FindMaterial = (materialId: any, scene: Scene) => {\r\n if (typeof materialId !== \"number\") {\r\n return scene.getLastMaterialById(materialId, true);\r\n }\r\n\r\n return TempMaterialIndexContainer[materialId];\r\n};\r\n\r\n/**\r\n * @experimental\r\n * Loads an AssetContainer from a serialized Babylon scene.\r\n * @param scene The scene to load the asset container into.\r\n * @param serializedScene The serialized scene data. This can be either a JSON string, or an object (e.g. from a call to JSON.parse).\r\n * @param rootUrl The root URL for loading assets.\r\n * @returns The loaded AssetContainer.\r\n */\r\nexport function LoadAssetContainerFromSerializedScene(scene: Scene, serializedScene: string | object, rootUrl: string): AssetContainer {\r\n return LoadAssetContainer(scene, serializedScene, rootUrl);\r\n}\r\n\r\nconst LoadAssetContainer = (scene: Scene, data: string | object, rootUrl: string, onError?: (message: string, exception?: any) => void, addToScene = false): AssetContainer => {\r\n const container = new AssetContainer(scene);\r\n\r\n // Entire method running in try block, so ALWAYS logs as far as it got, only actually writes details\r\n // when SceneLoader.debugLogging = true (default), or exception encountered.\r\n // Everything stored in var log instead of writing separate lines to support only writing in exception,\r\n // and avoid problems with multiple concurrent .babylon loads.\r\n let log = \"importScene has failed JSON parse\";\r\n try {\r\n // eslint-disable-next-line no-var\r\n var parsedData = typeof data === \"object\" ? data : JSON.parse(data);\r\n log = \"\";\r\n const fullDetails = SceneLoaderFlags.loggingLevel === Constants.SCENELOADER_DETAILED_LOGGING;\r\n\r\n let index: number;\r\n let cache: number;\r\n\r\n // Environment texture\r\n if (parsedData.environmentTexture !== undefined && parsedData.environmentTexture !== null) {\r\n // PBR needed for both HDR texture (gamma space) & a sky box\r\n const isPBR = parsedData.isPBR !== undefined ? parsedData.isPBR : true;\r\n if (parsedData.environmentTextureType && parsedData.environmentTextureType === \"BABYLON.HDRCubeTexture\") {\r\n const hdrSize: number = parsedData.environmentTextureSize ? parsedData.environmentTextureSize : 128;\r\n const hdrTexture = new HDRCubeTexture(\r\n (parsedData.environmentTexture.match(/https?:\\/\\//g) ? \"\" : rootUrl) + parsedData.environmentTexture,\r\n scene,\r\n hdrSize,\r\n true,\r\n !isPBR,\r\n undefined,\r\n parsedData.environmentTexturePrefilterOnLoad\r\n );\r\n if (parsedData.environmentTextureRotationY) {\r\n hdrTexture.rotationY = parsedData.environmentTextureRotationY;\r\n }\r\n scene.environmentTexture = hdrTexture;\r\n } else {\r\n if (typeof parsedData.environmentTexture === \"object\") {\r\n const environmentTexture = CubeTexture.Parse(parsedData.environmentTexture, scene, rootUrl);\r\n scene.environmentTexture = environmentTexture;\r\n } else if ((parsedData.environmentTexture as string).endsWith(\".env\")) {\r\n const compressedTexture = new CubeTexture(\r\n (parsedData.environmentTexture.match(/https?:\\/\\//g) ? \"\" : rootUrl) + parsedData.environmentTexture,\r\n scene,\r\n parsedData.environmentTextureForcedExtension\r\n );\r\n if (parsedData.environmentTextureRotationY) {\r\n compressedTexture.rotationY = parsedData.environmentTextureRotationY;\r\n }\r\n scene.environmentTexture = compressedTexture;\r\n } else {\r\n const cubeTexture = CubeTexture.CreateFromPrefilteredData(\r\n (parsedData.environmentTexture.match(/https?:\\/\\//g) ? \"\" : rootUrl) + parsedData.environmentTexture,\r\n scene,\r\n parsedData.environmentTextureForcedExtension\r\n );\r\n if (parsedData.environmentTextureRotationY) {\r\n cubeTexture.rotationY = parsedData.environmentTextureRotationY;\r\n }\r\n scene.environmentTexture = cubeTexture;\r\n }\r\n }\r\n if (parsedData.createDefaultSkybox === true) {\r\n const skyboxScale = scene.activeCamera !== undefined && scene.activeCamera !== null ? (scene.activeCamera.maxZ - scene.activeCamera.minZ) / 2 : 1000;\r\n const skyboxBlurLevel = parsedData.skyboxBlurLevel || 0;\r\n scene.createDefaultSkybox(scene.environmentTexture, isPBR, skyboxScale, skyboxBlurLevel);\r\n }\r\n container.environmentTexture = scene.environmentTexture;\r\n }\r\n\r\n // Environment Intensity\r\n if (parsedData.environmentIntensity !== undefined && parsedData.environmentIntensity !== null) {\r\n scene.environmentIntensity = parsedData.environmentIntensity;\r\n }\r\n\r\n // IBL Intensity\r\n if (parsedData.iblIntensity !== undefined && parsedData.iblIntensity !== null) {\r\n scene.iblIntensity = parsedData.iblIntensity;\r\n }\r\n\r\n // Lights\r\n if (parsedData.lights !== undefined && parsedData.lights !== null) {\r\n for (index = 0, cache = parsedData.lights.length; index < cache; index++) {\r\n const parsedLight = parsedData.lights[index];\r\n const light = Light.Parse(parsedLight, scene);\r\n if (light) {\r\n TempIndexContainer[parsedLight.uniqueId] = light;\r\n container.lights.push(light);\r\n light._parentContainer = container;\r\n log += index === 0 ? \"\\n\\tLights:\" : \"\";\r\n log += \"\\n\\t\\t\" + light.toString(fullDetails);\r\n }\r\n }\r\n }\r\n\r\n // Reflection probes\r\n if (parsedData.reflectionProbes !== undefined && parsedData.reflectionProbes !== null) {\r\n for (index = 0, cache = parsedData.reflectionProbes.length; index < cache; index++) {\r\n const parsedReflectionProbe = parsedData.reflectionProbes[index];\r\n const reflectionProbe = ReflectionProbe.Parse(parsedReflectionProbe, scene, rootUrl);\r\n if (reflectionProbe) {\r\n container.reflectionProbes.push(reflectionProbe);\r\n reflectionProbe._parentContainer = container;\r\n log += index === 0 ? \"\\n\\tReflection Probes:\" : \"\";\r\n log += \"\\n\\t\\t\" + reflectionProbe.toString(fullDetails);\r\n }\r\n }\r\n }\r\n\r\n // Animations\r\n if (parsedData.animations !== undefined && parsedData.animations !== null) {\r\n for (index = 0, cache = parsedData.animations.length; index < cache; index++) {\r\n const parsedAnimation = parsedData.animations[index];\r\n const internalClass = GetClass(\"BABYLON.Animation\");\r\n if (internalClass) {\r\n const animation = internalClass.Parse(parsedAnimation);\r\n scene.animations.push(animation);\r\n container.animations.push(animation);\r\n log += index === 0 ? \"\\n\\tAnimations:\" : \"\";\r\n log += \"\\n\\t\\t\" + animation.toString(fullDetails);\r\n }\r\n }\r\n }\r\n\r\n // Materials\r\n if (parsedData.materials !== undefined && parsedData.materials !== null) {\r\n for (index = 0, cache = parsedData.materials.length; index < cache; index++) {\r\n const parsedMaterial = parsedData.materials[index];\r\n const mat = Material.Parse(parsedMaterial, scene, rootUrl);\r\n if (mat) {\r\n TempMaterialIndexContainer[parsedMaterial.uniqueId || parsedMaterial.id] = mat;\r\n container.materials.push(mat);\r\n mat._parentContainer = container;\r\n log += index === 0 ? \"\\n\\tMaterials:\" : \"\";\r\n log += \"\\n\\t\\t\" + mat.toString(fullDetails);\r\n\r\n // Textures\r\n const textures = mat.getActiveTextures();\r\n for (const t of textures) {\r\n if (container.textures.indexOf(t) == -1) {\r\n container.textures.push(t);\r\n t._parentContainer = container;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (parsedData.textures !== undefined && parsedData.textures !== null) {\r\n for (index = 0, cache = parsedData.textures.length; index < cache; index++) {\r\n const parsedTexture = parsedData.textures[index];\r\n const texture = Texture.Parse(parsedTexture, scene, rootUrl);\r\n if (texture) {\r\n if (container.textures.indexOf(texture) == -1) {\r\n container.textures.push(texture);\r\n texture._parentContainer = container;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (parsedData.multiMaterials !== undefined && parsedData.multiMaterials !== null) {\r\n for (index = 0, cache = parsedData.multiMaterials.length; index < cache; index++) {\r\n const parsedMultiMaterial = parsedData.multiMaterials[index];\r\n const mmat = MultiMaterial.ParseMultiMaterial(parsedMultiMaterial, scene);\r\n TempMaterialIndexContainer[parsedMultiMaterial.uniqueId || parsedMultiMaterial.id] = mmat;\r\n container.multiMaterials.push(mmat);\r\n mmat._parentContainer = container;\r\n\r\n log += index === 0 ? \"\\n\\tMultiMaterials:\" : \"\";\r\n log += \"\\n\\t\\t\" + mmat.toString(fullDetails);\r\n\r\n // Textures\r\n const textures = mmat.getActiveTextures();\r\n for (const t of textures) {\r\n if (container.textures.indexOf(t) == -1) {\r\n container.textures.push(t);\r\n t._parentContainer = container;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Morph targets\r\n if (parsedData.morphTargetManagers !== undefined && parsedData.morphTargetManagers !== null) {\r\n for (const parsedManager of parsedData.morphTargetManagers) {\r\n const manager = MorphTargetManager.Parse(parsedManager, scene);\r\n TempMorphTargetManagerIndexContainer[parsedManager.id] = manager;\r\n container.morphTargetManagers.push(manager);\r\n manager._parentContainer = container;\r\n }\r\n }\r\n\r\n // Skeletons\r\n if (parsedData.skeletons !== undefined && parsedData.skeletons !== null) {\r\n for (index = 0, cache = parsedData.skeletons.length; index < cache; index++) {\r\n const parsedSkeleton = parsedData.skeletons[index];\r\n const skeleton = Skeleton.Parse(parsedSkeleton, scene);\r\n container.skeletons.push(skeleton);\r\n skeleton._parentContainer = container;\r\n log += index === 0 ? \"\\n\\tSkeletons:\" : \"\";\r\n log += \"\\n\\t\\t\" + skeleton.toString(fullDetails);\r\n }\r\n }\r\n\r\n // Geometries\r\n const geometries = parsedData.geometries;\r\n if (geometries !== undefined && geometries !== null) {\r\n const addedGeometry = new Array<Nullable<Geometry>>();\r\n\r\n // VertexData\r\n const vertexData = geometries.vertexData;\r\n if (vertexData !== undefined && vertexData !== null) {\r\n for (index = 0, cache = vertexData.length; index < cache; index++) {\r\n const parsedVertexData = vertexData[index];\r\n addedGeometry.push(Geometry.Parse(parsedVertexData, scene, rootUrl));\r\n }\r\n }\r\n\r\n for (const g of addedGeometry) {\r\n if (g) {\r\n container.geometries.push(g);\r\n g._parentContainer = container;\r\n }\r\n }\r\n }\r\n\r\n // Transform nodes\r\n if (parsedData.transformNodes !== undefined && parsedData.transformNodes !== null) {\r\n for (index = 0, cache = parsedData.transformNodes.length; index < cache; index++) {\r\n const parsedTransformNode = parsedData.transformNodes[index];\r\n const node = TransformNode.Parse(parsedTransformNode, scene, rootUrl);\r\n TempIndexContainer[parsedTransformNode.uniqueId] = node;\r\n container.transformNodes.push(node);\r\n node._parentContainer = container;\r\n }\r\n }\r\n\r\n // Meshes\r\n if (parsedData.meshes !== undefined && parsedData.meshes !== null) {\r\n for (index = 0, cache = parsedData.meshes.length; index < cache; index++) {\r\n const parsedMesh = parsedData.meshes[index];\r\n const mesh = <AbstractMesh>Mesh.Parse(parsedMesh, scene, rootUrl);\r\n TempIndexContainer[parsedMesh.uniqueId] = mesh;\r\n container.meshes.push(mesh);\r\n mesh._parentContainer = container;\r\n if (mesh.hasInstances) {\r\n for (const instance of (mesh as Mesh).instances) {\r\n container.meshes.push(instance);\r\n instance._parentContainer = container;\r\n }\r\n }\r\n log += index === 0 ? \"\\n\\tMeshes:\" : \"\";\r\n log += \"\\n\\t\\t\" + mesh.toString(fullDetails);\r\n }\r\n }\r\n\r\n // Cameras\r\n if (parsedData.cameras !== undefined && parsedData.cameras !== null) {\r\n for (index = 0, cache = parsedData.cameras.length; index < cache; index++) {\r\n const parsedCamera = parsedData.cameras[index];\r\n const camera = Camera.Parse(parsedCamera, scene);\r\n TempIndexContainer[parsedCamera.uniqueId] = camera;\r\n container.cameras.push(camera);\r\n camera._parentContainer = container;\r\n log += index === 0 ? \"\\n\\tCameras:\" : \"\";\r\n log += \"\\n\\t\\t\" + camera.toString(fullDetails);\r\n }\r\n }\r\n\r\n // Postprocesses\r\n if (parsedData.postProcesses !== undefined && parsedData.postProcesses !== null) {\r\n for (index = 0, cache = parsedData.postProcesses.length; index < cache; index++) {\r\n const parsedPostProcess = parsedData.postProcesses[index];\r\n const postProcess = PostProcess.Parse(parsedPostProcess, scene, rootUrl);\r\n if (postProcess) {\r\n container.postProcesses.push(postProcess);\r\n postProcess._parentContainer = container;\r\n log += index === 0 ? \"\\nPostprocesses:\" : \"\";\r\n log += \"\\n\\t\\t\" + postProcess.toString();\r\n }\r\n }\r\n }\r\n\r\n // Animation Groups\r\n if (parsedData.animationGroups !== undefined && parsedData.animationGroups !== null && parsedData.animationGroups.length) {\r\n // Build the nodeMap only for scenes with animationGroups\r\n const nodeMap = new Map<Node[\"id\"], Node>();\r\n // Nodes in scene does not change when parsing animationGroups, so it's safe to build a map.\r\n // This follows the order of scene.getNodeById: mesh, transformNode, light, camera, bone\r\n for (let index = 0; index < scene.meshes.length; index++) {\r\n // This follows the behavior of scene.getXXXById, which picks the first match\r\n if (!nodeMap.has(scene.meshes[index].id)) {\r\n nodeMap.set(scene.meshes[index].id, scene.meshes[index]);\r\n }\r\n }\r\n for (let index = 0; index < scene.transformNodes.length; index++) {\r\n if (!nodeMap.has(scene.transformNodes[index].id)) {\r\n nodeMap.set(scene.transformNodes[index].id, scene.transformNodes[index]);\r\n }\r\n }\r\n for (let index = 0; index < scene.lights.length; index++) {\r\n if (!nodeMap.has(scene.lights[index].id)) {\r\n nodeMap.set(scene.lights[index].id, scene.lights[index]);\r\n }\r\n }\r\n for (let index = 0; index < scene.cameras.length; index++) {\r\n if (!nodeMap.has(scene.cameras[index].id)) {\r\n nodeMap.set(scene.cameras[index].id, scene.cameras[index]);\r\n }\r\n }\r\n for (let skeletonIndex = 0; skeletonIndex < scene.skeletons.length; skeletonIndex++) {\r\n const skeleton = scene.skeletons[skeletonIndex];\r\n for (let boneIndex = 0; boneIndex < skeleton.bones.length; boneIndex++) {\r\n if (!nodeMap.has(skeleton.bones[boneIndex].id)) {\r\n nodeMap.set(skeleton.bones[boneIndex].id, skeleton.bones[boneIndex]);\r\n }\r\n }\r\n }\r\n for (index = 0, cache = parsedData.animationGroups.length; index < cache; index++) {\r\n const parsedAnimationGroup = parsedData.animationGroups[index];\r\n const animationGroup = AnimationGroup.Parse(parsedAnimationGroup, scene, nodeMap);\r\n container.animationGroups.push(animationGroup);\r\n animationGroup._parentContainer = container;\r\n log += index === 0 ? \"\\n\\tAnimationGroups:\" : \"\";\r\n log += \"\\n\\t\\t\" + animationGroup.toString(fullDetails);\r\n }\r\n }\r\n\r\n // Sprites\r\n if (parsedData.spriteManagers) {\r\n for (let index = 0, cache = parsedData.spriteManagers.length; index < cache; index++) {\r\n const parsedSpriteManager = parsedData.spriteManagers[index];\r\n const spriteManager = SpriteManager.Parse(parsedSpriteManager, scene, rootUrl);\r\n log += \"\\n\\t\\tSpriteManager \" + spriteManager.name;\r\n }\r\n }\r\n\r\n // Browsing all the graph to connect the dots\r\n for (index = 0, cache = scene.cameras.length; index < cache; index++) {\r\n const camera = scene.cameras[index];\r\n if (camera._waitingParentId !== null) {\r\n camera.parent = FindParent(camera._waitingParentId, camera._waitingParentInstanceIndex, scene);\r\n camera._waitingParentId = null;\r\n camera._waitingParentInstanceIndex = null;\r\n }\r\n }\r\n\r\n for (index = 0, cache = scene.lights.length; index < cache; index++) {\r\n const light = scene.lights[index];\r\n if (light && light._waitingParentId !== null) {\r\n light.parent = FindParent(light._waitingParentId, light._waitingParentInstanceIndex, scene);\r\n light._waitingParentId = null;\r\n light._waitingParentInstanceIndex = null;\r\n }\r\n }\r\n\r\n // Connect parents & children and parse actions and lods\r\n for (index = 0, cache = scene.transformNodes.length; index < cache; index++) {\r\n const transformNode = scene.transformNodes[index];\r\n if (transformNode._waitingParentId !== null) {\r\n transformNode.parent = FindParent(transformNode._waitingParentId, transformNode._waitingParentInstanceIndex, scene);\r\n transformNode._waitingParentId = null;\r\n transformNode._waitingParentInstanceIndex = null;\r\n }\r\n }\r\n for (index = 0, cache = scene.meshes.length; index < cache; index++) {\r\n const mesh = scene.meshes[index];\r\n if (mesh._waitingParentId !== null) {\r\n mesh.parent = FindParent(mesh._waitingParentId, mesh._waitingParentInstanceIndex, scene);\r\n mesh._waitingParentId = null;\r\n mesh._waitingParentInstanceIndex = null;\r\n }\r\n if (mesh._waitingData.lods) {\r\n LoadDetailLevels(scene, mesh);\r\n }\r\n }\r\n\r\n // link multimats with materials\r\n for (const multimat of scene.multiMaterials) {\r\n for (const subMaterial of multimat._waitingSubMaterialsUniqueIds) {\r\n multimat.subMaterials.push(FindMaterial(subMaterial, scene));\r\n }\r\n multimat._waitingSubMaterialsUniqueIds = [];\r\n }\r\n\r\n // link meshes with materials\r\n for (const mesh of scene.meshes) {\r\n if (mesh._waitingMaterialId !== null) {\r\n mesh.material = FindMaterial(mesh._waitingMaterialId, scene);\r\n mesh._waitingMaterialId = null;\r\n }\r\n }\r\n\r\n // link meshes with morph target managers\r\n for (const mesh of scene.meshes) {\r\n if (mesh._waitingMorphTargetManagerId !== null) {\r\n mesh.morphTargetManager = TempMorphTargetManagerIndexContainer[mesh._waitingMorphTargetManagerId];\r\n mesh._waitingMorphTargetManagerId = null;\r\n }\r\n }\r\n\r\n // link skeleton transform nodes\r\n for (index = 0, cache = scene.skeletons.length; index < cache; index++) {\r\n const skeleton = scene.skeletons[index];\r\n if (skeleton._hasWaitingData) {\r\n if (skeleton.bones != null) {\r\n for (const bone of skeleton.bones) {\r\n if (bone._waitingTransformNodeId) {\r\n const linkTransformNode = scene.getLastEntryById(bone._waitingTransformNodeId) as TransformNode;\r\n if (linkTransformNode) {\r\n bone.linkTransformNode(linkTransformNode);\r\n }\r\n bone._waitingTransformNodeId = null;\r\n }\r\n }\r\n }\r\n\r\n skeleton._hasWaitingData = null;\r\n }\r\n }\r\n\r\n // freeze world matrix application\r\n for (index = 0, cache = scene.meshes.length; index < cache; index++) {\r\n const currentMesh = scene.meshes[index];\r\n if (currentMesh._waitingData.freezeWorldMatrix) {\r\n currentMesh.freezeWorldMatrix();\r\n currentMesh._waitingData.freezeWorldMatrix = null;\r\n } else {\r\n currentMesh.computeWorldMatrix(true);\r\n }\r\n }\r\n\r\n // Lights exclusions / inclusions\r\n for (index = 0, cache = scene.lights.length; index < cache; index++) {\r\n const light = scene.lights[index];\r\n // Excluded check\r\n if (light._excludedMeshesIds.length > 0) {\r\n for (let excludedIndex = 0; excludedIndex < light._excludedMeshesIds.length; excludedIndex++) {\r\n const excludedMesh = scene.getMeshById(light._excludedMeshesIds[excludedIndex]);\r\n\r\n if (excludedMesh) {\r\n light.excludedMeshes.push(excludedMesh);\r\n }\r\n }\r\n\r\n light._excludedMeshesIds = [];\r\n }\r\n\r\n // Included check\r\n if (light._includedOnlyMeshesIds.length > 0) {\r\n for (let includedOnlyIndex = 0; includedOnlyIndex < light._includedOnlyMeshesIds.length; includedOnlyIndex++) {\r\n const includedOnlyMesh = scene.getMeshById(light._includedOnlyMeshesIds[includedOnlyIndex]);\r\n\r\n if (includedOnlyMesh) {\r\n light.includedOnlyMeshes.push(includedOnlyMesh);\r\n }\r\n }\r\n\r\n light._includedOnlyMeshesIds = [];\r\n }\r\n }\r\n\r\n for (const g of scene.geometries) {\r\n g._loadedUniqueId = \"\";\r\n }\r\n\r\n Parse(parsedData, scene, container, rootUrl);\r\n\r\n // Actions (scene) Done last as it can access other objects.\r\n for (index = 0, cache = scene.meshes.length; index < cache; index++) {\r\n const mesh = scene.meshes[index];\r\n if (mesh._waitingData.actions) {\r\n ActionManager.Parse(mesh._waitingData.actions, mesh, scene);\r\n mesh._waitingData.actions = null;\r\n }\r\n }\r\n if (parsedData.actions !== undefined && parsedData.actions !== null) {\r\n ActionManager.Parse(parsedData.actions, null, scene);\r\n }\r\n } catch (err) {\r\n const msg = logOperation(\"loadAssets\", parsedData ? parsedData.producer : \"Unknown\") + log;\r\n if (onError) {\r\n onError(msg, err);\r\n } else {\r\n Logger.Log(msg);\r\n throw err;\r\n }\r\n } finally {\r\n TempIndexContainer = {};\r\n TempMaterialIndexContainer = {};\r\n TempMorphTargetManagerIndexContainer = {};\r\n\r\n if (!addToScene) {\r\n container.removeAllFromScene();\r\n }\r\n if (log !== null && SceneLoaderFlags.loggingLevel !== Constants.SCENELOADER_NO_LOGGING) {\r\n Logger.Log(\r\n logOperation(\"loadAssets\", parsedData ? parsedData.producer : \"Unknown\") + (SceneLoaderFlags.loggingLevel !== Constants.SCENELOADER_MINIMAL_LOGGING ? log : \"\")\r\n );\r\n }\r\n }\r\n\r\n return container;\r\n};\r\n\r\nRegisterSceneLoaderPlugin({\r\n name: \"babylon.js\",\r\n extensions: \".babylon\",\r\n canDirectLoad: (data: string) => {\r\n if (data.indexOf(\"babylon\") !== -1) {\r\n // We consider that the producer string is filled\r\n return true;\r\n }\r\n\r\n return false;\r\n },\r\n importMesh: (\r\n meshesNames: any,\r\n scene: Scene,\r\n data: any,\r\n rootUrl: string,\r\n meshes: AbstractMesh[],\r\n particleSystems: IParticleSystem[],\r\n skeletons: Skeleton[],\r\n onError?: (message: string, exception?: any) => void\r\n ): boolean => {\r\n // Entire method running in try block, so ALWAYS logs as far as it got, only actually writes details\r\n // when SceneLoader.debugLogging = true (default), or exception encountered.\r\n // Everything stored in var log instead of writing separate lines to support only writing in exception,\r\n // and avoid problems with multiple concurrent .babylon loads.\r\n let log = \"importMesh has failed JSON parse\";\r\n try {\r\n // eslint-disable-next-line no-var\r\n var parsedData = JSON.parse(data);\r\n log = \"\";\r\n const fullDetails = SceneLoaderFlags.loggingLevel === Constants.SCENELOADER_DETAILED_LOGGING;\r\n if (!meshesNames) {\r\n meshesNames = null;\r\n } else if (!Array.isArray(meshesNames)) {\r\n meshesNames = [meshesNames];\r\n }\r\n\r\n const hierarchyIds: number[] = [];\r\n const parsedIdToNodeMap = new Map<number, Node>();\r\n\r\n // Transform nodes (the overall idea is to load all of them as this is super fast and then get rid of the ones we don't need)\r\n const loadedTransformNodes = [];\r\n if (parsedData.transformNodes !== undefined && parsedData.transformNodes !== null) {\r\n for (let index = 0, cache = parsedData.transformNodes.length; index < cache; index++) {\r\n const parsedJSONTransformNode = parsedData.transformNodes[index];\r\n const parsedTransformNode = TransformNode.Parse(parsedJSONTransformNode, scene, rootUrl);\r\n loadedTransformNodes.push(parsedTransformNode);\r\n parsedIdToNodeMap.set(parsedTransformNode._waitingParsedUniqueId!, parsedTransformNode);\r\n parsedTransformNode._waitingParsedUniqueId = null;\r\n }\r\n }\r\n if (parsedData.meshes !== undefined && parsedData.meshes !== null) {\r\n const loadedSkeletonsIds = [];\r\n const loadedMaterialsIds: string[] = [];\r\n const loadedMaterialsUniqueIds: string[] = [];\r\n const loadedMorphTargetManagerIds: number[] = [];\r\n for (let index = 0, cache = parsedData.meshes.length; index < cache; index++) {\r\n const parsedMesh = parsedData.meshes[index];\r\n\r\n if (meshesNames === null || IsDescendantOf(parsedMesh, meshesNames, hierarchyIds)) {\r\n if (meshesNames !== null) {\r\n // Remove found mesh name from list.\r\n delete meshesNames[meshesNames.indexOf(parsedMesh.name)];\r\n }\r\n\r\n //Geometry?\r\n if (parsedMesh.geometryId !== undefined && parsedMesh.geometryId !== null) {\r\n //does the file contain geometries?\r\n if (parsedData.geometries !== undefined && parsedData.geometries !== null) {\r\n //find the correct geometry and add it to the scene\r\n let found: boolean = false;\r\n const geoms = [\"boxes\", \"spheres\", \"cylinders\", \"toruses\", \"grounds\", \"planes\", \"torusKnots\", \"vertexData\"];\r\n for (const geometryType of geoms) {\r\n if (!parsedData.geometries[geometryType] || !Array.isArray(parsedData.geometries[geometryType])) {\r\n continue;\r\n }\r\n const geom = parsedData.geometries[geometryType];\r\n for (const parsedGeometryData of geom) {\r\n if (parsedGeometryData.id === parsedMesh.geometryId) {\r\n switch (geometryType) {\r\n case \"vertexData\":\r\n Geometry.Parse(parsedGeometryData, scene, rootUrl);\r\n break;\r\n }\r\n found = true;\r\n break;\r\n }\r\n }\r\n\r\n if (found) {\r\n break;\r\n }\r\n }\r\n if (found === false) {\r\n Logger.Warn(\"Geometry not found for mesh \" + parsedMesh.id);\r\n }\r\n }\r\n }\r\n\r\n // Material ?\r\n if (parsedMesh.materialUniqueId || parsedMesh.materialId) {\r\n // if we have a unique ID, look up and store in loadedMaterialsUniqueIds, else use loadedMaterialsIds\r\n const materialArray = parsedMesh.materialUniqueId ? loadedMaterialsUniqueIds : loadedMaterialsIds;\r\n let materialFound = materialArray.indexOf(parsedMesh.materialUniqueId || parsedMesh.materialId) !== -1;\r\n if (materialFound === false && parsedData.multiMaterials !== undefined && parsedData.multiMaterials !== null) {\r\n // Loads a submaterial of a multimaterial\r\n const loadSubMaterial = (subMatId: string, predicate: (parsedMaterial: any) => boolean) => {\r\n materialArray.push(subMatId);\r\n const mat = ParseMaterialByPredicate(predicate, parsedData, scene, rootUrl);\r\n if (mat && mat.material) {\r\n TempMaterialIndexContainer[mat.parsedMaterial.uniqueId || mat.parsedMaterial.id] = mat.material;\r\n log += \"\\n\\tMaterial \" + mat.material.toString(fullDetails);\r\n }\r\n };\r\n for (let multimatIndex = 0, multimatCache = parsedData.multiMaterials.length; multimatIndex < multimatCache; multimatIndex++) {\r\n const parsedMultiMaterial = parsedData.multiMaterials[multimatIndex];\r\n if (\r\n (parsedMesh.materialUniqueId && parsedMultiMaterial.uniqueId === parsedMesh.materialUniqueId) ||\r\n parsedMultiMaterial.id === parsedMesh.materialId\r\n ) {\r\n if (parsedMultiMaterial.materialsUniqueIds) {\r\n // if the materials inside the multimat are stored by unique id\r\n for (const subMatId of parsedMultiMaterial.materialsUniqueIds) {\r\n loadSubMaterial(subMatId, (parsedMaterial) => parsedMaterial.uniqueId === subMatId);\r\n }\r\n } else {\r\n // if the mats are stored by id instead\r\n for (const subMatId of parsedMultiMaterial.materials) {\r\n loadSubMaterial(subMatId, (parsedMaterial) => parsedMaterial.id === subMatId);\r\n }\r\n }\r\n materialArray.push(parsedMultiMaterial.uniqueId || parsedMultiMaterial.id);\r\n const mmat = MultiMaterial.ParseMultiMaterial(parsedMultiMaterial, scene);\r\n TempMaterialIndexContainer[parsedMultiMaterial.uniqueId || parsedMultiMaterial.id] = mmat;\r\n if (mmat) {\r\n materialFound = true;\r\n log += \"\\n\\tMulti-Material \" + mmat.toString(fullDetails);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (materialFound === false) {\r\n materialArray.push(parsedMesh.materialUniqueId || parsedMesh.materialId);\r\n const mat = ParseMaterialByPredicate(\r\n (parsedMaterial) =>\r\n (parsedMesh.materialUniqueId && parsedMaterial.uniqueId === parsedMesh.materialUniqueId) || parsedMaterial.id === parsedMesh.materialId,\r\n parsedData,\r\n scene,\r\n rootUrl\r\n );\r\n if (!mat || !mat.material) {\r\n Logger.Warn(\"Material not found for mesh \" + parsedMesh.id);\r\n } else {\r\n TempMaterialIndexContainer[mat.parsedMaterial.uniqueId || mat.parsedMaterial.id] = mat.material;\r\n log += \"\\n\\tMaterial \" + mat.material.toString(fullDetails);\r\n }\r\n }\r\n }\r\n\r\n // Skeleton ?\r\n if (\r\n parsedMesh.skeletonId !== null &&\r\n parsedMesh.skeletonId !== undefined &&\r\n parsedData.skeletonId !== -1 &&\r\n parsedData.skeletons !== undefined &&\r\n parsedData.skeletons !== null\r\n ) {\r\n const skeletonAlreadyLoaded = loadedSkeletonsIds.indexOf(parsedMesh.skeletonId) > -1;\r\n if (!skeletonAlreadyLoaded) {\r\n for (let skeletonIndex = 0, skeletonCache = parsedData.skeletons.length; skeletonIndex < skeletonCache; skeletonIndex++) {\r\n const parsedSkeleton = parsedData.skeletons[skeletonIndex];\r\n if (parsedSkeleton.id === parsedMesh.skeletonId) {\r\n const skeleton = Skeleton.Parse(parsedSkeleton, scene);\r\n skeletons.push(skeleton);\r\n loadedSkeletonsIds.push(parsedSkeleton.id);\r\n log += \"\\n\\tSkeleton \" + skeleton.toString(fullDetails);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Morph targets ?\r\n if (parsedMesh.morphTargetManagerId > -1 && parsedData.morphTargetManagers !== undefined && parsedData.morphTargetManagers !== null) {\r\n const morphTargetManagerAlreadyLoaded = loadedMorphTargetManagerIds.indexOf(parsedMesh.morphTargetManagerId) > -1;\r\n if (!morphTargetManagerAlreadyLoaded) {\r\n for (let morphTargetManagerIndex = 0; morphTargetManagerIndex < parsedData.morphTargetManagers.length; morphTargetManagerIndex++) {\r\n const parsedManager = parsedData.morphTargetManagers[morphTargetManagerIndex];\r\n if (parsedManager.id === parsedMesh.morphTargetManagerId) {\r\n const morphTargetManager = MorphTargetManager.Parse(parsedManager, scene);\r\n TempMorphTargetManagerIndexContainer[parsedManager.id] = morphTargetManager;\r\n loadedMorphTargetManagerIds.push(parsedManager.id);\r\n log += \"\\nMorph target manager\" + morphTargetManager.toString();\r\n }\r\n }\r\n }\r\n }\r\n\r\n const mesh = Mesh.Parse(parsedMesh, scene, rootUrl);\r\n meshes.push(mesh);\r\n parsedIdToNodeMap.set(mesh._waitingParsedUniqueId!, mesh);\r\n mesh._waitingParsedUniqueId = null;\r\n log += \"\\n\\tMesh \" + mesh.toString(fullDetails);\r\n }\r\n }\r\n\r\n // link multimats with materials\r\n for (const multimat of scene.multiMaterials) {\r\n for (const subMaterial of multimat._waitingSubMaterialsUniqueIds) {\r\n multimat.subMaterials.push(FindMaterial(subMaterial, scene));\r\n }\r\n multimat._waitingSubMaterialsUniqueIds = [];\r\n }\r\n\r\n // link meshes with materials\r\n for (const mesh of scene.meshes) {\r\n if (mesh._waitingMaterialId !== null) {\r\n mesh.material = FindMaterial(mesh._waitingMaterialId, scene);\r\n mesh._waitingMaterialId = null;\r\n }\r\n }\r\n\r\n // link meshes with morph target managers\r\n for (const mesh of scene.meshes) {\r\n if (mesh._waitingMorphTargetManagerId !== null) {\r\n mesh.morphTargetManager = TempMorphTargetManagerIndexContainer[mesh._waitingMorphTargetManagerId];\r\n mesh._waitingMorphTargetManagerId = null;\r\n }\r\n }\r\n\r\n // Connecting parents and lods\r\n for (let index = 0, cache = scene.transformNodes.length; index < cache; index++) {\r\n const transformNode = scene.transformNodes[index];\r\n if (transformNode._waitingParentId !== null) {\r\n let parent = parsedIdToNodeMap.get(parseInt(transformNode._waitingParentId)) || null;\r\n if (parent === null) {\r\n parent = scene.getLastEntryById(transformNode._waitingParentId);\r\n }\r\n let parentNode = parent;\r\n if (transformNode._waitingParentInstanceIndex) {\r\n parentNode = (parent as Mesh).instances[parseInt(transformNode._waitingParentInstanceIndex)];\r\n transformNode._waitingParentInstanceIndex = null;\r\n }\r\n transformNode.parent = parentNode;\r\n transformNode._waitingParentId = null;\r\n }\r\n }\r\n let currentMesh: AbstractMesh;\r\n for (let index = 0, cache = scene.meshes.length; index < cache; index++) {\r\n currentMesh = scene.meshes[index];\r\n if (currentMesh._waitingParentId) {\r\n let parent = parsedIdToNodeMap.get(parseInt(currentMesh._waitingParentId)) || null;\r\n if (parent === null) {\r\n parent = scene.getLastEntryById(currentMesh._waitingParentId);\r\n }\r\n let parentNode = parent;\r\n if (currentMesh._waitingParentInstanceIndex) {\r\n parentNode = (parent as Mesh).instances[parseInt(currentMesh._waitingParentInstanceIndex)];\r\n currentMesh._waitingParentInstanceIndex = null;\r\n }\r\n currentMesh.parent = parentNode;\r\n currentMesh._waitingParentId = null;\r\n }\r\n if (currentMesh._waitingData.lods) {\r\n LoadDetailLevels(scene, currentMesh);\r\n }\r\n }\r\n\r\n // Remove unused transform nodes\r\n for (const transformNode of loadedTransformNodes) {\r\n const childMeshes = transformNode.getChildMeshes(false);\r\n if (!childMeshes.length) {\r\n transformNode.dispose();\r\n }\r\n }\r\n\r\n // link skeleton transform nodes\r\n for (let index = 0, cache = scene.skeletons.length; index < cache; index++) {\r\n const skeleton = scene.skeletons[index];\r\n if (skeleton._hasWaitingData) {\r\n if (skeleton.bones != null) {\r\n for (const bone of skeleton.bones) {\r\n if (bone._waitingTransformNodeId) {\r\n const linkTransformNode = scene.getLastEntryById(bone._waitingTransformNodeId) as TransformNode;\r\n if (linkTransformNode) {\r\n bone.linkTransformNode(linkTransformNode);\r\n }\r\n bone._waitingTransformNodeId = null;\r\n }\r\n }\r\n }\r\n\r\n skeleton._hasWaitingData = null;\r\n }\r\n }\r\n\r\n // freeze and compute world matrix application\r\n for (let index = 0, cache = scene.meshes.length; index < cache; index++) {\r\n currentMesh = scene.meshes[index];\r\n if (currentMesh._waitingData.freezeWorldMatrix) {\r\n currentMesh.freezeWorldMatrix();\r\n currentMesh._waitingData.freezeWorldMatrix = null;\r\n } else {\r\n currentMesh.computeWorldMatrix(true);\r\n }\r\n }\r\n }\r\n\r\n // Particles\r\n if (parsedData.particleSystems !== undefined && parsedData.particleSystems !== null) {\r\n const parser = GetIndividualParser(SceneComponentConstants.NAME_PARTICLESYSTEM);\r\n if (parser) {\r\n for (let index = 0, cache = parsedData.particleSystems.length; index < cache; index++) {\r\n const parsedParticleSystem = parsedData.particleSystems[index];\r\n if (hierarchyIds.indexOf(parsedParticleSystem.emitterId) !== -1) {\r\n particleSystems.push(parser(parsedParticleSystem, scene, rootUrl));\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (const g of scene.geometries) {\r\n g._loadedUniqueId = \"\";\r\n }\r\n\r\n return true;\r\n } catch (err) {\r\n const msg = logOperation(\"importMesh\", parsedData ? parsedData.producer : \"Unknown\") + log;\r\n if (onError) {\r\n onError(msg, err);\r\n } else {\r\n Logger.Log(msg);\r\n throw err;\r\n }\r\n } finally {\r\n if (log !== null && SceneLoaderFlags.loggingLevel !== Constants.SCENELOADER_NO_LOGGING) {\r\n Logger.Log(\r\n logOperation(\"importMesh\", parsedData ? parsedData.producer : \"Unknown\") + (SceneLoaderFlags.loggingLevel !== Constants.SCENELOADER_MINIMAL_LOGGING ? log : \"\")\r\n );\r\n }\r\n TempMaterialIndexContainer = {};\r\n TempMorphTargetManagerIndexContainer = {};\r\n }\r\n\r\n return false;\r\n },\r\n load: (scene: Scene, data: string, rootUrl: string, onError?: (message: string, exception?: any) => void): boolean => {\r\n // Entire method running in try block, so ALWAYS logs as far as it got, only actually writes details\r\n // when SceneLoader.debugLogging = true (default), or exception encountered.\r\n // Everything stored in var log instead of writing separate lines to support only writing in exception,\r\n // and avoid problems with multiple concurrent .babylon loads.\r\n let log = \"importScene has failed JSON parse\";\r\n try {\r\n // eslint-disable-next-line no-var\r\n var parsedData = JSON.parse(data);\r\n log = \"\";\r\n\r\n // Scene\r\n if (parsedData.useDelayedTextureLoading !== undefined && parsedData.useDelayedTextureLoading !== null) {\r\n scene.useDelayedTextureLoading = parsedData.useDelayedTextureLoading && !SceneLoaderFlags.ForceFullSceneLoadingForIncremental;\r\n }\r\n if (parsedData.autoClear !== undefined && parsedData.autoClear !== null) {\r\n scene.autoClear = parsedData.autoClear;\r\n }\r\n if (parsedData.clearColor !== undefined && parsedData.clearColor !== null) {\r\n scene.clearColor = Color4.FromArray(parsedData.clearColor);\r\n }\r\n if (parsedData.ambientColor !== undefined && parsedData.ambientColor !== null) {\r\n scene.ambientColor = Color3.FromArray(parsedData.ambientColor);\r\n }\r\n if (parsedData.gravity !== undefined && parsedData.gravity !== null) {\r\n scene.gravity = Vector3.FromArray(parsedData.gravity);\r\n }\r\n\r\n if (parsedData.useRightHandedSystem !== undefined) {\r\n scene.useRightHandedSystem = !!parsedData.useRightHandedSystem;\r\n }\r\n\r\n // Fog\r\n if (parsedData.fogMode !== undefined && parsedData.fogMode !== null) {\r\n scene.fogMode = parsedData.fogMode;\r\n }\r\n if (parsedData.fogColor !== undefined && parsedData.fogColor !== null) {\r\n scene.fogColor = Color3.FromArray(parsedData.fogColor);\r\n }\r\n if (parsedData.fogStart !== undefined && parsedData.fogStart !== null) {\r\n scene.fogStart = parsedData.fogStart;\r\n }\r\n if (parsedData.fogEnd !== undefined && parsedData.fogEnd !== null) {\r\n scene.fogEnd = parsedData.fogEnd;\r\n }\r\n if (parsedData.fogDensity !== undefined && parsedData.fogDensity !== null) {\r\n scene.fogDensity = parsedData.fogDensity;\r\n }\r\n log += \"\\tFog mode for scene: \";\r\n switch (scene.fogMode) {\r\n case 0:\r\n log += \"none\\n\";\r\n break;\r\n // getters not compiling, so using hardcoded\r\n case 1:\r\n log += \"exp\\n\";\r\n break;\r\n case 2:\r\n log += \"exp2\\n\";\r\n break;\r\n case 3:\r\n log += \"linear\\n\";\r\n break;\r\n }\r\n\r\n //Physics\r\n if (parsedData.physicsEnabled) {\r\n let physicsPlugin;\r\n if (parsedData.physicsEngine === \"cannon\" || parsedData.physicsEngine === CannonJSPlugin.name) {\r\n physicsPlugin = new CannonJSPlugin(undefined, undefined, BabylonFileLoaderConfiguration.LoaderInjectedPhysicsEngine);\r\n } else if (parsedData.physicsEngine === \"oimo\" || parsedData.physicsEngine === OimoJSPlugin.name) {\r\n physicsPlugin = new OimoJSPlugin(undefined, BabylonFileLoaderConfiguration.LoaderInjectedPhysicsEngine);\r\n } else if (parsedData.physicsEngine === \"ammo\" || parsedData.physicsEngine === AmmoJSPlugin.name) {\r\n physicsPlugin = new AmmoJSPlugin(undefined, BabylonFileLoaderConfiguration.LoaderInjectedPhysicsEngine, undefined);\r\n }\r\n log = \"\\tPhysics engine \" + (parsedData.physicsEngine ? parsedData.physicsEngine : \"oimo\") + \" enabled\\n\";\r\n //else - default engine, which is currently oimo\r\n const physicsGravity = parsedData.gravity ? Vector3.FromArray(parsedData.gravity) : parsedData.physicsGravity ? Vector3.FromArray(parsedData.physicsGravity) : null;\r\n scene.enablePhysics(physicsGravity, physicsPlugin);\r\n }\r\n\r\n // Metadata\r\n if (parsedData.metadata !== undefined && parsedData.metadata !== null) {\r\n scene.metadata = parsedData.metadata;\r\n }\r\n\r\n //collisions, if defined. otherwise, default is true\r\n if (parsedData.collisionsEnabled !== undefined && parsedData.collisionsEnabled !== null) {\r\n scene.collisionsEnabled = parsedData.collisionsEnabled;\r\n }\r\n\r\n const container = LoadAssetContainer(scene, data, rootUrl, onError, true);\r\n if (!container) {\r\n return false;\r\n }\r\n\r\n if (parsedData.autoAnimate) {\r\n scene.beginAnimation(scene, parsedData.autoAnimateFrom, parsedData.autoAnimateTo, parsedData.autoAnimateLoop, parsedData.autoAnimateSpeed || 1.0);\r\n }\r\n\r\n if (parsedData.activeCameraID !== undefined && parsedData.activeCameraID !== null) {\r\n scene.setActiveCameraById(parsedData.activeCameraID);\r\n }\r\n\r\n // Finish\r\n return true;\r\n } catch (err) {\r\n const msg = logOperation(\"importScene\", parsedData ? parsedData.producer : \"Unknown\") + log;\r\n if (onError) {\r\n onError(msg, err);\r\n } else {\r\n Logger.Log(msg);\r\n throw err;\r\n }\r\n } finally {\r\n if (log !== null && SceneLoaderFlags.loggingLevel !== Constants.SCENELOADER_NO_LOGGING) {\r\n Logger.Log(\r\n logOperation(\"importScene\", parsedData ? parsedData.producer : \"Unknown\") + (SceneLoaderFlags.loggingLevel !== Constants.SCENELOADER_MINIMAL_LOGGING ? log : \"\")\r\n );\r\n }\r\n }\r\n return false;\r\n },\r\n loadAssetContainer: (scene: Scene, data: string, rootUrl: string, onError?: (message: string, exception?: any) => void): AssetContainer => {\r\n const container = LoadAssetContainer(scene, data, rootUrl, onError);\r\n return container;\r\n },\r\n});\r\n"]}
|