@babylonjs/core 8.8.4 → 8.9.0
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.
- package/Animations/animatable.core.js +2 -2
- package/Animations/animatable.core.js.map +1 -1
- package/Cameras/targetCamera.d.ts +0 -4
- package/Cameras/targetCamera.js +0 -28
- package/Cameras/targetCamera.js.map +1 -1
- package/Engines/AbstractEngine/abstractEngine.cubeTexture.js +22 -15
- package/Engines/AbstractEngine/abstractEngine.cubeTexture.js.map +1 -1
- package/Engines/Processors/Expressions/Operators/shaderDefineArithmeticOperator.d.ts +1 -0
- package/Engines/Processors/Expressions/Operators/shaderDefineArithmeticOperator.js +8 -0
- package/Engines/Processors/Expressions/Operators/shaderDefineArithmeticOperator.js.map +1 -1
- package/Engines/WebGPU/webgpuBufferManager.js +5 -2
- package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
- package/Engines/abstractEngine.js +2 -2
- package/Engines/abstractEngine.js.map +1 -1
- package/Engines/constants.d.ts +5 -0
- package/Engines/constants.js +5 -0
- package/Engines/constants.js.map +1 -1
- package/FlowGraph/Blocks/Data/flowGraphDataSwitchBlock.js +1 -1
- package/FlowGraph/Blocks/Data/flowGraphDataSwitchBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCancelDelayBlock.d.ts +2 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCancelDelayBlock.js +5 -4
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCancelDelayBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphSetDelayBlock.d.ts +3 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphSetDelayBlock.js +26 -4
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphSetDelayBlock.js.map +1 -1
- package/FrameGraph/Node/nodeRenderGraph.d.ts +1 -1
- package/FrameGraph/Node/nodeRenderGraph.js +1 -1
- package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
- package/Helpers/environmentHelper.js +3 -3
- package/Helpers/environmentHelper.js.map +1 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +1 -0
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/subSurfaceBlock.js +1 -1
- package/Materials/Node/Blocks/PBR/subSurfaceBlock.js.map +1 -1
- package/Materials/PBR/pbrBRDFConfiguration.d.ts +30 -0
- package/Materials/PBR/pbrBRDFConfiguration.js +45 -0
- package/Materials/PBR/pbrBRDFConfiguration.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.d.ts +0 -10
- package/Materials/PBR/pbrBaseMaterial.js +0 -13
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/PBR/pbrMaterial.d.ts +0 -16
- package/Materials/PBR/pbrMaterial.decalMap.js +0 -5
- package/Materials/PBR/pbrMaterial.decalMap.js.map +1 -1
- package/Materials/PBR/pbrMaterial.js +1 -30
- package/Materials/PBR/pbrMaterial.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.js +3 -1
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Materials/effectRenderer.d.ts +1 -0
- package/Materials/effectRenderer.js +3 -1
- package/Materials/effectRenderer.js.map +1 -1
- package/Materials/shaderMaterial.d.ts +7 -8
- package/Materials/shaderMaterial.js +21 -15
- package/Materials/shaderMaterial.js.map +1 -1
- package/Materials/standardMaterial.decalMap.js +0 -5
- package/Materials/standardMaterial.decalMap.js.map +1 -1
- package/Materials/standardMaterial.js +1 -1
- package/Materials/standardMaterial.js.map +1 -1
- package/Maths/math.vector.d.ts +23 -17
- package/Maths/math.vector.js +144 -115
- package/Maths/math.vector.js.map +1 -1
- package/Meshes/Node/nodeGeometry.d.ts +1 -1
- package/Meshes/Node/nodeGeometry.js +1 -1
- package/Meshes/Node/nodeGeometry.js.map +1 -1
- package/Meshes/instancedMesh.js +12 -2
- package/Meshes/instancedMesh.js.map +1 -1
- package/Meshes/mesh.d.ts +2 -2
- package/Meshes/mesh.js.map +1 -1
- package/Offline/database.d.ts +1 -1
- package/Offline/database.js +5 -5
- package/Offline/database.js.map +1 -1
- package/Rendering/depthPeelingRenderer.d.ts +1 -1
- package/Rendering/depthPeelingRenderer.js +1 -1
- package/Rendering/depthPeelingRenderer.js.map +1 -1
- package/Rendering/edgesRenderer.d.ts +1 -1
- package/Rendering/edgesRenderer.js +2 -2
- package/Rendering/edgesRenderer.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderer.d.ts +1 -1
- package/Rendering/fluidRenderer/fluidRenderer.js +1 -1
- package/Rendering/fluidRenderer/fluidRenderer.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObject.d.ts +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObject.js +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObject.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.d.ts +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.d.ts +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.d.ts +2 -2
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js +2 -2
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js.map +1 -1
- package/Rendering/prePassEffectConfiguration.d.ts +5 -0
- package/Rendering/prePassEffectConfiguration.js.map +1 -1
- package/Rendering/prePassRenderer.js +3 -0
- package/Rendering/prePassRenderer.js.map +1 -1
- package/Rendering/subSurfaceConfiguration.d.ts +6 -1
- package/Rendering/subSurfaceConfiguration.js +6 -1
- package/Rendering/subSurfaceConfiguration.js.map +1 -1
- package/Shaders/ShadersInclude/hdrFilteringFunctions.js +15 -14
- package/Shaders/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/lightFragment.js +6 -2
- package/Shaders/ShadersInclude/lightFragment.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBRDFFunctions.js +3 -0
- package/Shaders/ShadersInclude/pbrBRDFFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockDirectLighting.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockDirectLighting.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockFinalLitComponents.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockFinalLitComponents.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflectance.js +11 -6
- package/Shaders/ShadersInclude/pbrBlockReflectance.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflectance0.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflectance0.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflection.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflection.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflectivity.js +33 -8
- package/Shaders/ShadersInclude/pbrBlockReflectivity.js.map +1 -1
- package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js +6 -2
- package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
- package/Shaders/pbr.fragment.js +5 -4
- package/Shaders/pbr.fragment.js.map +1 -1
- package/Shaders/pbr.vertex.d.ts +1 -0
- package/Shaders/pbr.vertex.js +5 -2
- package/Shaders/pbr.vertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/lightFragment.js +6 -2
- package/ShadersWGSL/ShadersInclude/lightFragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBRDFFunctions.js +10 -0
- package/ShadersWGSL/ShadersInclude/pbrBRDFFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockDirectLighting.js +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockDirectLighting.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockFinalLitComponents.js +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockFinalLitComponents.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockReflectance.js +11 -6
- package/ShadersWGSL/ShadersInclude/pbrBlockReflectance.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockReflection.js +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockReflection.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockReflectivity.js +39 -7
- package/ShadersWGSL/ShadersInclude/pbrBlockReflectivity.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js +7 -2
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
- package/ShadersWGSL/pbr.fragment.js +5 -4
- package/ShadersWGSL/pbr.fragment.js.map +1 -1
- package/ShadersWGSL/pbr.vertex.d.ts +1 -0
- package/ShadersWGSL/pbr.vertex.js +5 -2
- package/ShadersWGSL/pbr.vertex.js.map +1 -1
- package/assetContainer.js +13 -13
- package/assetContainer.js.map +1 -1
- package/package.json +1 -1
- package/sceneComponent.d.ts +1 -1
- package/sceneComponent.js.map +1 -1
package/assetContainer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assetContainer.js","sourceRoot":"","sources":["../../../dev/core/src/assetContainer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Scene } from \"./scene\";\r\nimport { Mesh } from \"./Meshes/mesh\";\r\nimport { TransformNode } from \"./Meshes/transformNode\";\r\nimport type { Skeleton } from \"./Bones/skeleton\";\r\nimport type { AnimationGroup } from \"./Animations/animationGroup\";\r\nimport { type Animatable } from \"./Animations/animatable.core\";\r\nimport { AbstractMesh } from \"./Meshes/abstractMesh\";\r\nimport type { MultiMaterial } from \"./Materials/multiMaterial\";\r\nimport type { Material } from \"./Materials/material\";\r\nimport { Logger } from \"./Misc/logger\";\r\nimport { EngineStore } from \"./Engines/engineStore\";\r\nimport type { Nullable } from \"./types\";\r\nimport type { Node } from \"./node\";\r\nimport type { Observer } from \"./Misc/observable\";\r\nimport type { AbstractEngine } from \"./Engines/abstractEngine\";\r\nimport { InstancedMesh } from \"./Meshes/instancedMesh\";\r\nimport { Light } from \"./Lights/light\";\r\nimport { Camera } from \"./Cameras/camera\";\r\nimport { Tools } from \"./Misc/tools\";\r\nimport type { IParticleSystem } from \"./Particles/IParticleSystem\";\r\nimport type { IAssetContainer } from \"./IAssetContainer\";\r\nimport type { Animation } from \"./Animations/animation\";\r\nimport type { MorphTargetManager } from \"./Morph/morphTargetManager\";\r\nimport type { Geometry } from \"./Meshes/geometry\";\r\nimport type { AbstractActionManager } from \"./Actions/abstractActionManager\";\r\nimport type { BaseTexture } from \"./Materials/Textures/baseTexture\";\r\nimport type { PostProcess } from \"./PostProcesses/postProcess\";\r\nimport type { Sound } from \"./Audio/sound\";\r\nimport type { Layer } from \"./Layers/layer\";\r\nimport type { EffectLayer } from \"./Layers/effectLayer\";\r\nimport type { ReflectionProbe } from \"./Probes/reflectionProbe\";\r\nimport type { LensFlareSystem } from \"./LensFlares/lensFlareSystem\";\r\nimport type { ProceduralTexture } from \"./Materials/Textures/Procedurals/proceduralTexture\";\r\nimport { Tags } from \"./Misc/tags\";\r\n\r\n/**\r\n * Root class for AssetContainer and KeepAssets\r\n */\r\nexport class AbstractAssetContainer implements IAssetContainer {\r\n /**\r\n * Gets the list of root nodes (ie. nodes with no parent)\r\n */\r\n public rootNodes: Node[] = [];\r\n\r\n /** All of the cameras added to this scene\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/cameras\r\n */\r\n public cameras: Camera[] = [];\r\n\r\n /**\r\n * All of the lights added to this scene\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/lights/lights_introduction\r\n */\r\n public lights: Light[] = [];\r\n\r\n /**\r\n * All of the (abstract) meshes added to this scene\r\n */\r\n public meshes: AbstractMesh[] = [];\r\n\r\n /**\r\n * The list of skeletons added to the scene\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/bonesSkeletons\r\n */\r\n public skeletons: Skeleton[] = [];\r\n\r\n /**\r\n * All of the particle systems added to this scene\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/particles/particle_system/particle_system_intro\r\n */\r\n public particleSystems: IParticleSystem[] = [];\r\n\r\n /**\r\n * Gets a list of Animations associated with the scene\r\n */\r\n public animations: Animation[] = [];\r\n\r\n /**\r\n * All of the animation groups added to this scene\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/animation/groupAnimations\r\n */\r\n public animationGroups: AnimationGroup[] = [];\r\n\r\n /**\r\n * All of the multi-materials added to this scene\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/multiMaterials\r\n */\r\n public multiMaterials: MultiMaterial[] = [];\r\n\r\n /**\r\n * All of the materials added to this scene\r\n * In the context of a Scene, it is not supposed to be modified manually.\r\n * Any addition or removal should be done using the addMaterial and removeMaterial Scene methods.\r\n * Note also that the order of the Material within the array is not significant and might change.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/materials_introduction\r\n */\r\n public materials: Material[] = [];\r\n\r\n /**\r\n * The list of morph target managers added to the scene\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/dynamicMeshMorph\r\n */\r\n public morphTargetManagers: MorphTargetManager[] = [];\r\n\r\n /**\r\n * The list of geometries used in the scene.\r\n */\r\n public geometries: Geometry[] = [];\r\n\r\n /**\r\n * All of the transform nodes added to this scene\r\n * In the context of a Scene, it is not supposed to be modified manually.\r\n * Any addition or removal should be done using the addTransformNode and removeTransformNode Scene methods.\r\n * Note also that the order of the TransformNode within the array is not significant and might change.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/transforms/parent_pivot/transform_node\r\n */\r\n public transformNodes: TransformNode[] = [];\r\n\r\n /**\r\n * ActionManagers available on the scene.\r\n * @deprecated\r\n */\r\n public actionManagers: AbstractActionManager[] = [];\r\n\r\n /**\r\n * Textures to keep.\r\n */\r\n public textures: BaseTexture[] = [];\r\n\r\n /** @internal */\r\n protected _environmentTexture: Nullable<BaseTexture> = null;\r\n /**\r\n * Texture used in all pbr material as the reflection texture.\r\n * As in the majority of the scene they are the same (exception for multi room and so on),\r\n * this is easier to reference from here than from all the materials.\r\n */\r\n public get environmentTexture(): Nullable<BaseTexture> {\r\n return this._environmentTexture;\r\n }\r\n\r\n public set environmentTexture(value: Nullable<BaseTexture>) {\r\n this._environmentTexture = value;\r\n }\r\n\r\n /**\r\n * The list of postprocesses added to the scene\r\n */\r\n public postProcesses: PostProcess[] = [];\r\n\r\n /**\r\n * The list of sounds\r\n */\r\n public sounds: Nullable<Sound[]> = null;\r\n\r\n /**\r\n * The list of effect layers added to the scene\r\n */\r\n public effectLayers: EffectLayer[] = [];\r\n\r\n /**\r\n * The list of layers added to the scene\r\n */\r\n public layers: Layer[] = [];\r\n\r\n /**\r\n * The list of reflection probes added to the scene\r\n */\r\n public reflectionProbes: ReflectionProbe[] = [];\r\n\r\n /**\r\n * The list of lens flare systems added to the scene\r\n */\r\n public lensFlareSystems: LensFlareSystem[];\r\n\r\n /**\r\n * The list of procedural textures added to the scene\r\n */\r\n public proceduralTextures: ProceduralTexture[];\r\n\r\n /**\r\n * @returns all meshes, lights, cameras, transformNodes and bones\r\n */\r\n public getNodes(): Array<Node> {\r\n let nodes: Node[] = [];\r\n nodes = nodes.concat(this.meshes);\r\n nodes = nodes.concat(this.lights);\r\n nodes = nodes.concat(this.cameras);\r\n nodes = nodes.concat(this.transformNodes); // dummies\r\n for (const skeleton of this.skeletons) {\r\n nodes = nodes.concat(skeleton.bones);\r\n }\r\n return nodes;\r\n }\r\n}\r\n\r\n/**\r\n * Set of assets to keep when moving a scene into an asset container.\r\n */\r\nexport class KeepAssets extends AbstractAssetContainer {}\r\n\r\n/**\r\n * Class used to store the output of the AssetContainer.instantiateAllMeshesToScene function\r\n */\r\nexport class InstantiatedEntries {\r\n /**\r\n * List of new root nodes (eg. nodes with no parent)\r\n */\r\n public rootNodes: Node[] = [];\r\n\r\n /**\r\n * List of new skeletons\r\n */\r\n public skeletons: Skeleton[] = [];\r\n\r\n /**\r\n * List of new animation groups\r\n */\r\n public animationGroups: AnimationGroup[] = [];\r\n\r\n /**\r\n * Disposes the instantiated entries from the scene\r\n */\r\n public dispose() {\r\n const rootNodes = this.rootNodes;\r\n for (const rootNode of rootNodes) {\r\n rootNode.dispose();\r\n }\r\n rootNodes.length = 0;\r\n\r\n const skeletons = this.skeletons;\r\n for (const skeleton of skeletons) {\r\n skeleton.dispose();\r\n }\r\n skeletons.length = 0;\r\n\r\n const animationGroups = this.animationGroups;\r\n for (const animationGroup of animationGroups) {\r\n animationGroup.dispose();\r\n }\r\n animationGroups.length = 0;\r\n }\r\n}\r\n\r\n/**\r\n * Container with a set of assets that can be added or removed from a scene.\r\n */\r\nexport class AssetContainer extends AbstractAssetContainer {\r\n private _wasAddedToScene = false;\r\n private _onContextRestoredObserver: Nullable<Observer<AbstractEngine>>;\r\n\r\n /**\r\n * The scene the AssetContainer belongs to.\r\n */\r\n public scene: Scene;\r\n\r\n /**\r\n * Instantiates an AssetContainer.\r\n * @param scene The scene the AssetContainer belongs to.\r\n */\r\n constructor(scene?: Nullable<Scene>) {\r\n super();\r\n scene = scene || EngineStore.LastCreatedScene;\r\n if (!scene) {\r\n return;\r\n }\r\n this.scene = scene;\r\n this[\"proceduralTextures\"] = [];\r\n\r\n scene.onDisposeObservable.add(() => {\r\n if (!this._wasAddedToScene) {\r\n this.dispose();\r\n }\r\n });\r\n\r\n this._onContextRestoredObserver = scene.getEngine().onContextRestoredObservable.add(() => {\r\n for (const geometry of this.geometries) {\r\n geometry._rebuild();\r\n }\r\n\r\n for (const mesh of this.meshes) {\r\n mesh._rebuild();\r\n }\r\n\r\n for (const system of this.particleSystems) {\r\n system.rebuild();\r\n }\r\n\r\n for (const texture of this.textures) {\r\n texture._rebuild();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Given a list of nodes, return a topological sorting of them.\r\n * @param nodes\r\n * @returns a sorted array of nodes\r\n */\r\n private _topologicalSort(nodes: Node[]): Node[] {\r\n const nodesUidMap = new Map<number, Node>();\r\n\r\n for (const node of nodes) {\r\n nodesUidMap.set(node.uniqueId, node);\r\n }\r\n\r\n const dependencyGraph = {\r\n dependsOn: new Map<number, Set<number>>(), // given a node id, what are the ids of the nodes it depends on\r\n dependedBy: new Map<number, Set<number>>(), // given a node id, what are the ids of the nodes that depend on it\r\n };\r\n\r\n // Build the dependency graph given the list of nodes\r\n\r\n // First pass: Initialize the empty dependency graph\r\n for (const node of nodes) {\r\n const nodeId = node.uniqueId;\r\n dependencyGraph.dependsOn.set(nodeId, new Set<number>());\r\n dependencyGraph.dependedBy.set(nodeId, new Set<number>());\r\n }\r\n\r\n // Second pass: Populate the dependency graph. We assume that we\r\n // don't need to check for cycles here, as the scene graph cannot\r\n // contain cycles. Our graph also already contains all transitive\r\n // dependencies because getDescendants returns the transitive\r\n // dependencies by default.\r\n for (const node of nodes) {\r\n const nodeId = node.uniqueId;\r\n const dependsOn = dependencyGraph.dependsOn.get(nodeId)!;\r\n if (node instanceof InstancedMesh) {\r\n const masterMesh = node.sourceMesh;\r\n if (nodesUidMap.has(masterMesh.uniqueId)) {\r\n dependsOn.add(masterMesh.uniqueId);\r\n dependencyGraph.dependedBy.get(masterMesh.uniqueId)!.add(nodeId);\r\n }\r\n }\r\n const dependedBy = dependencyGraph.dependedBy.get(nodeId)!;\r\n\r\n for (const child of node.getDescendants()) {\r\n const childId = child.uniqueId;\r\n if (nodesUidMap.has(childId)) {\r\n dependedBy.add(childId);\r\n\r\n const childDependsOn = dependencyGraph.dependsOn.get(childId)!;\r\n childDependsOn.add(nodeId);\r\n }\r\n }\r\n }\r\n\r\n // Third pass: Topological sort\r\n const sortedNodes: Node[] = [];\r\n\r\n // First: Find all nodes that have no dependencies\r\n const leaves: Node[] = [];\r\n for (const node of nodes) {\r\n const nodeId = node.uniqueId;\r\n if (dependencyGraph.dependsOn.get(nodeId)!.size === 0) {\r\n leaves.push(node);\r\n nodesUidMap.delete(nodeId);\r\n }\r\n }\r\n\r\n const visitList = leaves;\r\n while (visitList.length > 0) {\r\n const nodeToVisit = visitList.shift()!;\r\n\r\n sortedNodes.push(nodeToVisit);\r\n\r\n // Remove the node from the dependency graph\r\n // When a node is visited, we know that dependsOn is empty.\r\n // So we only need to remove the node from dependedBy.\r\n const dependedByVisitedNode = dependencyGraph.dependedBy.get(nodeToVisit.uniqueId)!;\r\n // Array.from(x.values()) is to make the TS compiler happy\r\n for (const dependedByVisitedNodeId of Array.from(dependedByVisitedNode.values())) {\r\n const dependsOnDependedByVisitedNode = dependencyGraph.dependsOn.get(dependedByVisitedNodeId)!;\r\n dependsOnDependedByVisitedNode.delete(nodeToVisit.uniqueId);\r\n\r\n if (dependsOnDependedByVisitedNode.size === 0 && nodesUidMap.get(dependedByVisitedNodeId)) {\r\n visitList.push(nodesUidMap.get(dependedByVisitedNodeId)!);\r\n nodesUidMap.delete(dependedByVisitedNodeId);\r\n }\r\n }\r\n }\r\n\r\n if (nodesUidMap.size > 0) {\r\n Logger.Error(\"SceneSerializer._topologicalSort: There were unvisited nodes:\");\r\n nodesUidMap.forEach((node) => {\r\n Logger.Error(node.name);\r\n });\r\n }\r\n\r\n return sortedNodes;\r\n }\r\n\r\n private _addNodeAndDescendantsToList(list: Node[], addedIds: Set<number>, rootNode?: Node, predicate?: (entity: any) => boolean) {\r\n if (!rootNode || (predicate && !predicate(rootNode)) || addedIds.has(rootNode.uniqueId)) {\r\n return;\r\n }\r\n\r\n list.push(rootNode);\r\n addedIds.add(rootNode.uniqueId);\r\n\r\n for (const child of rootNode.getDescendants(true)) {\r\n this._addNodeAndDescendantsToList(list, addedIds, child, predicate);\r\n }\r\n }\r\n\r\n /**\r\n * Check if a specific node is contained in this asset container.\r\n * @param node the node to check\r\n * @returns true if the node is contained in this container, otherwise false.\r\n */\r\n private _isNodeInContainer(node: Node) {\r\n if (node instanceof AbstractMesh && this.meshes.indexOf(node) !== -1) {\r\n return true;\r\n }\r\n if (node instanceof TransformNode && this.transformNodes.indexOf(node) !== -1) {\r\n return true;\r\n }\r\n if (node instanceof Light && this.lights.indexOf(node) !== -1) {\r\n return true;\r\n }\r\n if (node instanceof Camera && this.cameras.indexOf(node) !== -1) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * For every node in the scene, check if its parent node is also in the scene.\r\n * @returns true if every node's parent is also in the scene, otherwise false.\r\n */\r\n private _isValidHierarchy() {\r\n for (const node of this.meshes) {\r\n if (node.parent && !this._isNodeInContainer(node.parent)) {\r\n Logger.Warn(`Node ${node.name} has a parent that is not in the container.`);\r\n return false;\r\n }\r\n }\r\n for (const node of this.transformNodes) {\r\n if (node.parent && !this._isNodeInContainer(node.parent)) {\r\n Logger.Warn(`Node ${node.name} has a parent that is not in the container.`);\r\n return false;\r\n }\r\n }\r\n for (const node of this.lights) {\r\n if (node.parent && !this._isNodeInContainer(node.parent)) {\r\n Logger.Warn(`Node ${node.name} has a parent that is not in the container.`);\r\n return false;\r\n }\r\n }\r\n for (const node of this.cameras) {\r\n if (node.parent && !this._isNodeInContainer(node.parent)) {\r\n Logger.Warn(`Node ${node.name} has a parent that is not in the container.`);\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Instantiate or clone all meshes and add the new ones to the scene.\r\n * Skeletons and animation groups will all be cloned\r\n * @param nameFunction defines an optional function used to get new names for clones\r\n * @param cloneMaterials defines an optional boolean that defines if materials must be cloned as well (false by default)\r\n * @param options defines an optional list of options to control how to instantiate / clone models\r\n * @param options.doNotInstantiate defines if the model must be instantiated or just cloned\r\n * @param options.predicate defines a predicate used to filter whih mesh to instantiate/clone\r\n * @returns a list of rootNodes, skeletons and animation groups that were duplicated\r\n */\r\n public instantiateModelsToScene(\r\n nameFunction?: (sourceName: string) => string,\r\n cloneMaterials = false,\r\n options?: { doNotInstantiate?: boolean | ((node: Node) => boolean); predicate?: (entity: any) => boolean }\r\n ): InstantiatedEntries {\r\n if (!this._isValidHierarchy()) {\r\n Tools.Warn(\"SceneSerializer.InstantiateModelsToScene: The Asset Container hierarchy is not valid.\");\r\n }\r\n const conversionMap: { [key: number]: number } = {};\r\n const storeMap: { [key: number]: any } = {};\r\n const result = new InstantiatedEntries();\r\n const alreadySwappedSkeletons: Skeleton[] = [];\r\n const alreadySwappedMaterials: Material[] = [];\r\n\r\n const localOptions = {\r\n doNotInstantiate: true,\r\n ...options,\r\n };\r\n\r\n const onClone = (source: Node, clone: Node) => {\r\n conversionMap[source.uniqueId] = clone.uniqueId;\r\n storeMap[clone.uniqueId] = clone;\r\n\r\n if (nameFunction) {\r\n clone.name = nameFunction(source.name);\r\n }\r\n\r\n if (clone instanceof Mesh) {\r\n const clonedMesh = clone;\r\n\r\n if (clonedMesh.morphTargetManager) {\r\n const oldMorphTargetManager = (source as Mesh).morphTargetManager!;\r\n clonedMesh.morphTargetManager = oldMorphTargetManager.clone();\r\n\r\n for (let index = 0; index < oldMorphTargetManager.numTargets; index++) {\r\n const oldTarget = oldMorphTargetManager.getTarget(index);\r\n const newTarget = clonedMesh.morphTargetManager.getTarget(index);\r\n\r\n conversionMap[oldTarget.uniqueId] = newTarget.uniqueId;\r\n storeMap[newTarget.uniqueId] = newTarget;\r\n }\r\n }\r\n }\r\n };\r\n\r\n const nodesToSort: Node[] = [];\r\n const idsOnSortList = new Set<number>();\r\n\r\n for (const transformNode of this.transformNodes) {\r\n if (transformNode.parent === null) {\r\n this._addNodeAndDescendantsToList(nodesToSort, idsOnSortList, transformNode, localOptions.predicate);\r\n }\r\n }\r\n\r\n for (const mesh of this.meshes) {\r\n if (mesh.parent === null) {\r\n this._addNodeAndDescendantsToList(nodesToSort, idsOnSortList, mesh, localOptions.predicate);\r\n }\r\n }\r\n\r\n // Topologically sort nodes by parenting/instancing relationships so that all resources are in place\r\n // when a given node is instantiated.\r\n const sortedNodes = this._topologicalSort(nodesToSort);\r\n\r\n const onNewCreated = (source: Node, clone: Node) => {\r\n onClone(source, clone);\r\n\r\n if (source.parent) {\r\n const replicatedParentId = conversionMap[source.parent.uniqueId];\r\n const replicatedParent = storeMap[replicatedParentId];\r\n\r\n if (replicatedParent) {\r\n clone.parent = replicatedParent;\r\n } else {\r\n clone.parent = source.parent;\r\n }\r\n }\r\n\r\n if ((clone as any).position && (source as any).position) {\r\n (clone as any).position.copyFrom((source as any).position);\r\n }\r\n if ((clone as any).rotationQuaternion && (source as any).rotationQuaternion) {\r\n (clone as any).rotationQuaternion.copyFrom((source as any).rotationQuaternion);\r\n }\r\n if ((clone as any).rotation && (source as any).rotation) {\r\n (clone as any).rotation.copyFrom((source as any).rotation);\r\n }\r\n if ((clone as any).scaling && (source as any).scaling) {\r\n (clone as any).scaling.copyFrom((source as any).scaling);\r\n }\r\n\r\n if ((clone as any).material) {\r\n const mesh = clone as AbstractMesh;\r\n\r\n if (mesh.material) {\r\n if (cloneMaterials) {\r\n const sourceMaterial = (source as AbstractMesh).material!;\r\n\r\n if (alreadySwappedMaterials.indexOf(sourceMaterial) === -1) {\r\n let swap = sourceMaterial.clone(nameFunction ? nameFunction(sourceMaterial.name) : \"Clone of \" + sourceMaterial.name)!;\r\n alreadySwappedMaterials.push(sourceMaterial);\r\n conversionMap[sourceMaterial.uniqueId] = swap.uniqueId;\r\n storeMap[swap.uniqueId] = swap;\r\n\r\n if (sourceMaterial.getClassName() === \"MultiMaterial\") {\r\n const multi = sourceMaterial as MultiMaterial;\r\n\r\n for (const material of multi.subMaterials) {\r\n if (!material) {\r\n continue;\r\n }\r\n swap = material.clone(nameFunction ? nameFunction(material.name) : \"Clone of \" + material.name)!;\r\n alreadySwappedMaterials.push(material);\r\n conversionMap[material.uniqueId] = swap.uniqueId;\r\n storeMap[swap.uniqueId] = swap;\r\n }\r\n\r\n multi.subMaterials = multi.subMaterials.map((m) => m && storeMap[conversionMap[m.uniqueId]]);\r\n }\r\n }\r\n\r\n if (mesh.getClassName() !== \"InstancedMesh\") {\r\n mesh.material = storeMap[conversionMap[sourceMaterial.uniqueId]];\r\n }\r\n } else {\r\n if (mesh.material.getClassName() === \"MultiMaterial\") {\r\n if (this.scene.multiMaterials.indexOf(mesh.material as MultiMaterial) === -1) {\r\n this.scene.addMultiMaterial(mesh.material as MultiMaterial);\r\n }\r\n } else {\r\n if (this.scene.materials.indexOf(mesh.material) === -1) {\r\n this.scene.addMaterial(mesh.material);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (clone.parent === null) {\r\n result.rootNodes.push(clone);\r\n }\r\n };\r\n\r\n for (const node of sortedNodes) {\r\n if (node.getClassName() === \"InstancedMesh\") {\r\n const instancedNode = node as InstancedMesh;\r\n const sourceMesh = instancedNode.sourceMesh;\r\n const replicatedSourceId = conversionMap[sourceMesh.uniqueId];\r\n const replicatedSource = typeof replicatedSourceId === \"number\" ? storeMap[replicatedSourceId] : sourceMesh;\r\n const replicatedInstancedNode = replicatedSource.createInstance(instancedNode.name);\r\n onNewCreated(instancedNode, replicatedInstancedNode);\r\n } else {\r\n // Mesh or TransformNode\r\n let canInstance = true;\r\n if (\r\n node.getClassName() === \"TransformNode\" ||\r\n node.getClassName() === \"Node\" ||\r\n (node as Mesh).skeleton ||\r\n !(node as any).getTotalVertices ||\r\n (node as Mesh).getTotalVertices() === 0\r\n ) {\r\n // Transform nodes, skinned meshes, and meshes with no vertices can never be instanced!\r\n canInstance = false;\r\n } else if (localOptions.doNotInstantiate) {\r\n if (typeof localOptions.doNotInstantiate === \"function\") {\r\n canInstance = !localOptions.doNotInstantiate(node);\r\n } else {\r\n canInstance = !localOptions.doNotInstantiate;\r\n }\r\n }\r\n const replicatedNode = canInstance ? (node as Mesh).createInstance(`instance of ${node.name}`) : node.clone(`Clone of ${node.name}`, null, true);\r\n if (!replicatedNode) {\r\n throw new Error(`Could not clone or instantiate node on Asset Container ${node.name}`);\r\n }\r\n onNewCreated(node, replicatedNode);\r\n }\r\n }\r\n\r\n for (const s of this.skeletons) {\r\n if (localOptions.predicate && !localOptions.predicate(s)) {\r\n continue;\r\n }\r\n\r\n const clone = s.clone(nameFunction ? nameFunction(s.name) : \"Clone of \" + s.name);\r\n\r\n for (const m of this.meshes) {\r\n if (m.skeleton === s && !m.isAnInstance) {\r\n const copy = storeMap[conversionMap[m.uniqueId]] as Mesh;\r\n if (!copy || copy.isAnInstance) {\r\n continue;\r\n }\r\n copy.skeleton = clone;\r\n\r\n if (alreadySwappedSkeletons.indexOf(clone) !== -1) {\r\n continue;\r\n }\r\n\r\n alreadySwappedSkeletons.push(clone);\r\n\r\n // Check if bones are mesh linked\r\n for (const bone of clone.bones) {\r\n if (bone._linkedTransformNode) {\r\n bone._linkedTransformNode = storeMap[conversionMap[bone._linkedTransformNode.uniqueId]];\r\n }\r\n }\r\n }\r\n }\r\n\r\n result.skeletons.push(clone);\r\n }\r\n\r\n for (const o of this.animationGroups) {\r\n if (localOptions.predicate && !localOptions.predicate(o)) {\r\n continue;\r\n }\r\n\r\n const clone = o.clone(nameFunction ? nameFunction(o.name) : \"Clone of \" + o.name, (oldTarget) => {\r\n const newTarget = storeMap[conversionMap[oldTarget.uniqueId]];\r\n\r\n return newTarget || oldTarget;\r\n });\r\n\r\n result.animationGroups.push(clone);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Adds all the assets from the container to the scene.\r\n */\r\n public addAllToScene() {\r\n if (this._wasAddedToScene) {\r\n return;\r\n }\r\n if (!this._isValidHierarchy()) {\r\n Tools.Warn(\"SceneSerializer.addAllToScene: The Asset Container hierarchy is not valid.\");\r\n }\r\n\r\n this._wasAddedToScene = true;\r\n\r\n this.addToScene(null);\r\n\r\n if (this.environmentTexture) {\r\n this.scene.environmentTexture = this.environmentTexture;\r\n }\r\n\r\n for (const component of this.scene._serializableComponents) {\r\n component.addFromContainer(this);\r\n }\r\n\r\n this.scene.getEngine().onContextRestoredObservable.remove(this._onContextRestoredObserver);\r\n this._onContextRestoredObserver = null;\r\n }\r\n\r\n /**\r\n * Adds assets from the container to the scene.\r\n * @param predicate defines a predicate used to select which entity will be added (can be null)\r\n */\r\n public addToScene(predicate: Nullable<(entity: any) => boolean> = null) {\r\n const addedNodes: Node[] = [];\r\n for (const o of this.cameras) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.addCamera(o);\r\n addedNodes.push(o);\r\n }\r\n for (const o of this.lights) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.addLight(o);\r\n addedNodes.push(o);\r\n }\r\n for (const o of this.meshes) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.addMesh(o);\r\n addedNodes.push(o);\r\n }\r\n for (const o of this.skeletons) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.addSkeleton(o);\r\n }\r\n for (const o of this.animations) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.addAnimation(o);\r\n }\r\n for (const o of this.animationGroups) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.addAnimationGroup(o);\r\n }\r\n for (const o of this.multiMaterials) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.addMultiMaterial(o);\r\n }\r\n for (const o of this.materials) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.addMaterial(o);\r\n }\r\n for (const o of this.morphTargetManagers) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.addMorphTargetManager(o);\r\n }\r\n for (const o of this.geometries) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.addGeometry(o);\r\n }\r\n for (const o of this.transformNodes) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.addTransformNode(o);\r\n addedNodes.push(o);\r\n }\r\n for (const o of this.actionManagers) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.addActionManager(o);\r\n }\r\n for (const o of this.textures) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.addTexture(o);\r\n }\r\n for (const o of this.reflectionProbes) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.addReflectionProbe(o);\r\n }\r\n\r\n for (const addedNode of addedNodes) {\r\n // If node was added to the scene, but parent is not in the scene, break the relationship\r\n if (addedNode.parent && this.scene.getNodes().indexOf(addedNode.parent) === -1) {\r\n // Use setParent to keep transform if possible\r\n if ((addedNode as TransformNode).setParent) {\r\n (addedNode as TransformNode).setParent(null);\r\n } else {\r\n addedNode.parent = null;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Removes all the assets in the container from the scene\r\n */\r\n public removeAllFromScene() {\r\n if (!this._isValidHierarchy()) {\r\n Tools.Warn(\"SceneSerializer.removeAllFromScene: The Asset Container hierarchy is not valid.\");\r\n }\r\n\r\n this._wasAddedToScene = false;\r\n\r\n this.removeFromScene(null);\r\n\r\n if (this.environmentTexture === this.scene.environmentTexture) {\r\n this.scene.environmentTexture = null;\r\n }\r\n\r\n for (const component of this.scene._serializableComponents) {\r\n component.removeFromContainer(this);\r\n }\r\n }\r\n\r\n /**\r\n * Removes assets in the container from the scene\r\n * @param predicate defines a predicate used to select which entity will be added (can be null)\r\n */\r\n public removeFromScene(predicate: Nullable<(entity: any) => boolean> = null) {\r\n for (const o of this.cameras) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.removeCamera(o);\r\n }\r\n for (const o of this.lights) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.removeLight(o);\r\n }\r\n for (const o of this.meshes) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.removeMesh(o, true);\r\n }\r\n for (const o of this.skeletons) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.removeSkeleton(o);\r\n }\r\n for (const o of this.animations) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.removeAnimation(o);\r\n }\r\n for (const o of this.animationGroups) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.removeAnimationGroup(o);\r\n }\r\n for (const o of this.multiMaterials) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.removeMultiMaterial(o);\r\n }\r\n for (const o of this.materials) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.removeMaterial(o);\r\n }\r\n for (const o of this.morphTargetManagers) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.removeMorphTargetManager(o);\r\n }\r\n for (const o of this.geometries) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.removeGeometry(o);\r\n }\r\n for (const o of this.transformNodes) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.removeTransformNode(o);\r\n }\r\n for (const o of this.actionManagers) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.removeActionManager(o);\r\n }\r\n for (const o of this.textures) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.removeTexture(o);\r\n }\r\n for (const o of this.reflectionProbes) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.removeReflectionProbe(o);\r\n }\r\n }\r\n\r\n /**\r\n * Disposes all the assets in the container\r\n */\r\n public dispose() {\r\n const cameras = this.cameras;\r\n for (const camera of cameras) {\r\n camera.dispose();\r\n }\r\n this.cameras.length = 0;\r\n\r\n const lights = this.lights;\r\n for (const light of lights) {\r\n light.dispose();\r\n }\r\n this.lights.length = 0;\r\n\r\n const meshes = this.meshes;\r\n for (const mesh of meshes) {\r\n mesh.dispose();\r\n }\r\n this.meshes.length = 0;\r\n\r\n const skeletons = this.skeletons;\r\n for (const skeleton of skeletons) {\r\n skeleton.dispose();\r\n }\r\n this.skeletons.length = 0;\r\n\r\n const animationGroups = this.animationGroups;\r\n for (const animationGroup of animationGroups) {\r\n animationGroup.dispose();\r\n }\r\n this.animationGroups.length = 0;\r\n\r\n const multiMaterials = this.multiMaterials;\r\n for (const multiMaterial of multiMaterials) {\r\n multiMaterial.dispose();\r\n }\r\n this.multiMaterials.length = 0;\r\n\r\n const materials = this.materials;\r\n for (const material of materials) {\r\n material.dispose();\r\n }\r\n this.materials.length = 0;\r\n\r\n const geometries = this.geometries;\r\n for (const geometry of geometries) {\r\n geometry.dispose();\r\n }\r\n this.geometries.length = 0;\r\n\r\n const transformNodes = this.transformNodes;\r\n for (const transformNode of transformNodes) {\r\n transformNode.dispose();\r\n }\r\n this.transformNodes.length = 0;\r\n\r\n const actionManagers = this.actionManagers;\r\n for (const actionManager of actionManagers) {\r\n actionManager.dispose();\r\n }\r\n this.actionManagers.length = 0;\r\n\r\n const textures = this.textures;\r\n for (const texture of textures) {\r\n texture.dispose();\r\n }\r\n this.textures.length = 0;\r\n\r\n const reflectionProbes = this.reflectionProbes;\r\n for (const reflectionProbe of reflectionProbes) {\r\n reflectionProbe.dispose();\r\n }\r\n this.reflectionProbes.length = 0;\r\n\r\n const morphTargetManagers = this.morphTargetManagers;\r\n for (const morphTargetManager of morphTargetManagers) {\r\n morphTargetManager.dispose();\r\n }\r\n this.morphTargetManagers.length = 0;\r\n\r\n if (this.environmentTexture) {\r\n this.environmentTexture.dispose();\r\n this.environmentTexture = null;\r\n }\r\n\r\n for (const component of this.scene._serializableComponents) {\r\n component.removeFromContainer(this, true);\r\n }\r\n\r\n if (this._onContextRestoredObserver) {\r\n this.scene.getEngine().onContextRestoredObservable.remove(this._onContextRestoredObserver);\r\n this._onContextRestoredObserver = null;\r\n }\r\n }\r\n\r\n private _moveAssets<T>(sourceAssets: T[], targetAssets: T[], keepAssets: T[]): void {\r\n if (!sourceAssets || !targetAssets) {\r\n return;\r\n }\r\n\r\n for (const asset of sourceAssets) {\r\n let move = true;\r\n if (keepAssets) {\r\n for (const keepAsset of keepAssets) {\r\n if (asset === keepAsset) {\r\n move = false;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (move) {\r\n targetAssets.push(asset);\r\n (asset as any)._parentContainer = this;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Removes all the assets contained in the scene and adds them to the container.\r\n * @param keepAssets Set of assets to keep in the scene. (default: empty)\r\n */\r\n public moveAllFromScene(keepAssets?: KeepAssets): void {\r\n this._wasAddedToScene = false;\r\n\r\n if (keepAssets === undefined) {\r\n keepAssets = new KeepAssets();\r\n }\r\n\r\n for (const key in this) {\r\n if (Object.prototype.hasOwnProperty.call(this, key)) {\r\n (<any>this)[key] = (<any>this)[key] || (key === \"_environmentTexture\" ? null : []);\r\n this._moveAssets((<any>this.scene)[key], (<any>this)[key], (<any>keepAssets)[key]);\r\n }\r\n }\r\n\r\n this.environmentTexture = this.scene.environmentTexture;\r\n\r\n this.removeAllFromScene();\r\n }\r\n\r\n /**\r\n * Adds all meshes in the asset container to a root mesh that can be used to position all the contained meshes. The root mesh is then added to the front of the meshes in the assetContainer.\r\n * @returns the root mesh\r\n */\r\n public createRootMesh() {\r\n const rootMesh = new Mesh(\"assetContainerRootMesh\", this.scene);\r\n for (const m of this.meshes) {\r\n if (!m.parent) {\r\n rootMesh.addChild(m);\r\n }\r\n }\r\n this.meshes.unshift(rootMesh);\r\n return rootMesh;\r\n }\r\n\r\n /**\r\n * Merge animations (direct and animation groups) from this asset container into a scene\r\n * @param scene is the instance of BABYLON.Scene to append to (default: last created scene)\r\n * @param animatables set of animatables to retarget to a node from the scene\r\n * @param targetConverter defines a function used to convert animation targets from the asset container to the scene (default: search node by name)\r\n * @returns an array of the new AnimationGroup added to the scene (empty array if none)\r\n */\r\n public mergeAnimationsTo(\r\n scene: Nullable<Scene> = EngineStore.LastCreatedScene,\r\n animatables: Animatable[],\r\n targetConverter: Nullable<(target: any) => Nullable<Node>> = null\r\n ): AnimationGroup[] {\r\n if (!scene) {\r\n Logger.Error(\"No scene available to merge animations to\");\r\n return [];\r\n }\r\n\r\n const _targetConverter = targetConverter\r\n ? targetConverter\r\n : (target: any) => {\r\n let node = null;\r\n\r\n const targetProperty = target.animations.length ? target.animations[0].targetProperty : \"\";\r\n /*\r\n BabylonJS adds special naming to targets that are children of nodes.\r\n This name attempts to remove that special naming to get the parent nodes name in case the target\r\n can't be found in the node tree\r\n\r\n Ex: Torso_primitive0 likely points to a Mesh primitive. We take away primitive0 and are left with \"Torso\" which is the name\r\n of the primitive's parent.\r\n */\r\n const name = target.name.split(\".\").join(\"\").split(\"_primitive\")[0];\r\n\r\n switch (targetProperty) {\r\n case \"position\":\r\n case \"rotationQuaternion\":\r\n node = scene.getTransformNodeByName(target.name) || scene.getTransformNodeByName(name);\r\n break;\r\n case \"influence\":\r\n node = scene.getMorphTargetByName(target.name) || scene.getMorphTargetByName(name);\r\n break;\r\n default:\r\n node = scene.getNodeByName(target.name) || scene.getNodeByName(name);\r\n }\r\n\r\n return node;\r\n };\r\n\r\n // Copy new node animations\r\n const nodesInAC = this.getNodes();\r\n for (const nodeInAC of nodesInAC) {\r\n const nodeInScene = _targetConverter(nodeInAC);\r\n if (nodeInScene !== null) {\r\n // Remove old animations with same target property as a new one\r\n for (const animationInAC of nodeInAC.animations) {\r\n // Doing treatment on an array for safety measure\r\n const animationsWithSameProperty = nodeInScene.animations.filter((animationInScene) => {\r\n return animationInScene.targetProperty === animationInAC.targetProperty;\r\n });\r\n for (const animationWithSameProperty of animationsWithSameProperty) {\r\n const index = nodeInScene.animations.indexOf(animationWithSameProperty, 0);\r\n if (index > -1) {\r\n nodeInScene.animations.splice(index, 1);\r\n }\r\n }\r\n }\r\n\r\n // Append new animations\r\n nodeInScene.animations = nodeInScene.animations.concat(nodeInAC.animations);\r\n }\r\n }\r\n\r\n const newAnimationGroups: AnimationGroup[] = [];\r\n\r\n // Copy new animation groups\r\n const animationGroups = this.animationGroups.slice();\r\n for (const animationGroupInAC of animationGroups) {\r\n // Clone the animation group and all its animatables\r\n newAnimationGroups.push(animationGroupInAC.clone(animationGroupInAC.name, _targetConverter));\r\n\r\n // Remove animatables related to the asset container\r\n for (const animatable of animationGroupInAC.animatables) {\r\n animatable.stop();\r\n }\r\n }\r\n\r\n // Retarget animatables\r\n for (const animatable of animatables) {\r\n const target = _targetConverter(animatable.target);\r\n\r\n if (target) {\r\n // Clone the animatable and retarget it\r\n scene.beginAnimation(\r\n target,\r\n animatable.fromFrame,\r\n animatable.toFrame,\r\n animatable.loopAnimation,\r\n animatable.speedRatio,\r\n animatable.onAnimationEnd ? animatable.onAnimationEnd : undefined,\r\n undefined,\r\n true,\r\n undefined,\r\n animatable.onAnimationLoop ? animatable.onAnimationLoop : undefined\r\n );\r\n\r\n // Stop animation for the target in the asset container\r\n scene.stopAnimation(animatable.target);\r\n }\r\n }\r\n\r\n return newAnimationGroups;\r\n }\r\n\r\n /**\r\n * @since 6.15.0\r\n * This method checks for any node that has no parent\r\n * and is not in the rootNodes array, and adds the node\r\n * there, if so.\r\n */\r\n public populateRootNodes() {\r\n this.rootNodes.length = 0;\r\n for (const m of this.meshes) {\r\n if (!m.parent && this.rootNodes.indexOf(m) === -1) {\r\n this.rootNodes.push(m);\r\n }\r\n }\r\n for (const t of this.transformNodes) {\r\n if (!t.parent && this.rootNodes.indexOf(t) === -1) {\r\n this.rootNodes.push(t);\r\n }\r\n }\r\n for (const l of this.lights) {\r\n if (!l.parent && this.rootNodes.indexOf(l) === -1) {\r\n this.rootNodes.push(l);\r\n }\r\n }\r\n for (const c of this.cameras) {\r\n if (!c.parent && this.rootNodes.indexOf(c) === -1) {\r\n this.rootNodes.push(c);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @since 6.26.0\r\n * Given a root asset, this method will traverse its hierarchy and add it, its children and any materials/skeletons/animation groups to the container.\r\n * @param root root node\r\n */\r\n public addAllAssetsToContainer(root: Node) {\r\n if (!root) {\r\n return;\r\n }\r\n\r\n const nodesToVisit: Node[] = [];\r\n const visitedNodes = new Set<Node>();\r\n\r\n nodesToVisit.push(root);\r\n\r\n while (nodesToVisit.length > 0) {\r\n const nodeToVisit = nodesToVisit.pop()!;\r\n\r\n if (nodeToVisit instanceof Mesh) {\r\n if (nodeToVisit.geometry && this.geometries.indexOf(nodeToVisit.geometry) === -1) {\r\n this.geometries.push(nodeToVisit.geometry);\r\n }\r\n this.meshes.push(nodeToVisit);\r\n } else if (nodeToVisit instanceof InstancedMesh) {\r\n this.meshes.push(nodeToVisit);\r\n } else if (nodeToVisit instanceof TransformNode) {\r\n this.transformNodes.push(nodeToVisit);\r\n } else if (nodeToVisit instanceof Light) {\r\n this.lights.push(nodeToVisit);\r\n } else if (nodeToVisit instanceof Camera) {\r\n this.cameras.push(nodeToVisit);\r\n }\r\n\r\n if (nodeToVisit instanceof AbstractMesh) {\r\n if (nodeToVisit.material && this.materials.indexOf(nodeToVisit.material) === -1) {\r\n this.materials.push(nodeToVisit.material);\r\n for (const texture of nodeToVisit.material.getActiveTextures()) {\r\n if (this.textures.indexOf(texture) === -1) {\r\n this.textures.push(texture);\r\n }\r\n }\r\n }\r\n\r\n if (nodeToVisit.skeleton && this.skeletons.indexOf(nodeToVisit.skeleton) === -1) {\r\n this.skeletons.push(nodeToVisit.skeleton);\r\n }\r\n\r\n if (nodeToVisit.morphTargetManager && this.morphTargetManagers.indexOf(nodeToVisit.morphTargetManager) === -1) {\r\n this.morphTargetManagers.push(nodeToVisit.morphTargetManager);\r\n }\r\n }\r\n\r\n for (const child of nodeToVisit.getChildren()) {\r\n if (!visitedNodes.has(child)) {\r\n nodesToVisit.push(child);\r\n }\r\n }\r\n\r\n visitedNodes.add(nodeToVisit);\r\n }\r\n\r\n this.populateRootNodes();\r\n }\r\n\r\n /**\r\n * Get from a list of objects by tags\r\n * @param list the list of objects to use\r\n * @param tagsQuery the query to use\r\n * @param filter a predicate to filter for tags\r\n * @returns\r\n */\r\n private _getByTags<T>(list: T[], tagsQuery: string, filter?: (item: T) => boolean): T[] {\r\n if (tagsQuery === undefined) {\r\n // returns the complete list (could be done with Tags.MatchesQuery but no need to have a for-loop here)\r\n return list;\r\n }\r\n\r\n const listByTags = [];\r\n\r\n for (const i in list) {\r\n const item = list[i];\r\n if (Tags && Tags.MatchesQuery(item, tagsQuery) && (!filter || filter(item))) {\r\n listByTags.push(item);\r\n }\r\n }\r\n\r\n return listByTags;\r\n }\r\n\r\n /**\r\n * Get a list of meshes by tags\r\n * @param tagsQuery defines the tags query to use\r\n * @param filter defines a predicate used to filter results\r\n * @returns an array of Mesh\r\n */\r\n public getMeshesByTags(tagsQuery: string, filter?: (mesh: AbstractMesh) => boolean): AbstractMesh[] {\r\n return this._getByTags(this.meshes, tagsQuery, filter);\r\n }\r\n\r\n /**\r\n * Get a list of cameras by tags\r\n * @param tagsQuery defines the tags query to use\r\n * @param filter defines a predicate used to filter results\r\n * @returns an array of Camera\r\n */\r\n public getCamerasByTags(tagsQuery: string, filter?: (camera: Camera) => boolean): Camera[] {\r\n return this._getByTags(this.cameras, tagsQuery, filter);\r\n }\r\n\r\n /**\r\n * Get a list of lights by tags\r\n * @param tagsQuery defines the tags query to use\r\n * @param filter defines a predicate used to filter results\r\n * @returns an array of Light\r\n */\r\n public getLightsByTags(tagsQuery: string, filter?: (light: Light) => boolean): Light[] {\r\n return this._getByTags(this.lights, tagsQuery, filter);\r\n }\r\n\r\n /**\r\n * Get a list of materials by tags\r\n * @param tagsQuery defines the tags query to use\r\n * @param filter defines a predicate used to filter results\r\n * @returns an array of Material\r\n */\r\n public getMaterialsByTags(tagsQuery: string, filter?: (material: Material) => boolean): Material[] {\r\n return this._getByTags(this.materials, tagsQuery, filter).concat(this._getByTags(this.multiMaterials, tagsQuery, filter));\r\n }\r\n\r\n /**\r\n * Get a list of transform nodes by tags\r\n * @param tagsQuery defines the tags query to use\r\n * @param filter defines a predicate used to filter results\r\n * @returns an array of TransformNode\r\n */\r\n public getTransformNodesByTags(tagsQuery: string, filter?: (transform: TransformNode) => boolean): TransformNode[] {\r\n return this._getByTags(this.transformNodes, tagsQuery, filter);\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"assetContainer.js","sourceRoot":"","sources":["../../../dev/core/src/assetContainer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Scene } from \"./scene\";\r\nimport { Mesh } from \"./Meshes/mesh\";\r\nimport { TransformNode } from \"./Meshes/transformNode\";\r\nimport type { Skeleton } from \"./Bones/skeleton\";\r\nimport type { AnimationGroup } from \"./Animations/animationGroup\";\r\nimport { type Animatable } from \"./Animations/animatable.core\";\r\nimport { AbstractMesh } from \"./Meshes/abstractMesh\";\r\nimport type { MultiMaterial } from \"./Materials/multiMaterial\";\r\nimport type { Material } from \"./Materials/material\";\r\nimport { Logger } from \"./Misc/logger\";\r\nimport { EngineStore } from \"./Engines/engineStore\";\r\nimport type { Nullable } from \"./types\";\r\nimport type { Node } from \"./node\";\r\nimport type { Observer } from \"./Misc/observable\";\r\nimport type { AbstractEngine } from \"./Engines/abstractEngine\";\r\nimport { InstancedMesh } from \"./Meshes/instancedMesh\";\r\nimport { Light } from \"./Lights/light\";\r\nimport { Camera } from \"./Cameras/camera\";\r\nimport { Tools } from \"./Misc/tools\";\r\nimport type { IParticleSystem } from \"./Particles/IParticleSystem\";\r\nimport type { IAssetContainer } from \"./IAssetContainer\";\r\nimport type { Animation } from \"./Animations/animation\";\r\nimport type { MorphTargetManager } from \"./Morph/morphTargetManager\";\r\nimport type { Geometry } from \"./Meshes/geometry\";\r\nimport type { AbstractActionManager } from \"./Actions/abstractActionManager\";\r\nimport type { BaseTexture } from \"./Materials/Textures/baseTexture\";\r\nimport type { PostProcess } from \"./PostProcesses/postProcess\";\r\nimport type { Sound } from \"./Audio/sound\";\r\nimport type { Layer } from \"./Layers/layer\";\r\nimport type { EffectLayer } from \"./Layers/effectLayer\";\r\nimport type { ReflectionProbe } from \"./Probes/reflectionProbe\";\r\nimport type { LensFlareSystem } from \"./LensFlares/lensFlareSystem\";\r\nimport type { ProceduralTexture } from \"./Materials/Textures/Procedurals/proceduralTexture\";\r\nimport { Tags } from \"./Misc/tags\";\r\n\r\n/**\r\n * Root class for AssetContainer and KeepAssets\r\n */\r\nexport class AbstractAssetContainer implements IAssetContainer {\r\n /**\r\n * Gets the list of root nodes (ie. nodes with no parent)\r\n */\r\n public rootNodes: Node[] = [];\r\n\r\n /** All of the cameras added to this scene\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/cameras\r\n */\r\n public cameras: Camera[] = [];\r\n\r\n /**\r\n * All of the lights added to this scene\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/lights/lights_introduction\r\n */\r\n public lights: Light[] = [];\r\n\r\n /**\r\n * All of the (abstract) meshes added to this scene\r\n */\r\n public meshes: AbstractMesh[] = [];\r\n\r\n /**\r\n * The list of skeletons added to the scene\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/bonesSkeletons\r\n */\r\n public skeletons: Skeleton[] = [];\r\n\r\n /**\r\n * All of the particle systems added to this scene\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/particles/particle_system/particle_system_intro\r\n */\r\n public particleSystems: IParticleSystem[] = [];\r\n\r\n /**\r\n * Gets a list of Animations associated with the scene\r\n */\r\n public animations: Animation[] = [];\r\n\r\n /**\r\n * All of the animation groups added to this scene\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/animation/groupAnimations\r\n */\r\n public animationGroups: AnimationGroup[] = [];\r\n\r\n /**\r\n * All of the multi-materials added to this scene\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/multiMaterials\r\n */\r\n public multiMaterials: MultiMaterial[] = [];\r\n\r\n /**\r\n * All of the materials added to this scene\r\n * In the context of a Scene, it is not supposed to be modified manually.\r\n * Any addition or removal should be done using the addMaterial and removeMaterial Scene methods.\r\n * Note also that the order of the Material within the array is not significant and might change.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/materials_introduction\r\n */\r\n public materials: Material[] = [];\r\n\r\n /**\r\n * The list of morph target managers added to the scene\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/dynamicMeshMorph\r\n */\r\n public morphTargetManagers: MorphTargetManager[] = [];\r\n\r\n /**\r\n * The list of geometries used in the scene.\r\n */\r\n public geometries: Geometry[] = [];\r\n\r\n /**\r\n * All of the transform nodes added to this scene\r\n * In the context of a Scene, it is not supposed to be modified manually.\r\n * Any addition or removal should be done using the addTransformNode and removeTransformNode Scene methods.\r\n * Note also that the order of the TransformNode within the array is not significant and might change.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/transforms/parent_pivot/transform_node\r\n */\r\n public transformNodes: TransformNode[] = [];\r\n\r\n /**\r\n * ActionManagers available on the scene.\r\n * @deprecated\r\n */\r\n public actionManagers: AbstractActionManager[] = [];\r\n\r\n /**\r\n * Textures to keep.\r\n */\r\n public textures: BaseTexture[] = [];\r\n\r\n /** @internal */\r\n protected _environmentTexture: Nullable<BaseTexture> = null;\r\n /**\r\n * Texture used in all pbr material as the reflection texture.\r\n * As in the majority of the scene they are the same (exception for multi room and so on),\r\n * this is easier to reference from here than from all the materials.\r\n */\r\n public get environmentTexture(): Nullable<BaseTexture> {\r\n return this._environmentTexture;\r\n }\r\n\r\n public set environmentTexture(value: Nullable<BaseTexture>) {\r\n this._environmentTexture = value;\r\n }\r\n\r\n /**\r\n * The list of postprocesses added to the scene\r\n */\r\n public postProcesses: PostProcess[] = [];\r\n\r\n /**\r\n * The list of sounds\r\n */\r\n public sounds: Nullable<Sound[]> = null;\r\n\r\n /**\r\n * The list of effect layers added to the scene\r\n */\r\n public effectLayers: EffectLayer[] = [];\r\n\r\n /**\r\n * The list of layers added to the scene\r\n */\r\n public layers: Layer[] = [];\r\n\r\n /**\r\n * The list of reflection probes added to the scene\r\n */\r\n public reflectionProbes: ReflectionProbe[] = [];\r\n\r\n /**\r\n * The list of lens flare systems added to the scene\r\n */\r\n public lensFlareSystems: LensFlareSystem[];\r\n\r\n /**\r\n * The list of procedural textures added to the scene\r\n */\r\n public proceduralTextures: ProceduralTexture[];\r\n\r\n /**\r\n * @returns all meshes, lights, cameras, transformNodes and bones\r\n */\r\n public getNodes(): Array<Node> {\r\n let nodes: Node[] = [];\r\n nodes = nodes.concat(this.meshes);\r\n nodes = nodes.concat(this.lights);\r\n nodes = nodes.concat(this.cameras);\r\n nodes = nodes.concat(this.transformNodes); // dummies\r\n for (const skeleton of this.skeletons) {\r\n nodes = nodes.concat(skeleton.bones);\r\n }\r\n return nodes;\r\n }\r\n}\r\n\r\n/**\r\n * Set of assets to keep when moving a scene into an asset container.\r\n */\r\nexport class KeepAssets extends AbstractAssetContainer {}\r\n\r\n/**\r\n * Class used to store the output of the AssetContainer.instantiateAllMeshesToScene function\r\n */\r\nexport class InstantiatedEntries {\r\n /**\r\n * List of new root nodes (eg. nodes with no parent)\r\n */\r\n public rootNodes: Node[] = [];\r\n\r\n /**\r\n * List of new skeletons\r\n */\r\n public skeletons: Skeleton[] = [];\r\n\r\n /**\r\n * List of new animation groups\r\n */\r\n public animationGroups: AnimationGroup[] = [];\r\n\r\n /**\r\n * Disposes the instantiated entries from the scene\r\n */\r\n public dispose() {\r\n const rootNodes = this.rootNodes;\r\n for (const rootNode of rootNodes) {\r\n rootNode.dispose();\r\n }\r\n rootNodes.length = 0;\r\n\r\n const skeletons = this.skeletons;\r\n for (const skeleton of skeletons) {\r\n skeleton.dispose();\r\n }\r\n skeletons.length = 0;\r\n\r\n const animationGroups = this.animationGroups;\r\n for (const animationGroup of animationGroups) {\r\n animationGroup.dispose();\r\n }\r\n animationGroups.length = 0;\r\n }\r\n}\r\n\r\n/**\r\n * Container with a set of assets that can be added or removed from a scene.\r\n */\r\nexport class AssetContainer extends AbstractAssetContainer {\r\n private _wasAddedToScene = false;\r\n private _onContextRestoredObserver: Nullable<Observer<AbstractEngine>>;\r\n\r\n /**\r\n * The scene the AssetContainer belongs to.\r\n */\r\n public scene: Scene;\r\n\r\n /**\r\n * Instantiates an AssetContainer.\r\n * @param scene The scene the AssetContainer belongs to.\r\n */\r\n constructor(scene?: Nullable<Scene>) {\r\n super();\r\n scene = scene || EngineStore.LastCreatedScene;\r\n if (!scene) {\r\n return;\r\n }\r\n this.scene = scene;\r\n this[\"proceduralTextures\"] = [];\r\n\r\n scene.onDisposeObservable.add(() => {\r\n if (!this._wasAddedToScene) {\r\n this.dispose();\r\n }\r\n });\r\n\r\n this._onContextRestoredObserver = scene.getEngine().onContextRestoredObservable.add(() => {\r\n for (const geometry of this.geometries) {\r\n geometry._rebuild();\r\n }\r\n\r\n for (const mesh of this.meshes) {\r\n mesh._rebuild();\r\n }\r\n\r\n for (const system of this.particleSystems) {\r\n system.rebuild();\r\n }\r\n\r\n for (const texture of this.textures) {\r\n texture._rebuild();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Given a list of nodes, return a topological sorting of them.\r\n * @param nodes\r\n * @returns a sorted array of nodes\r\n */\r\n private _topologicalSort(nodes: Node[]): Node[] {\r\n const nodesUidMap = new Map<number, Node>();\r\n\r\n for (const node of nodes) {\r\n nodesUidMap.set(node.uniqueId, node);\r\n }\r\n\r\n const dependencyGraph = {\r\n dependsOn: new Map<number, Set<number>>(), // given a node id, what are the ids of the nodes it depends on\r\n dependedBy: new Map<number, Set<number>>(), // given a node id, what are the ids of the nodes that depend on it\r\n };\r\n\r\n // Build the dependency graph given the list of nodes\r\n\r\n // First pass: Initialize the empty dependency graph\r\n for (const node of nodes) {\r\n const nodeId = node.uniqueId;\r\n dependencyGraph.dependsOn.set(nodeId, new Set<number>());\r\n dependencyGraph.dependedBy.set(nodeId, new Set<number>());\r\n }\r\n\r\n // Second pass: Populate the dependency graph. We assume that we\r\n // don't need to check for cycles here, as the scene graph cannot\r\n // contain cycles. Our graph also already contains all transitive\r\n // dependencies because getDescendants returns the transitive\r\n // dependencies by default.\r\n for (const node of nodes) {\r\n const nodeId = node.uniqueId;\r\n const dependsOn = dependencyGraph.dependsOn.get(nodeId)!;\r\n if (node instanceof InstancedMesh) {\r\n const masterMesh = node.sourceMesh;\r\n if (nodesUidMap.has(masterMesh.uniqueId)) {\r\n dependsOn.add(masterMesh.uniqueId);\r\n dependencyGraph.dependedBy.get(masterMesh.uniqueId)!.add(nodeId);\r\n }\r\n }\r\n const dependedBy = dependencyGraph.dependedBy.get(nodeId)!;\r\n\r\n for (const child of node.getDescendants()) {\r\n const childId = child.uniqueId;\r\n if (nodesUidMap.has(childId)) {\r\n dependedBy.add(childId);\r\n\r\n const childDependsOn = dependencyGraph.dependsOn.get(childId)!;\r\n childDependsOn.add(nodeId);\r\n }\r\n }\r\n }\r\n\r\n // Third pass: Topological sort\r\n const sortedNodes: Node[] = [];\r\n\r\n // First: Find all nodes that have no dependencies\r\n const leaves: Node[] = [];\r\n for (const node of nodes) {\r\n const nodeId = node.uniqueId;\r\n if (dependencyGraph.dependsOn.get(nodeId)!.size === 0) {\r\n leaves.push(node);\r\n nodesUidMap.delete(nodeId);\r\n }\r\n }\r\n\r\n const visitList = leaves;\r\n while (visitList.length > 0) {\r\n const nodeToVisit = visitList.shift()!;\r\n\r\n sortedNodes.push(nodeToVisit);\r\n\r\n // Remove the node from the dependency graph\r\n // When a node is visited, we know that dependsOn is empty.\r\n // So we only need to remove the node from dependedBy.\r\n const dependedByVisitedNode = dependencyGraph.dependedBy.get(nodeToVisit.uniqueId)!;\r\n // Array.from(x.values()) is to make the TS compiler happy\r\n for (const dependedByVisitedNodeId of Array.from(dependedByVisitedNode.values())) {\r\n const dependsOnDependedByVisitedNode = dependencyGraph.dependsOn.get(dependedByVisitedNodeId)!;\r\n dependsOnDependedByVisitedNode.delete(nodeToVisit.uniqueId);\r\n\r\n if (dependsOnDependedByVisitedNode.size === 0 && nodesUidMap.get(dependedByVisitedNodeId)) {\r\n visitList.push(nodesUidMap.get(dependedByVisitedNodeId)!);\r\n nodesUidMap.delete(dependedByVisitedNodeId);\r\n }\r\n }\r\n }\r\n\r\n if (nodesUidMap.size > 0) {\r\n Logger.Error(\"SceneSerializer._topologicalSort: There were unvisited nodes:\");\r\n nodesUidMap.forEach((node) => {\r\n Logger.Error(node.name);\r\n });\r\n }\r\n\r\n return sortedNodes;\r\n }\r\n\r\n private _addNodeAndDescendantsToList(list: Node[], addedIds: Set<number>, rootNode?: Node, predicate?: (entity: any) => boolean) {\r\n if (!rootNode || (predicate && !predicate(rootNode)) || addedIds.has(rootNode.uniqueId)) {\r\n return;\r\n }\r\n\r\n list.push(rootNode);\r\n addedIds.add(rootNode.uniqueId);\r\n\r\n for (const child of rootNode.getDescendants(true)) {\r\n this._addNodeAndDescendantsToList(list, addedIds, child, predicate);\r\n }\r\n }\r\n\r\n /**\r\n * Check if a specific node is contained in this asset container.\r\n * @param node the node to check\r\n * @returns true if the node is contained in this container, otherwise false.\r\n */\r\n private _isNodeInContainer(node: Node) {\r\n if (node instanceof AbstractMesh && this.meshes.indexOf(node) !== -1) {\r\n return true;\r\n }\r\n if (node instanceof TransformNode && this.transformNodes.indexOf(node) !== -1) {\r\n return true;\r\n }\r\n if (node instanceof Light && this.lights.indexOf(node) !== -1) {\r\n return true;\r\n }\r\n if (node instanceof Camera && this.cameras.indexOf(node) !== -1) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * For every node in the scene, check if its parent node is also in the scene.\r\n * @returns true if every node's parent is also in the scene, otherwise false.\r\n */\r\n private _isValidHierarchy() {\r\n for (const node of this.meshes) {\r\n if (node.parent && !this._isNodeInContainer(node.parent)) {\r\n Logger.Warn(`Node ${node.name} has a parent that is not in the container.`);\r\n return false;\r\n }\r\n }\r\n for (const node of this.transformNodes) {\r\n if (node.parent && !this._isNodeInContainer(node.parent)) {\r\n Logger.Warn(`Node ${node.name} has a parent that is not in the container.`);\r\n return false;\r\n }\r\n }\r\n for (const node of this.lights) {\r\n if (node.parent && !this._isNodeInContainer(node.parent)) {\r\n Logger.Warn(`Node ${node.name} has a parent that is not in the container.`);\r\n return false;\r\n }\r\n }\r\n for (const node of this.cameras) {\r\n if (node.parent && !this._isNodeInContainer(node.parent)) {\r\n Logger.Warn(`Node ${node.name} has a parent that is not in the container.`);\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Instantiate or clone all meshes and add the new ones to the scene.\r\n * Skeletons and animation groups will all be cloned\r\n * @param nameFunction defines an optional function used to get new names for clones\r\n * @param cloneMaterials defines an optional boolean that defines if materials must be cloned as well (false by default)\r\n * @param options defines an optional list of options to control how to instantiate / clone models\r\n * @param options.doNotInstantiate defines if the model must be instantiated or just cloned\r\n * @param options.predicate defines a predicate used to filter whih mesh to instantiate/clone\r\n * @returns a list of rootNodes, skeletons and animation groups that were duplicated\r\n */\r\n public instantiateModelsToScene(\r\n nameFunction?: (sourceName: string) => string,\r\n cloneMaterials = false,\r\n options?: { doNotInstantiate?: boolean | ((node: Node) => boolean); predicate?: (entity: any) => boolean }\r\n ): InstantiatedEntries {\r\n if (!this._isValidHierarchy()) {\r\n Tools.Warn(\"SceneSerializer.InstantiateModelsToScene: The Asset Container hierarchy is not valid.\");\r\n }\r\n const conversionMap: { [key: number]: number } = {};\r\n const storeMap: { [key: number]: any } = {};\r\n const result = new InstantiatedEntries();\r\n const alreadySwappedSkeletons: Skeleton[] = [];\r\n const alreadySwappedMaterials: Material[] = [];\r\n\r\n const localOptions = {\r\n doNotInstantiate: true,\r\n ...options,\r\n };\r\n\r\n const onClone = (source: Node, clone: Node) => {\r\n conversionMap[source.uniqueId] = clone.uniqueId;\r\n storeMap[clone.uniqueId] = clone;\r\n\r\n if (nameFunction) {\r\n clone.name = nameFunction(source.name);\r\n }\r\n\r\n if (clone instanceof Mesh) {\r\n const clonedMesh = clone;\r\n\r\n if (clonedMesh.morphTargetManager) {\r\n const oldMorphTargetManager = (source as Mesh).morphTargetManager!;\r\n clonedMesh.morphTargetManager = oldMorphTargetManager.clone();\r\n\r\n for (let index = 0; index < oldMorphTargetManager.numTargets; index++) {\r\n const oldTarget = oldMorphTargetManager.getTarget(index);\r\n const newTarget = clonedMesh.morphTargetManager.getTarget(index);\r\n\r\n conversionMap[oldTarget.uniqueId] = newTarget.uniqueId;\r\n storeMap[newTarget.uniqueId] = newTarget;\r\n }\r\n }\r\n }\r\n };\r\n\r\n const nodesToSort: Node[] = [];\r\n const idsOnSortList = new Set<number>();\r\n\r\n for (const transformNode of this.transformNodes) {\r\n if (transformNode.parent === null) {\r\n this._addNodeAndDescendantsToList(nodesToSort, idsOnSortList, transformNode, localOptions.predicate);\r\n }\r\n }\r\n\r\n for (const mesh of this.meshes) {\r\n if (mesh.parent === null) {\r\n this._addNodeAndDescendantsToList(nodesToSort, idsOnSortList, mesh, localOptions.predicate);\r\n }\r\n }\r\n\r\n // Topologically sort nodes by parenting/instancing relationships so that all resources are in place\r\n // when a given node is instantiated.\r\n const sortedNodes = this._topologicalSort(nodesToSort);\r\n\r\n const onNewCreated = (source: Node, clone: Node) => {\r\n onClone(source, clone);\r\n\r\n if (source.parent) {\r\n const replicatedParentId = conversionMap[source.parent.uniqueId];\r\n const replicatedParent = storeMap[replicatedParentId];\r\n\r\n if (replicatedParent) {\r\n clone.parent = replicatedParent;\r\n } else {\r\n clone.parent = source.parent;\r\n }\r\n }\r\n\r\n if ((clone as any).position && (source as any).position) {\r\n (clone as any).position.copyFrom((source as any).position);\r\n }\r\n if ((clone as any).rotationQuaternion && (source as any).rotationQuaternion) {\r\n (clone as any).rotationQuaternion.copyFrom((source as any).rotationQuaternion);\r\n }\r\n if ((clone as any).rotation && (source as any).rotation) {\r\n (clone as any).rotation.copyFrom((source as any).rotation);\r\n }\r\n if ((clone as any).scaling && (source as any).scaling) {\r\n (clone as any).scaling.copyFrom((source as any).scaling);\r\n }\r\n\r\n if ((clone as any).material) {\r\n const mesh = clone as AbstractMesh;\r\n\r\n if (mesh.material) {\r\n if (cloneMaterials) {\r\n const sourceMaterial = (source as AbstractMesh).material!;\r\n\r\n if (alreadySwappedMaterials.indexOf(sourceMaterial) === -1) {\r\n let swap = sourceMaterial.clone(nameFunction ? nameFunction(sourceMaterial.name) : \"Clone of \" + sourceMaterial.name)!;\r\n alreadySwappedMaterials.push(sourceMaterial);\r\n conversionMap[sourceMaterial.uniqueId] = swap.uniqueId;\r\n storeMap[swap.uniqueId] = swap;\r\n\r\n if (sourceMaterial.getClassName() === \"MultiMaterial\") {\r\n const multi = sourceMaterial as MultiMaterial;\r\n\r\n for (const material of multi.subMaterials) {\r\n if (!material) {\r\n continue;\r\n }\r\n swap = material.clone(nameFunction ? nameFunction(material.name) : \"Clone of \" + material.name)!;\r\n alreadySwappedMaterials.push(material);\r\n conversionMap[material.uniqueId] = swap.uniqueId;\r\n storeMap[swap.uniqueId] = swap;\r\n }\r\n\r\n multi.subMaterials = multi.subMaterials.map((m) => m && storeMap[conversionMap[m.uniqueId]]);\r\n }\r\n }\r\n\r\n if (mesh.getClassName() !== \"InstancedMesh\") {\r\n mesh.material = storeMap[conversionMap[sourceMaterial.uniqueId]];\r\n }\r\n } else {\r\n if (mesh.material.getClassName() === \"MultiMaterial\") {\r\n if (this.scene.multiMaterials.indexOf(mesh.material as MultiMaterial) === -1) {\r\n this.scene.addMultiMaterial(mesh.material as MultiMaterial);\r\n }\r\n } else {\r\n if (this.scene.materials.indexOf(mesh.material) === -1) {\r\n this.scene.addMaterial(mesh.material);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (clone.parent === null) {\r\n result.rootNodes.push(clone);\r\n }\r\n };\r\n\r\n for (const node of sortedNodes) {\r\n if (node.getClassName() === \"InstancedMesh\") {\r\n const instancedNode = node as InstancedMesh;\r\n const sourceMesh = instancedNode.sourceMesh;\r\n const replicatedSourceId = conversionMap[sourceMesh.uniqueId];\r\n const replicatedSource = typeof replicatedSourceId === \"number\" ? storeMap[replicatedSourceId] : sourceMesh;\r\n const replicatedInstancedNode = replicatedSource.createInstance(instancedNode.name);\r\n onNewCreated(instancedNode, replicatedInstancedNode);\r\n } else {\r\n // Mesh or TransformNode\r\n let canInstance = true;\r\n if (\r\n node.getClassName() === \"TransformNode\" ||\r\n node.getClassName() === \"Node\" ||\r\n (node as Mesh).skeleton ||\r\n !(node as any).getTotalVertices ||\r\n (node as Mesh).getTotalVertices() === 0\r\n ) {\r\n // Transform nodes, skinned meshes, and meshes with no vertices can never be instanced!\r\n canInstance = false;\r\n } else if (localOptions.doNotInstantiate) {\r\n if (typeof localOptions.doNotInstantiate === \"function\") {\r\n canInstance = !localOptions.doNotInstantiate(node);\r\n } else {\r\n canInstance = !localOptions.doNotInstantiate;\r\n }\r\n }\r\n const replicatedNode = canInstance ? (node as Mesh).createInstance(`instance of ${node.name}`) : node.clone(`Clone of ${node.name}`, null, true);\r\n if (!replicatedNode) {\r\n throw new Error(`Could not clone or instantiate node on Asset Container ${node.name}`);\r\n }\r\n onNewCreated(node, replicatedNode);\r\n }\r\n }\r\n\r\n for (const s of this.skeletons) {\r\n if (localOptions.predicate && !localOptions.predicate(s)) {\r\n continue;\r\n }\r\n\r\n const clone = s.clone(nameFunction ? nameFunction(s.name) : \"Clone of \" + s.name);\r\n\r\n for (const m of this.meshes) {\r\n if (m.skeleton === s && !m.isAnInstance) {\r\n const copy = storeMap[conversionMap[m.uniqueId]] as Mesh;\r\n if (!copy || copy.isAnInstance) {\r\n continue;\r\n }\r\n copy.skeleton = clone;\r\n\r\n if (alreadySwappedSkeletons.indexOf(clone) !== -1) {\r\n continue;\r\n }\r\n\r\n alreadySwappedSkeletons.push(clone);\r\n\r\n // Check if bones are mesh linked\r\n for (const bone of clone.bones) {\r\n if (bone._linkedTransformNode) {\r\n bone._linkedTransformNode = storeMap[conversionMap[bone._linkedTransformNode.uniqueId]];\r\n }\r\n }\r\n }\r\n }\r\n\r\n result.skeletons.push(clone);\r\n }\r\n\r\n for (const o of this.animationGroups) {\r\n if (localOptions.predicate && !localOptions.predicate(o)) {\r\n continue;\r\n }\r\n\r\n const clone = o.clone(nameFunction ? nameFunction(o.name) : \"Clone of \" + o.name, (oldTarget) => {\r\n const newTarget = storeMap[conversionMap[oldTarget.uniqueId]];\r\n\r\n return newTarget || oldTarget;\r\n });\r\n\r\n result.animationGroups.push(clone);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Adds all the assets from the container to the scene.\r\n */\r\n public addAllToScene() {\r\n if (this._wasAddedToScene) {\r\n return;\r\n }\r\n if (!this._isValidHierarchy()) {\r\n Tools.Warn(\"SceneSerializer.addAllToScene: The Asset Container hierarchy is not valid.\");\r\n }\r\n\r\n this._wasAddedToScene = true;\r\n\r\n this.addToScene(null);\r\n\r\n if (this.environmentTexture) {\r\n this.scene.environmentTexture = this.environmentTexture;\r\n }\r\n\r\n for (const component of this.scene._serializableComponents) {\r\n component.addFromContainer(this);\r\n }\r\n\r\n this.scene.getEngine().onContextRestoredObservable.remove(this._onContextRestoredObserver);\r\n this._onContextRestoredObserver = null;\r\n }\r\n\r\n /**\r\n * Adds assets from the container to the scene.\r\n * @param predicate defines a predicate used to select which entity will be added (can be null)\r\n */\r\n public addToScene(predicate: Nullable<(entity: any) => boolean> = null) {\r\n const addedNodes: Node[] = [];\r\n for (const o of this.cameras) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.addCamera(o);\r\n addedNodes.push(o);\r\n }\r\n for (const o of this.lights) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.addLight(o);\r\n addedNodes.push(o);\r\n }\r\n for (const o of this.meshes) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.addMesh(o);\r\n addedNodes.push(o);\r\n }\r\n for (const o of this.skeletons) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.addSkeleton(o);\r\n }\r\n for (const o of this.animations) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.addAnimation(o);\r\n }\r\n for (const o of this.animationGroups) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.addAnimationGroup(o);\r\n }\r\n for (const o of this.multiMaterials) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.addMultiMaterial(o);\r\n }\r\n for (const o of this.materials) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.addMaterial(o);\r\n }\r\n for (const o of this.morphTargetManagers) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.addMorphTargetManager(o);\r\n }\r\n for (const o of this.geometries) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.addGeometry(o);\r\n }\r\n for (const o of this.transformNodes) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.addTransformNode(o);\r\n addedNodes.push(o);\r\n }\r\n for (const o of this.actionManagers) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.addActionManager(o);\r\n }\r\n for (const o of this.textures) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.addTexture(o);\r\n }\r\n for (const o of this.reflectionProbes) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.addReflectionProbe(o);\r\n }\r\n\r\n for (const addedNode of addedNodes) {\r\n // If node was added to the scene, but parent is not in the scene, break the relationship\r\n if (addedNode.parent && this.scene.getNodes().indexOf(addedNode.parent) === -1) {\r\n // Use setParent to keep transform if possible\r\n if ((addedNode as TransformNode).setParent) {\r\n (addedNode as TransformNode).setParent(null);\r\n } else {\r\n addedNode.parent = null;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Removes all the assets in the container from the scene\r\n */\r\n public removeAllFromScene() {\r\n if (!this._isValidHierarchy()) {\r\n Tools.Warn(\"SceneSerializer.removeAllFromScene: The Asset Container hierarchy is not valid.\");\r\n }\r\n\r\n this._wasAddedToScene = false;\r\n\r\n this.removeFromScene(null);\r\n\r\n if (this.environmentTexture === this.scene.environmentTexture) {\r\n this.scene.environmentTexture = null;\r\n }\r\n\r\n for (const component of this.scene._serializableComponents) {\r\n component.removeFromContainer(this);\r\n }\r\n }\r\n\r\n /**\r\n * Removes assets in the container from the scene\r\n * @param predicate defines a predicate used to select which entity will be added (can be null)\r\n */\r\n public removeFromScene(predicate: Nullable<(entity: any) => boolean> = null) {\r\n for (const o of this.cameras) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.removeCamera(o);\r\n }\r\n for (const o of this.lights) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.removeLight(o);\r\n }\r\n for (const o of this.meshes) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.removeMesh(o, true);\r\n }\r\n for (const o of this.skeletons) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.removeSkeleton(o);\r\n }\r\n for (const o of this.animations) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.removeAnimation(o);\r\n }\r\n for (const o of this.animationGroups) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.removeAnimationGroup(o);\r\n }\r\n for (const o of this.multiMaterials) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.removeMultiMaterial(o);\r\n }\r\n for (const o of this.materials) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.removeMaterial(o);\r\n }\r\n for (const o of this.morphTargetManagers) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.removeMorphTargetManager(o);\r\n }\r\n for (const o of this.geometries) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.removeGeometry(o);\r\n }\r\n for (const o of this.transformNodes) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.removeTransformNode(o);\r\n }\r\n for (const o of this.actionManagers) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.removeActionManager(o);\r\n }\r\n for (const o of this.textures) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.removeTexture(o);\r\n }\r\n for (const o of this.reflectionProbes) {\r\n if (predicate && !predicate(o)) {\r\n continue;\r\n }\r\n this.scene.removeReflectionProbe(o);\r\n }\r\n }\r\n\r\n /**\r\n * Disposes all the assets in the container\r\n */\r\n public dispose() {\r\n const cameras = this.cameras.slice(0);\r\n for (const camera of cameras) {\r\n camera.dispose();\r\n }\r\n this.cameras.length = 0;\r\n\r\n const lights = this.lights.slice(0);\r\n for (const light of lights) {\r\n light.dispose();\r\n }\r\n this.lights.length = 0;\r\n\r\n const meshes = this.meshes.slice(0);\r\n for (const mesh of meshes) {\r\n mesh.dispose();\r\n }\r\n this.meshes.length = 0;\r\n\r\n const skeletons = this.skeletons.slice(0);\r\n for (const skeleton of skeletons) {\r\n skeleton.dispose();\r\n }\r\n this.skeletons.length = 0;\r\n\r\n const animationGroups = this.animationGroups.slice(0);\r\n for (const animationGroup of animationGroups) {\r\n animationGroup.dispose();\r\n }\r\n this.animationGroups.length = 0;\r\n\r\n const multiMaterials = this.multiMaterials.slice(0);\r\n for (const multiMaterial of multiMaterials) {\r\n multiMaterial.dispose();\r\n }\r\n this.multiMaterials.length = 0;\r\n\r\n const materials = this.materials.slice(0);\r\n for (const material of materials) {\r\n material.dispose();\r\n }\r\n this.materials.length = 0;\r\n\r\n const geometries = this.geometries.slice(0);\r\n for (const geometry of geometries) {\r\n geometry.dispose();\r\n }\r\n this.geometries.length = 0;\r\n\r\n const transformNodes = this.transformNodes.slice(0);\r\n for (const transformNode of transformNodes) {\r\n transformNode.dispose();\r\n }\r\n this.transformNodes.length = 0;\r\n\r\n const actionManagers = this.actionManagers.slice(0);\r\n for (const actionManager of actionManagers) {\r\n actionManager.dispose();\r\n }\r\n this.actionManagers.length = 0;\r\n\r\n const textures = this.textures.slice(0);\r\n for (const texture of textures) {\r\n texture.dispose();\r\n }\r\n this.textures.length = 0;\r\n\r\n const reflectionProbes = this.reflectionProbes.slice(0);\r\n for (const reflectionProbe of reflectionProbes) {\r\n reflectionProbe.dispose();\r\n }\r\n this.reflectionProbes.length = 0;\r\n\r\n const morphTargetManagers = this.morphTargetManagers.slice(0);\r\n for (const morphTargetManager of morphTargetManagers) {\r\n morphTargetManager.dispose();\r\n }\r\n this.morphTargetManagers.length = 0;\r\n\r\n if (this.environmentTexture) {\r\n this.environmentTexture.dispose();\r\n this.environmentTexture = null;\r\n }\r\n\r\n for (const component of this.scene._serializableComponents) {\r\n component.removeFromContainer(this, true);\r\n }\r\n\r\n if (this._onContextRestoredObserver) {\r\n this.scene.getEngine().onContextRestoredObservable.remove(this._onContextRestoredObserver);\r\n this._onContextRestoredObserver = null;\r\n }\r\n }\r\n\r\n private _moveAssets<T>(sourceAssets: T[], targetAssets: T[], keepAssets: T[]): void {\r\n if (!sourceAssets || !targetAssets) {\r\n return;\r\n }\r\n\r\n for (const asset of sourceAssets) {\r\n let move = true;\r\n if (keepAssets) {\r\n for (const keepAsset of keepAssets) {\r\n if (asset === keepAsset) {\r\n move = false;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (move) {\r\n targetAssets.push(asset);\r\n (asset as any)._parentContainer = this;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Removes all the assets contained in the scene and adds them to the container.\r\n * @param keepAssets Set of assets to keep in the scene. (default: empty)\r\n */\r\n public moveAllFromScene(keepAssets?: KeepAssets): void {\r\n this._wasAddedToScene = false;\r\n\r\n if (keepAssets === undefined) {\r\n keepAssets = new KeepAssets();\r\n }\r\n\r\n for (const key in this) {\r\n if (Object.prototype.hasOwnProperty.call(this, key)) {\r\n (<any>this)[key] = (<any>this)[key] || (key === \"_environmentTexture\" ? null : []);\r\n this._moveAssets((<any>this.scene)[key], (<any>this)[key], (<any>keepAssets)[key]);\r\n }\r\n }\r\n\r\n this.environmentTexture = this.scene.environmentTexture;\r\n\r\n this.removeAllFromScene();\r\n }\r\n\r\n /**\r\n * Adds all meshes in the asset container to a root mesh that can be used to position all the contained meshes. The root mesh is then added to the front of the meshes in the assetContainer.\r\n * @returns the root mesh\r\n */\r\n public createRootMesh() {\r\n const rootMesh = new Mesh(\"assetContainerRootMesh\", this.scene);\r\n for (const m of this.meshes) {\r\n if (!m.parent) {\r\n rootMesh.addChild(m);\r\n }\r\n }\r\n this.meshes.unshift(rootMesh);\r\n return rootMesh;\r\n }\r\n\r\n /**\r\n * Merge animations (direct and animation groups) from this asset container into a scene\r\n * @param scene is the instance of BABYLON.Scene to append to (default: last created scene)\r\n * @param animatables set of animatables to retarget to a node from the scene\r\n * @param targetConverter defines a function used to convert animation targets from the asset container to the scene (default: search node by name)\r\n * @returns an array of the new AnimationGroup added to the scene (empty array if none)\r\n */\r\n public mergeAnimationsTo(\r\n scene: Nullable<Scene> = EngineStore.LastCreatedScene,\r\n animatables: Animatable[],\r\n targetConverter: Nullable<(target: any) => Nullable<Node>> = null\r\n ): AnimationGroup[] {\r\n if (!scene) {\r\n Logger.Error(\"No scene available to merge animations to\");\r\n return [];\r\n }\r\n\r\n const _targetConverter = targetConverter\r\n ? targetConverter\r\n : (target: any) => {\r\n let node = null;\r\n\r\n const targetProperty = target.animations.length ? target.animations[0].targetProperty : \"\";\r\n /*\r\n BabylonJS adds special naming to targets that are children of nodes.\r\n This name attempts to remove that special naming to get the parent nodes name in case the target\r\n can't be found in the node tree\r\n\r\n Ex: Torso_primitive0 likely points to a Mesh primitive. We take away primitive0 and are left with \"Torso\" which is the name\r\n of the primitive's parent.\r\n */\r\n const name = target.name.split(\".\").join(\"\").split(\"_primitive\")[0];\r\n\r\n switch (targetProperty) {\r\n case \"position\":\r\n case \"rotationQuaternion\":\r\n node = scene.getTransformNodeByName(target.name) || scene.getTransformNodeByName(name);\r\n break;\r\n case \"influence\":\r\n node = scene.getMorphTargetByName(target.name) || scene.getMorphTargetByName(name);\r\n break;\r\n default:\r\n node = scene.getNodeByName(target.name) || scene.getNodeByName(name);\r\n }\r\n\r\n return node;\r\n };\r\n\r\n // Copy new node animations\r\n const nodesInAC = this.getNodes();\r\n for (const nodeInAC of nodesInAC) {\r\n const nodeInScene = _targetConverter(nodeInAC);\r\n if (nodeInScene !== null) {\r\n // Remove old animations with same target property as a new one\r\n for (const animationInAC of nodeInAC.animations) {\r\n // Doing treatment on an array for safety measure\r\n const animationsWithSameProperty = nodeInScene.animations.filter((animationInScene) => {\r\n return animationInScene.targetProperty === animationInAC.targetProperty;\r\n });\r\n for (const animationWithSameProperty of animationsWithSameProperty) {\r\n const index = nodeInScene.animations.indexOf(animationWithSameProperty, 0);\r\n if (index > -1) {\r\n nodeInScene.animations.splice(index, 1);\r\n }\r\n }\r\n }\r\n\r\n // Append new animations\r\n nodeInScene.animations = nodeInScene.animations.concat(nodeInAC.animations);\r\n }\r\n }\r\n\r\n const newAnimationGroups: AnimationGroup[] = [];\r\n\r\n // Copy new animation groups\r\n const animationGroups = this.animationGroups.slice();\r\n for (const animationGroupInAC of animationGroups) {\r\n // Clone the animation group and all its animatables\r\n newAnimationGroups.push(animationGroupInAC.clone(animationGroupInAC.name, _targetConverter));\r\n\r\n // Remove animatables related to the asset container\r\n for (const animatable of animationGroupInAC.animatables) {\r\n animatable.stop();\r\n }\r\n }\r\n\r\n // Retarget animatables\r\n for (const animatable of animatables) {\r\n const target = _targetConverter(animatable.target);\r\n\r\n if (target) {\r\n // Clone the animatable and retarget it\r\n scene.beginAnimation(\r\n target,\r\n animatable.fromFrame,\r\n animatable.toFrame,\r\n animatable.loopAnimation,\r\n animatable.speedRatio,\r\n animatable.onAnimationEnd ? animatable.onAnimationEnd : undefined,\r\n undefined,\r\n true,\r\n undefined,\r\n animatable.onAnimationLoop ? animatable.onAnimationLoop : undefined\r\n );\r\n\r\n // Stop animation for the target in the asset container\r\n scene.stopAnimation(animatable.target);\r\n }\r\n }\r\n\r\n return newAnimationGroups;\r\n }\r\n\r\n /**\r\n * @since 6.15.0\r\n * This method checks for any node that has no parent\r\n * and is not in the rootNodes array, and adds the node\r\n * there, if so.\r\n */\r\n public populateRootNodes() {\r\n this.rootNodes.length = 0;\r\n for (const m of this.meshes) {\r\n if (!m.parent && this.rootNodes.indexOf(m) === -1) {\r\n this.rootNodes.push(m);\r\n }\r\n }\r\n for (const t of this.transformNodes) {\r\n if (!t.parent && this.rootNodes.indexOf(t) === -1) {\r\n this.rootNodes.push(t);\r\n }\r\n }\r\n for (const l of this.lights) {\r\n if (!l.parent && this.rootNodes.indexOf(l) === -1) {\r\n this.rootNodes.push(l);\r\n }\r\n }\r\n for (const c of this.cameras) {\r\n if (!c.parent && this.rootNodes.indexOf(c) === -1) {\r\n this.rootNodes.push(c);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @since 6.26.0\r\n * Given a root asset, this method will traverse its hierarchy and add it, its children and any materials/skeletons/animation groups to the container.\r\n * @param root root node\r\n */\r\n public addAllAssetsToContainer(root: Node) {\r\n if (!root) {\r\n return;\r\n }\r\n\r\n const nodesToVisit: Node[] = [];\r\n const visitedNodes = new Set<Node>();\r\n\r\n nodesToVisit.push(root);\r\n\r\n while (nodesToVisit.length > 0) {\r\n const nodeToVisit = nodesToVisit.pop()!;\r\n\r\n if (nodeToVisit instanceof Mesh) {\r\n if (nodeToVisit.geometry && this.geometries.indexOf(nodeToVisit.geometry) === -1) {\r\n this.geometries.push(nodeToVisit.geometry);\r\n }\r\n this.meshes.push(nodeToVisit);\r\n } else if (nodeToVisit instanceof InstancedMesh) {\r\n this.meshes.push(nodeToVisit);\r\n } else if (nodeToVisit instanceof TransformNode) {\r\n this.transformNodes.push(nodeToVisit);\r\n } else if (nodeToVisit instanceof Light) {\r\n this.lights.push(nodeToVisit);\r\n } else if (nodeToVisit instanceof Camera) {\r\n this.cameras.push(nodeToVisit);\r\n }\r\n\r\n if (nodeToVisit instanceof AbstractMesh) {\r\n if (nodeToVisit.material && this.materials.indexOf(nodeToVisit.material) === -1) {\r\n this.materials.push(nodeToVisit.material);\r\n for (const texture of nodeToVisit.material.getActiveTextures()) {\r\n if (this.textures.indexOf(texture) === -1) {\r\n this.textures.push(texture);\r\n }\r\n }\r\n }\r\n\r\n if (nodeToVisit.skeleton && this.skeletons.indexOf(nodeToVisit.skeleton) === -1) {\r\n this.skeletons.push(nodeToVisit.skeleton);\r\n }\r\n\r\n if (nodeToVisit.morphTargetManager && this.morphTargetManagers.indexOf(nodeToVisit.morphTargetManager) === -1) {\r\n this.morphTargetManagers.push(nodeToVisit.morphTargetManager);\r\n }\r\n }\r\n\r\n for (const child of nodeToVisit.getChildren()) {\r\n if (!visitedNodes.has(child)) {\r\n nodesToVisit.push(child);\r\n }\r\n }\r\n\r\n visitedNodes.add(nodeToVisit);\r\n }\r\n\r\n this.populateRootNodes();\r\n }\r\n\r\n /**\r\n * Get from a list of objects by tags\r\n * @param list the list of objects to use\r\n * @param tagsQuery the query to use\r\n * @param filter a predicate to filter for tags\r\n * @returns\r\n */\r\n private _getByTags<T>(list: T[], tagsQuery: string, filter?: (item: T) => boolean): T[] {\r\n if (tagsQuery === undefined) {\r\n // returns the complete list (could be done with Tags.MatchesQuery but no need to have a for-loop here)\r\n return list;\r\n }\r\n\r\n const listByTags = [];\r\n\r\n for (const i in list) {\r\n const item = list[i];\r\n if (Tags && Tags.MatchesQuery(item, tagsQuery) && (!filter || filter(item))) {\r\n listByTags.push(item);\r\n }\r\n }\r\n\r\n return listByTags;\r\n }\r\n\r\n /**\r\n * Get a list of meshes by tags\r\n * @param tagsQuery defines the tags query to use\r\n * @param filter defines a predicate used to filter results\r\n * @returns an array of Mesh\r\n */\r\n public getMeshesByTags(tagsQuery: string, filter?: (mesh: AbstractMesh) => boolean): AbstractMesh[] {\r\n return this._getByTags(this.meshes, tagsQuery, filter);\r\n }\r\n\r\n /**\r\n * Get a list of cameras by tags\r\n * @param tagsQuery defines the tags query to use\r\n * @param filter defines a predicate used to filter results\r\n * @returns an array of Camera\r\n */\r\n public getCamerasByTags(tagsQuery: string, filter?: (camera: Camera) => boolean): Camera[] {\r\n return this._getByTags(this.cameras, tagsQuery, filter);\r\n }\r\n\r\n /**\r\n * Get a list of lights by tags\r\n * @param tagsQuery defines the tags query to use\r\n * @param filter defines a predicate used to filter results\r\n * @returns an array of Light\r\n */\r\n public getLightsByTags(tagsQuery: string, filter?: (light: Light) => boolean): Light[] {\r\n return this._getByTags(this.lights, tagsQuery, filter);\r\n }\r\n\r\n /**\r\n * Get a list of materials by tags\r\n * @param tagsQuery defines the tags query to use\r\n * @param filter defines a predicate used to filter results\r\n * @returns an array of Material\r\n */\r\n public getMaterialsByTags(tagsQuery: string, filter?: (material: Material) => boolean): Material[] {\r\n return this._getByTags(this.materials, tagsQuery, filter).concat(this._getByTags(this.multiMaterials, tagsQuery, filter));\r\n }\r\n\r\n /**\r\n * Get a list of transform nodes by tags\r\n * @param tagsQuery defines the tags query to use\r\n * @param filter defines a predicate used to filter results\r\n * @returns an array of TransformNode\r\n */\r\n public getTransformNodesByTags(tagsQuery: string, filter?: (transform: TransformNode) => boolean): TransformNode[] {\r\n return this._getByTags(this.transformNodes, tagsQuery, filter);\r\n }\r\n}\r\n"]}
|
package/package.json
CHANGED
package/sceneComponent.d.ts
CHANGED
package/sceneComponent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sceneComponent.js","sourceRoot":"","sources":["../../../dev/core/src/sceneComponent.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Scene } from \"./scene\";\r\nimport type { SmartArrayNoDuplicate } from \"./Misc/smartArray\";\r\nimport type { Nullable } from \"./types\";\r\nimport type { PickingInfo } from \"./Collisions/pickingInfo\";\r\nimport type { IPointerEvent } from \"./Events/deviceInputEvents\";\r\n\r\nimport type { Mesh } from \"./Meshes/mesh\";\r\nimport type { Effect } from \"./Materials/effect\";\r\nimport type { Camera } from \"./Cameras/camera\";\r\nimport type { AbstractMesh } from \"./Meshes/abstractMesh\";\r\nimport type { SubMesh } from \"./Meshes/subMesh\";\r\nimport type { RenderTargetTexture } from \"./Materials/Textures/renderTargetTexture\";\r\nimport type { IAssetContainer } from \"./IAssetContainer\";\r\n\r\n/**\r\n * Groups all the scene component constants in one place to ease maintenance.\r\n * @internal\r\n */\r\nexport class SceneComponentConstants {\r\n public static readonly NAME_EFFECTLAYER = \"EffectLayer\";\r\n public static readonly NAME_LAYER = \"Layer\";\r\n public static readonly NAME_LENSFLARESYSTEM = \"LensFlareSystem\";\r\n public static readonly NAME_BOUNDINGBOXRENDERER = \"BoundingBoxRenderer\";\r\n public static readonly NAME_PARTICLESYSTEM = \"ParticleSystem\";\r\n public static readonly NAME_GAMEPAD = \"Gamepad\";\r\n public static readonly NAME_SIMPLIFICATIONQUEUE = \"SimplificationQueue\";\r\n public static readonly NAME_GEOMETRYBUFFERRENDERER = \"GeometryBufferRenderer\";\r\n public static readonly NAME_PREPASSRENDERER = \"PrePassRenderer\";\r\n public static readonly NAME_DEPTHRENDERER = \"DepthRenderer\";\r\n public static readonly NAME_DEPTHPEELINGRENDERER = \"DepthPeelingRenderer\";\r\n public static readonly NAME_POSTPROCESSRENDERPIPELINEMANAGER = \"PostProcessRenderPipelineManager\";\r\n public static readonly NAME_SPRITE = \"Sprite\";\r\n public static readonly NAME_SUBSURFACE = \"SubSurface\";\r\n public static readonly NAME_OUTLINERENDERER = \"Outline\";\r\n public static readonly NAME_PROCEDURALTEXTURE = \"ProceduralTexture\";\r\n public static readonly NAME_SHADOWGENERATOR = \"ShadowGenerator\";\r\n public static readonly NAME_OCTREE = \"Octree\";\r\n public static readonly NAME_PHYSICSENGINE = \"PhysicsEngine\";\r\n public static readonly NAME_AUDIO = \"Audio\";\r\n public static readonly NAME_FLUIDRENDERER = \"FluidRenderer\";\r\n public static readonly NAME_IBLCDFGENERATOR = \"iblCDFGenerator\";\r\n\r\n public static readonly STEP_ISREADYFORMESH_EFFECTLAYER = 0;\r\n\r\n public static readonly STEP_BEFOREEVALUATEACTIVEMESH_BOUNDINGBOXRENDERER = 0;\r\n\r\n public static readonly STEP_EVALUATESUBMESH_BOUNDINGBOXRENDERER = 0;\r\n\r\n public static readonly STEP_PREACTIVEMESH_BOUNDINGBOXRENDERER = 0;\r\n\r\n public static readonly STEP_CAMERADRAWRENDERTARGET_EFFECTLAYER = 1;\r\n\r\n public static readonly STEP_BEFORECAMERADRAW_PREPASS = 0;\r\n public static readonly STEP_BEFORECAMERADRAW_EFFECTLAYER = 1;\r\n public static readonly STEP_BEFORECAMERADRAW_LAYER = 2;\r\n\r\n public static readonly STEP_BEFORERENDERTARGETDRAW_PREPASS = 0;\r\n public static readonly STEP_BEFORERENDERTARGETDRAW_LAYER = 1;\r\n\r\n public static readonly STEP_BEFORERENDERINGMESH_PREPASS = 0;\r\n public static readonly STEP_BEFORERENDERINGMESH_OUTLINE = 1;\r\n\r\n public static readonly STEP_AFTERRENDERINGMESH_PREPASS = 0;\r\n public static readonly STEP_AFTERRENDERINGMESH_OUTLINE = 1;\r\n\r\n public static readonly STEP_AFTERRENDERINGGROUPDRAW_EFFECTLAYER_DRAW = 0;\r\n public static readonly STEP_AFTERRENDERINGGROUPDRAW_BOUNDINGBOXRENDERER = 1;\r\n\r\n public static readonly STEP_BEFORECAMERAUPDATE_SIMPLIFICATIONQUEUE = 0;\r\n\r\n public static readonly STEP_BEFORECLEAR_PROCEDURALTEXTURE = 0;\r\n public static readonly STEP_BEFORECLEAR_PREPASS = 1;\r\n\r\n public static readonly STEP_BEFORERENDERTARGETCLEAR_PREPASS = 0;\r\n\r\n public static readonly STEP_AFTERRENDERTARGETDRAW_PREPASS = 0;\r\n public static readonly STEP_AFTERRENDERTARGETDRAW_LAYER = 1;\r\n\r\n public static readonly STEP_AFTERCAMERADRAW_PREPASS = 0;\r\n public static readonly STEP_AFTERCAMERADRAW_EFFECTLAYER = 1;\r\n public static readonly STEP_AFTERCAMERADRAW_LENSFLARESYSTEM = 2;\r\n public static readonly STEP_AFTERCAMERADRAW_EFFECTLAYER_DRAW = 3;\r\n public static readonly STEP_AFTERCAMERADRAW_LAYER = 4;\r\n public static readonly STEP_AFTERCAMERADRAW_FLUIDRENDERER = 5;\r\n\r\n public static readonly STEP_AFTERCAMERAPOSTPROCESS_LAYER = 0;\r\n\r\n public static readonly STEP_AFTERRENDERTARGETPOSTPROCESS_LAYER = 0;\r\n\r\n public static readonly STEP_AFTERRENDER_AUDIO = 0;\r\n\r\n public static readonly STEP_GATHERRENDERTARGETS_DEPTHRENDERER = 0;\r\n public static readonly STEP_GATHERRENDERTARGETS_GEOMETRYBUFFERRENDERER = 1;\r\n public static readonly STEP_GATHERRENDERTARGETS_SHADOWGENERATOR = 2;\r\n public static readonly STEP_GATHERRENDERTARGETS_POSTPROCESSRENDERPIPELINEMANAGER = 3;\r\n\r\n public static readonly STEP_GATHERACTIVECAMERARENDERTARGETS_DEPTHRENDERER = 0;\r\n public static readonly STEP_GATHERACTIVECAMERARENDERTARGETS_FLUIDRENDERER = 1;\r\n\r\n public static readonly STEP_POINTERMOVE_SPRITE = 0;\r\n public static readonly STEP_POINTERDOWN_SPRITE = 0;\r\n public static readonly STEP_POINTERUP_SPRITE = 0;\r\n}\r\n\r\n/**\r\n * This represents a scene component.\r\n *\r\n * This is used to decouple the dependency the scene is having on the different workloads like\r\n * layers, post processes...\r\n */\r\nexport interface ISceneComponent {\r\n /**\r\n * The name of the component. Each component must have a unique name.\r\n */\r\n name: string;\r\n\r\n /**\r\n * The scene the component belongs to.\r\n */\r\n scene: Scene;\r\n\r\n /**\r\n * Register the component to one instance of a scene.\r\n */\r\n register(): void;\r\n\r\n /**\r\n * Rebuilds the elements related to this component in case of\r\n * context lost for instance.\r\n */\r\n rebuild(): void;\r\n\r\n /**\r\n * Disposes the component and the associated ressources.\r\n */\r\n dispose(): void;\r\n}\r\n\r\n/**\r\n * This represents a SERIALIZABLE scene component.\r\n *\r\n * This extends Scene Component to add Serialization methods on top.\r\n */\r\nexport interface ISceneSerializableComponent extends ISceneComponent {\r\n /**\r\n * Adds all the elements from the container to the scene\r\n * @param container the container holding the elements\r\n */\r\n addFromContainer(container: IAssetContainer): void;\r\n\r\n /**\r\n * Removes all the elements in the container from the scene\r\n * @param container contains the elements to remove\r\n * @param dispose if the removed element should be disposed (default: false)\r\n */\r\n removeFromContainer(container: IAssetContainer, dispose?: boolean): void;\r\n\r\n /**\r\n * Serializes the component data to the specified json object\r\n * @param serializationObject The object to serialize to\r\n */\r\n serialize(serializationObject: any): void;\r\n}\r\n\r\n/**\r\n * Strong typing of a Mesh related stage step action\r\n */\r\nexport type MeshStageAction = (mesh: AbstractMesh, hardwareInstancedRendering: boolean) => boolean;\r\n\r\n/**\r\n * Strong typing of a Evaluate Sub Mesh related stage step action\r\n */\r\nexport type EvaluateSubMeshStageAction = (mesh: AbstractMesh, subMesh: SubMesh) => void;\r\n\r\n/**\r\n * Strong typing of a pre active Mesh related stage step action\r\n */\r\nexport type PreActiveMeshStageAction = (mesh: AbstractMesh) => void;\r\n\r\n/**\r\n * Strong typing of a Camera related stage step action\r\n */\r\nexport type CameraStageAction = (camera: Camera) => void;\r\n\r\n/**\r\n * Strong typing of a Camera Frame buffer related stage step action\r\n */\r\nexport type CameraStageFrameBufferAction = (camera: Camera) => boolean;\r\n\r\n/**\r\n * Strong typing of a Render Target related stage step action\r\n */\r\nexport type RenderTargetStageAction = (renderTarget: RenderTargetTexture, faceIndex?: number, layer?: number) => void;\r\n\r\n/**\r\n * Strong typing of a RenderingGroup related stage step action\r\n */\r\nexport type RenderingGroupStageAction = (renderingGroupId: number) => void;\r\n\r\n/**\r\n * Strong typing of a Mesh Render related stage step action\r\n */\r\nexport type RenderingMeshStageAction = (mesh: Mesh, subMesh: SubMesh, batch: any, effect: Nullable<Effect>) => void;\r\n\r\n/**\r\n * Strong typing of a simple stage step action\r\n */\r\nexport type SimpleStageAction = () => void;\r\n\r\n/**\r\n * Strong typing of a render target action.\r\n */\r\nexport type RenderTargetsStageAction = (renderTargets: SmartArrayNoDuplicate<RenderTargetTexture>) => void;\r\n\r\n/**\r\n * Strong typing of a pointer move action.\r\n */\r\nexport type PointerMoveStageAction = (\r\n unTranslatedPointerX: number,\r\n unTranslatedPointerY: number,\r\n pickResult: Nullable<PickingInfo>,\r\n isMeshPicked: boolean,\r\n element: Nullable<HTMLElement>\r\n) => Nullable<PickingInfo>;\r\n\r\n/**\r\n * Strong typing of a pointer up/down action.\r\n */\r\nexport type PointerUpDownStageAction = (\r\n unTranslatedPointerX: number,\r\n unTranslatedPointerY: number,\r\n pickResult: Nullable<PickingInfo>,\r\n evt: IPointerEvent,\r\n doubleClick: boolean\r\n) => Nullable<PickingInfo>;\r\n\r\n/**\r\n * Representation of a stage in the scene (Basically a list of ordered steps)\r\n * @internal\r\n */\r\nexport class Stage<T extends Function> extends Array<{ index: number; component: ISceneComponent; action: T }> {\r\n /**\r\n * Hide ctor from the rest of the world.\r\n * @param items The items to add.\r\n */\r\n private constructor(items?: { index: number; component: ISceneComponent; action: T }[]) {\r\n super(...(<any>items));\r\n }\r\n\r\n /**\r\n * Creates a new Stage.\r\n * @returns A new instance of a Stage\r\n */\r\n static Create<T extends Function>(): Stage<T> {\r\n return Object.create(Stage.prototype) as Stage<T>;\r\n }\r\n\r\n /**\r\n * Registers a step in an ordered way in the targeted stage.\r\n * @param index Defines the position to register the step in\r\n * @param component Defines the component attached to the step\r\n * @param action Defines the action to launch during the step\r\n */\r\n public registerStep(index: number, component: ISceneComponent, action: T): void {\r\n let i = 0;\r\n let maxIndex = Number.MAX_VALUE;\r\n for (; i < this.length; i++) {\r\n const step = this[i];\r\n maxIndex = step.index;\r\n if (index < maxIndex) {\r\n break;\r\n }\r\n }\r\n this.splice(i, 0, { index, component, action: action.bind(component) });\r\n }\r\n\r\n /**\r\n * Clears all the steps from the stage.\r\n */\r\n public clear(): void {\r\n this.length = 0;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"sceneComponent.js","sourceRoot":"","sources":["../../../dev/core/src/sceneComponent.ts"],"names":[],"mappings":"AAcA;;;GAGG;AACH,MAAM,OAAO,uBAAuB;;AACT,wCAAgB,GAAG,aAAa,CAAC;AACjC,kCAAU,GAAG,OAAO,CAAC;AACrB,4CAAoB,GAAG,iBAAiB,CAAC;AACzC,gDAAwB,GAAG,qBAAqB,CAAC;AACjD,2CAAmB,GAAG,gBAAgB,CAAC;AACvC,oCAAY,GAAG,SAAS,CAAC;AACzB,gDAAwB,GAAG,qBAAqB,CAAC;AACjD,mDAA2B,GAAG,wBAAwB,CAAC;AACvD,4CAAoB,GAAG,iBAAiB,CAAC;AACzC,0CAAkB,GAAG,eAAe,CAAC;AACrC,iDAAyB,GAAG,sBAAsB,CAAC;AACnD,6DAAqC,GAAG,kCAAkC,CAAC;AAC3E,mCAAW,GAAG,QAAQ,CAAC;AACvB,uCAAe,GAAG,YAAY,CAAC;AAC/B,4CAAoB,GAAG,SAAS,CAAC;AACjC,8CAAsB,GAAG,mBAAmB,CAAC;AAC7C,4CAAoB,GAAG,iBAAiB,CAAC;AACzC,mCAAW,GAAG,QAAQ,CAAC;AACvB,0CAAkB,GAAG,eAAe,CAAC;AACrC,kCAAU,GAAG,OAAO,CAAC;AACrB,0CAAkB,GAAG,eAAe,CAAC;AACrC,4CAAoB,GAAG,iBAAiB,CAAC;AAEzC,uDAA+B,GAAG,CAAC,CAAC;AAEpC,yEAAiD,GAAG,CAAC,CAAC;AAEtD,gEAAwC,GAAG,CAAC,CAAC;AAE7C,8DAAsC,GAAG,CAAC,CAAC;AAE3C,+DAAuC,GAAG,CAAC,CAAC;AAE5C,qDAA6B,GAAG,CAAC,CAAC;AAClC,yDAAiC,GAAG,CAAC,CAAC;AACtC,mDAA2B,GAAG,CAAC,CAAC;AAEhC,2DAAmC,GAAG,CAAC,CAAC;AACxC,yDAAiC,GAAG,CAAC,CAAC;AAEtC,wDAAgC,GAAG,CAAC,CAAC;AACrC,wDAAgC,GAAG,CAAC,CAAC;AAErC,uDAA+B,GAAG,CAAC,CAAC;AACpC,uDAA+B,GAAG,CAAC,CAAC;AAEpC,qEAA6C,GAAG,CAAC,CAAC;AAClD,wEAAgD,GAAG,CAAC,CAAC;AAErD,mEAA2C,GAAG,CAAC,CAAC;AAEhD,0DAAkC,GAAG,CAAC,CAAC;AACvC,gDAAwB,GAAG,CAAC,CAAC;AAE7B,4DAAoC,GAAG,CAAC,CAAC;AAEzC,0DAAkC,GAAG,CAAC,CAAC;AACvC,wDAAgC,GAAG,CAAC,CAAC;AAErC,oDAA4B,GAAG,CAAC,CAAC;AACjC,wDAAgC,GAAG,CAAC,CAAC;AACrC,4DAAoC,GAAG,CAAC,CAAC;AACzC,6DAAqC,GAAG,CAAC,CAAC;AAC1C,kDAA0B,GAAG,CAAC,CAAC;AAC/B,0DAAkC,GAAG,CAAC,CAAC;AAEvC,yDAAiC,GAAG,CAAC,CAAC;AAEtC,+DAAuC,GAAG,CAAC,CAAC;AAE5C,8CAAsB,GAAG,CAAC,CAAC;AAE3B,8DAAsC,GAAG,CAAC,CAAC;AAC3C,uEAA+C,GAAG,CAAC,CAAC;AACpD,gEAAwC,GAAG,CAAC,CAAC;AAC7C,iFAAyD,GAAG,CAAC,CAAC;AAE9D,0EAAkD,GAAG,CAAC,CAAC;AACvD,0EAAkD,GAAG,CAAC,CAAC;AAEvD,+CAAuB,GAAG,CAAC,CAAC;AAC5B,+CAAuB,GAAG,CAAC,CAAC;AAC5B,6CAAqB,GAAG,CAAC,CAAC;AAuIrD;;;GAGG;AACH,MAAM,OAAO,KAA0B,SAAQ,KAA+D;IAC1G;;;OAGG;IACH,YAAoB,KAAkE;QAClF,KAAK,CAAC,GAAS,KAAM,CAAC,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,MAAM;QACT,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAa,CAAC;IACtD,CAAC;IAED;;;;;OAKG;IACI,YAAY,CAAC,KAAa,EAAE,SAA0B,EAAE,MAAS;QACpE,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAI,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;QAChC,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACrB,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;YACtB,IAAI,KAAK,GAAG,QAAQ,EAAE,CAAC;gBACnB,MAAM;YACV,CAAC;QACL,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED;;OAEG;IACI,KAAK;QACR,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IACpB,CAAC;CACJ","sourcesContent":["import type { Scene } from \"./scene\";\r\nimport type { SmartArrayNoDuplicate } from \"./Misc/smartArray\";\r\nimport type { Nullable } from \"./types\";\r\nimport type { PickingInfo } from \"./Collisions/pickingInfo\";\r\nimport type { IPointerEvent } from \"./Events/deviceInputEvents\";\r\n\r\nimport type { Mesh } from \"./Meshes/mesh\";\r\nimport type { Effect } from \"./Materials/effect\";\r\nimport type { Camera } from \"./Cameras/camera\";\r\nimport type { AbstractMesh } from \"./Meshes/abstractMesh\";\r\nimport type { SubMesh } from \"./Meshes/subMesh\";\r\nimport type { RenderTargetTexture } from \"./Materials/Textures/renderTargetTexture\";\r\nimport type { IAssetContainer } from \"./IAssetContainer\";\r\n\r\n/**\r\n * Groups all the scene component constants in one place to ease maintenance.\r\n * @internal\r\n */\r\nexport class SceneComponentConstants {\r\n public static readonly NAME_EFFECTLAYER = \"EffectLayer\";\r\n public static readonly NAME_LAYER = \"Layer\";\r\n public static readonly NAME_LENSFLARESYSTEM = \"LensFlareSystem\";\r\n public static readonly NAME_BOUNDINGBOXRENDERER = \"BoundingBoxRenderer\";\r\n public static readonly NAME_PARTICLESYSTEM = \"ParticleSystem\";\r\n public static readonly NAME_GAMEPAD = \"Gamepad\";\r\n public static readonly NAME_SIMPLIFICATIONQUEUE = \"SimplificationQueue\";\r\n public static readonly NAME_GEOMETRYBUFFERRENDERER = \"GeometryBufferRenderer\";\r\n public static readonly NAME_PREPASSRENDERER = \"PrePassRenderer\";\r\n public static readonly NAME_DEPTHRENDERER = \"DepthRenderer\";\r\n public static readonly NAME_DEPTHPEELINGRENDERER = \"DepthPeelingRenderer\";\r\n public static readonly NAME_POSTPROCESSRENDERPIPELINEMANAGER = \"PostProcessRenderPipelineManager\";\r\n public static readonly NAME_SPRITE = \"Sprite\";\r\n public static readonly NAME_SUBSURFACE = \"SubSurface\";\r\n public static readonly NAME_OUTLINERENDERER = \"Outline\";\r\n public static readonly NAME_PROCEDURALTEXTURE = \"ProceduralTexture\";\r\n public static readonly NAME_SHADOWGENERATOR = \"ShadowGenerator\";\r\n public static readonly NAME_OCTREE = \"Octree\";\r\n public static readonly NAME_PHYSICSENGINE = \"PhysicsEngine\";\r\n public static readonly NAME_AUDIO = \"Audio\";\r\n public static readonly NAME_FLUIDRENDERER = \"FluidRenderer\";\r\n public static readonly NAME_IBLCDFGENERATOR = \"iblCDFGenerator\";\r\n\r\n public static readonly STEP_ISREADYFORMESH_EFFECTLAYER = 0;\r\n\r\n public static readonly STEP_BEFOREEVALUATEACTIVEMESH_BOUNDINGBOXRENDERER = 0;\r\n\r\n public static readonly STEP_EVALUATESUBMESH_BOUNDINGBOXRENDERER = 0;\r\n\r\n public static readonly STEP_PREACTIVEMESH_BOUNDINGBOXRENDERER = 0;\r\n\r\n public static readonly STEP_CAMERADRAWRENDERTARGET_EFFECTLAYER = 1;\r\n\r\n public static readonly STEP_BEFORECAMERADRAW_PREPASS = 0;\r\n public static readonly STEP_BEFORECAMERADRAW_EFFECTLAYER = 1;\r\n public static readonly STEP_BEFORECAMERADRAW_LAYER = 2;\r\n\r\n public static readonly STEP_BEFORERENDERTARGETDRAW_PREPASS = 0;\r\n public static readonly STEP_BEFORERENDERTARGETDRAW_LAYER = 1;\r\n\r\n public static readonly STEP_BEFORERENDERINGMESH_PREPASS = 0;\r\n public static readonly STEP_BEFORERENDERINGMESH_OUTLINE = 1;\r\n\r\n public static readonly STEP_AFTERRENDERINGMESH_PREPASS = 0;\r\n public static readonly STEP_AFTERRENDERINGMESH_OUTLINE = 1;\r\n\r\n public static readonly STEP_AFTERRENDERINGGROUPDRAW_EFFECTLAYER_DRAW = 0;\r\n public static readonly STEP_AFTERRENDERINGGROUPDRAW_BOUNDINGBOXRENDERER = 1;\r\n\r\n public static readonly STEP_BEFORECAMERAUPDATE_SIMPLIFICATIONQUEUE = 0;\r\n\r\n public static readonly STEP_BEFORECLEAR_PROCEDURALTEXTURE = 0;\r\n public static readonly STEP_BEFORECLEAR_PREPASS = 1;\r\n\r\n public static readonly STEP_BEFORERENDERTARGETCLEAR_PREPASS = 0;\r\n\r\n public static readonly STEP_AFTERRENDERTARGETDRAW_PREPASS = 0;\r\n public static readonly STEP_AFTERRENDERTARGETDRAW_LAYER = 1;\r\n\r\n public static readonly STEP_AFTERCAMERADRAW_PREPASS = 0;\r\n public static readonly STEP_AFTERCAMERADRAW_EFFECTLAYER = 1;\r\n public static readonly STEP_AFTERCAMERADRAW_LENSFLARESYSTEM = 2;\r\n public static readonly STEP_AFTERCAMERADRAW_EFFECTLAYER_DRAW = 3;\r\n public static readonly STEP_AFTERCAMERADRAW_LAYER = 4;\r\n public static readonly STEP_AFTERCAMERADRAW_FLUIDRENDERER = 5;\r\n\r\n public static readonly STEP_AFTERCAMERAPOSTPROCESS_LAYER = 0;\r\n\r\n public static readonly STEP_AFTERRENDERTARGETPOSTPROCESS_LAYER = 0;\r\n\r\n public static readonly STEP_AFTERRENDER_AUDIO = 0;\r\n\r\n public static readonly STEP_GATHERRENDERTARGETS_DEPTHRENDERER = 0;\r\n public static readonly STEP_GATHERRENDERTARGETS_GEOMETRYBUFFERRENDERER = 1;\r\n public static readonly STEP_GATHERRENDERTARGETS_SHADOWGENERATOR = 2;\r\n public static readonly STEP_GATHERRENDERTARGETS_POSTPROCESSRENDERPIPELINEMANAGER = 3;\r\n\r\n public static readonly STEP_GATHERACTIVECAMERARENDERTARGETS_DEPTHRENDERER = 0;\r\n public static readonly STEP_GATHERACTIVECAMERARENDERTARGETS_FLUIDRENDERER = 1;\r\n\r\n public static readonly STEP_POINTERMOVE_SPRITE = 0;\r\n public static readonly STEP_POINTERDOWN_SPRITE = 0;\r\n public static readonly STEP_POINTERUP_SPRITE = 0;\r\n}\r\n\r\n/**\r\n * This represents a scene component.\r\n *\r\n * This is used to decouple the dependency the scene is having on the different workloads like\r\n * layers, post processes...\r\n */\r\nexport interface ISceneComponent {\r\n /**\r\n * The name of the component. Each component must have a unique name.\r\n */\r\n name: string;\r\n\r\n /**\r\n * The scene the component belongs to.\r\n */\r\n scene: Scene;\r\n\r\n /**\r\n * Register the component to one instance of a scene.\r\n */\r\n register(): void;\r\n\r\n /**\r\n * Rebuilds the elements related to this component in case of\r\n * context lost for instance.\r\n */\r\n rebuild(): void;\r\n\r\n /**\r\n * Disposes the component and the associated resources.\r\n */\r\n dispose(): void;\r\n}\r\n\r\n/**\r\n * This represents a SERIALIZABLE scene component.\r\n *\r\n * This extends Scene Component to add Serialization methods on top.\r\n */\r\nexport interface ISceneSerializableComponent extends ISceneComponent {\r\n /**\r\n * Adds all the elements from the container to the scene\r\n * @param container the container holding the elements\r\n */\r\n addFromContainer(container: IAssetContainer): void;\r\n\r\n /**\r\n * Removes all the elements in the container from the scene\r\n * @param container contains the elements to remove\r\n * @param dispose if the removed element should be disposed (default: false)\r\n */\r\n removeFromContainer(container: IAssetContainer, dispose?: boolean): void;\r\n\r\n /**\r\n * Serializes the component data to the specified json object\r\n * @param serializationObject The object to serialize to\r\n */\r\n serialize(serializationObject: any): void;\r\n}\r\n\r\n/**\r\n * Strong typing of a Mesh related stage step action\r\n */\r\nexport type MeshStageAction = (mesh: AbstractMesh, hardwareInstancedRendering: boolean) => boolean;\r\n\r\n/**\r\n * Strong typing of a Evaluate Sub Mesh related stage step action\r\n */\r\nexport type EvaluateSubMeshStageAction = (mesh: AbstractMesh, subMesh: SubMesh) => void;\r\n\r\n/**\r\n * Strong typing of a pre active Mesh related stage step action\r\n */\r\nexport type PreActiveMeshStageAction = (mesh: AbstractMesh) => void;\r\n\r\n/**\r\n * Strong typing of a Camera related stage step action\r\n */\r\nexport type CameraStageAction = (camera: Camera) => void;\r\n\r\n/**\r\n * Strong typing of a Camera Frame buffer related stage step action\r\n */\r\nexport type CameraStageFrameBufferAction = (camera: Camera) => boolean;\r\n\r\n/**\r\n * Strong typing of a Render Target related stage step action\r\n */\r\nexport type RenderTargetStageAction = (renderTarget: RenderTargetTexture, faceIndex?: number, layer?: number) => void;\r\n\r\n/**\r\n * Strong typing of a RenderingGroup related stage step action\r\n */\r\nexport type RenderingGroupStageAction = (renderingGroupId: number) => void;\r\n\r\n/**\r\n * Strong typing of a Mesh Render related stage step action\r\n */\r\nexport type RenderingMeshStageAction = (mesh: Mesh, subMesh: SubMesh, batch: any, effect: Nullable<Effect>) => void;\r\n\r\n/**\r\n * Strong typing of a simple stage step action\r\n */\r\nexport type SimpleStageAction = () => void;\r\n\r\n/**\r\n * Strong typing of a render target action.\r\n */\r\nexport type RenderTargetsStageAction = (renderTargets: SmartArrayNoDuplicate<RenderTargetTexture>) => void;\r\n\r\n/**\r\n * Strong typing of a pointer move action.\r\n */\r\nexport type PointerMoveStageAction = (\r\n unTranslatedPointerX: number,\r\n unTranslatedPointerY: number,\r\n pickResult: Nullable<PickingInfo>,\r\n isMeshPicked: boolean,\r\n element: Nullable<HTMLElement>\r\n) => Nullable<PickingInfo>;\r\n\r\n/**\r\n * Strong typing of a pointer up/down action.\r\n */\r\nexport type PointerUpDownStageAction = (\r\n unTranslatedPointerX: number,\r\n unTranslatedPointerY: number,\r\n pickResult: Nullable<PickingInfo>,\r\n evt: IPointerEvent,\r\n doubleClick: boolean\r\n) => Nullable<PickingInfo>;\r\n\r\n/**\r\n * Representation of a stage in the scene (Basically a list of ordered steps)\r\n * @internal\r\n */\r\nexport class Stage<T extends Function> extends Array<{ index: number; component: ISceneComponent; action: T }> {\r\n /**\r\n * Hide ctor from the rest of the world.\r\n * @param items The items to add.\r\n */\r\n private constructor(items?: { index: number; component: ISceneComponent; action: T }[]) {\r\n super(...(<any>items));\r\n }\r\n\r\n /**\r\n * Creates a new Stage.\r\n * @returns A new instance of a Stage\r\n */\r\n static Create<T extends Function>(): Stage<T> {\r\n return Object.create(Stage.prototype) as Stage<T>;\r\n }\r\n\r\n /**\r\n * Registers a step in an ordered way in the targeted stage.\r\n * @param index Defines the position to register the step in\r\n * @param component Defines the component attached to the step\r\n * @param action Defines the action to launch during the step\r\n */\r\n public registerStep(index: number, component: ISceneComponent, action: T): void {\r\n let i = 0;\r\n let maxIndex = Number.MAX_VALUE;\r\n for (; i < this.length; i++) {\r\n const step = this[i];\r\n maxIndex = step.index;\r\n if (index < maxIndex) {\r\n break;\r\n }\r\n }\r\n this.splice(i, 0, { index, component, action: action.bind(component) });\r\n }\r\n\r\n /**\r\n * Clears all the steps from the stage.\r\n */\r\n public clear(): void {\r\n this.length = 0;\r\n }\r\n}\r\n"]}
|