@babylonjs/core 5.15.0 → 5.17.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.js +1 -1
- package/Animations/animatable.js.map +1 -1
- package/Animations/animation.d.ts +8 -1
- package/Animations/animation.js +8 -1
- package/Animations/animation.js.map +1 -1
- package/Animations/animationGroup.js +5 -4
- package/Animations/animationGroup.js.map +1 -1
- package/Audio/sound.js +2 -2
- package/Audio/sound.js.map +1 -1
- package/Bones/skeleton.js +1 -1
- package/Bones/skeleton.js.map +1 -1
- package/Cameras/Inputs/BaseCameraMouseWheelInput.d.ts +1 -1
- package/Cameras/Inputs/BaseCameraMouseWheelInput.js +8 -2
- package/Cameras/Inputs/BaseCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.js +2 -2
- package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.js.map +1 -1
- package/Cameras/Inputs/arcRotateCameraMouseWheelInput.d.ts +0 -1
- package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js +7 -2
- package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/flyCameraKeyboardInput.js +3 -3
- package/Cameras/Inputs/flyCameraKeyboardInput.js.map +1 -1
- package/Cameras/Inputs/followCameraKeyboardMoveInput.js +2 -2
- package/Cameras/Inputs/followCameraKeyboardMoveInput.js.map +1 -1
- package/Cameras/Inputs/followCameraMouseWheelInput.d.ts +0 -1
- package/Cameras/Inputs/followCameraMouseWheelInput.js +7 -2
- package/Cameras/Inputs/followCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraKeyboardMoveInput.js +3 -3
- package/Cameras/Inputs/freeCameraKeyboardMoveInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraTouchInput.js +1 -1
- package/Cameras/Inputs/freeCameraTouchInput.js.map +1 -1
- package/Cameras/VR/vrExperienceHelper.js +1 -1
- package/Cameras/VR/vrExperienceHelper.js.map +1 -1
- package/Cameras/VR/webVRCamera.js +1 -1
- package/Cameras/VR/webVRCamera.js.map +1 -1
- package/Cameras/arcRotateCamera.js +3 -2
- package/Cameras/arcRotateCamera.js.map +1 -1
- package/Cameras/camera.js +18 -3
- package/Cameras/camera.js.map +1 -1
- package/DeviceInput/InputDevices/webDeviceInputSystem.js +1 -1
- package/DeviceInput/InputDevices/webDeviceInputSystem.js.map +1 -1
- package/Engines/Extensions/engine.cubeTexture.js +3 -3
- package/Engines/Extensions/engine.cubeTexture.js.map +1 -1
- package/Engines/Extensions/engine.rawTexture.js +3 -3
- package/Engines/Extensions/engine.rawTexture.js.map +1 -1
- package/Engines/Native/nativeInterfaces.d.ts +1 -0
- package/Engines/Native/nativeInterfaces.js.map +1 -1
- package/Engines/Processors/shaderCodeCursor.js +2 -1
- package/Engines/Processors/shaderCodeCursor.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.rawTexture.js +3 -3
- package/Engines/WebGPU/Extensions/engine.rawTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuOcclusionQuery.js +1 -1
- package/Engines/WebGPU/webgpuOcclusionQuery.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js +6 -6
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +4 -4
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
- package/Engines/engine.d.ts +0 -10
- package/Engines/engine.js +0 -14
- package/Engines/engine.js.map +1 -1
- package/Engines/nativeEngine.d.ts +7 -2
- package/Engines/nativeEngine.js +30 -10
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/thinEngine.d.ts +22 -2
- package/Engines/thinEngine.js +49 -9
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.js +1 -1
- package/Engines/webgpuEngine.js.map +1 -1
- package/Gizmos/boundingBoxGizmo.d.ts +4 -0
- package/Gizmos/boundingBoxGizmo.js +6 -0
- package/Gizmos/boundingBoxGizmo.js.map +1 -1
- package/Inputs/scene.inputManager.js +5 -4
- package/Inputs/scene.inputManager.js.map +1 -1
- package/Loading/sceneLoader.js +12 -12
- package/Loading/sceneLoader.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/TBNBlock.d.ts +12 -0
- package/Materials/Node/Blocks/Fragment/TBNBlock.js +50 -0
- package/Materials/Node/Blocks/Fragment/TBNBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +2 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
- package/Materials/Node/Blocks/gradientBlock.js +1 -1
- package/Materials/Node/Blocks/gradientBlock.js.map +1 -1
- package/Materials/Node/nodeMaterial.d.ts +10 -1
- package/Materials/Node/nodeMaterial.js +43 -26
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.js +4 -4
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/Textures/baseTexture.d.ts +1 -1
- package/Materials/Textures/baseTexture.js +2 -2
- package/Materials/Textures/baseTexture.js.map +1 -1
- package/Materials/Textures/prePassRenderTarget.js +1 -1
- package/Materials/Textures/prePassRenderTarget.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.js +11 -3
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Materials/Textures/videoTexture.js +4 -1
- package/Materials/Textures/videoTexture.js.map +1 -1
- package/Materials/imageProcessingConfiguration.js.map +1 -1
- package/Materials/materialDefines.js +3 -1
- package/Materials/materialDefines.js.map +1 -1
- package/Materials/materialHelper.d.ts +1 -1
- package/Materials/materialHelper.js +6 -6
- package/Materials/materialHelper.js.map +1 -1
- package/Materials/shaderMaterial.d.ts +10 -1
- package/Materials/shaderMaterial.js +10 -1
- package/Materials/shaderMaterial.js.map +1 -1
- package/Maths/math.color.d.ts +9 -1
- package/Maths/math.color.js +13 -1
- package/Maths/math.color.js.map +1 -1
- package/Meshes/Builders/icoSphereBuilder.js +2 -2
- package/Meshes/Builders/icoSphereBuilder.js.map +1 -1
- package/Meshes/abstractMesh.js +1 -1
- package/Meshes/abstractMesh.js.map +1 -1
- package/Meshes/geometry.js +3 -4
- package/Meshes/geometry.js.map +1 -1
- package/Meshes/mesh.d.ts +1 -1
- package/Meshes/mesh.js +8 -7
- package/Meshes/mesh.js.map +1 -1
- package/Meshes/thinInstanceMesh.js +5 -0
- package/Meshes/thinInstanceMesh.js.map +1 -1
- package/Meshes/transformNode.d.ts +2 -2
- package/Meshes/transformNode.js +1 -1
- package/Meshes/transformNode.js.map +1 -1
- package/Misc/smartArray.js +0 -1
- package/Misc/smartArray.js.map +1 -1
- package/Particles/computeShaderParticleSystem.js +2 -2
- package/Particles/computeShaderParticleSystem.js.map +1 -1
- package/Particles/particleHelper.d.ts +12 -1
- package/Particles/particleHelper.js +16 -5
- package/Particles/particleHelper.js.map +1 -1
- package/Particles/particleSystem.js +2 -2
- package/Particles/particleSystem.js.map +1 -1
- package/Particles/particleSystemSet.js +1 -1
- package/Particles/particleSystemSet.js.map +1 -1
- package/Particles/solidParticleSystem.d.ts +3 -0
- package/Particles/solidParticleSystem.js +3 -0
- package/Particles/solidParticleSystem.js.map +1 -1
- package/Particles/webgl2ParticleSystem.js +2 -2
- package/Particles/webgl2ParticleSystem.js.map +1 -1
- package/Physics/Plugins/cannonJSPlugin.js +1 -1
- package/Physics/Plugins/cannonJSPlugin.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js +3 -3
- package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js.map +1 -1
- package/Rendering/geometryBufferRenderer.js +3 -2
- package/Rendering/geometryBufferRenderer.js.map +1 -1
- package/Rendering/utilityLayerRenderer.js +1 -1
- package/Rendering/utilityLayerRenderer.js.map +1 -1
- package/Shaders/ShadersInclude/helperFunctions.js +1 -1
- package/Shaders/ShadersInclude/helperFunctions.js.map +1 -1
- package/Shaders/geometry.fragment.js +1 -1
- package/Shaders/geometry.fragment.js.map +1 -1
- package/Sprites/spriteManager.d.ts +10 -1
- package/Sprites/spriteManager.js +10 -1
- package/Sprites/spriteManager.js.map +1 -1
- package/XR/features/WebXRLayers.js +1 -1
- package/XR/features/WebXRLayers.js.map +1 -1
- package/assetContainer.d.ts +1 -1
- package/assetContainer.js +23 -23
- package/assetContainer.js.map +1 -1
- package/node.js +1 -1
- package/node.js.map +1 -1
- package/package.json +1 -1
- package/scene.d.ts +8 -6
- package/scene.js +23 -14
- package/scene.js.map +1 -1
package/assetContainer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assetContainer.js","sourceRoot":"","sources":["../../../../lts/core/generated/assetContainer.ts"],"names":[],"mappings":"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","sourcesContent":["import { AbstractScene } from \"./abstractScene\";\r\nimport type { Scene } from \"./scene\";\r\nimport { Mesh } from \"./Meshes/mesh\";\r\nimport type { 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\";\r\nimport type { 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 { ThinEngine } from \"./Engines/thinEngine\";\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 AbstractScene {}\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: TransformNode[] = [];\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/**\r\n * Container with a set of assets that can be added or removed from a scene.\r\n */\r\nexport class AssetContainer extends AbstractScene {\r\n private _wasAddedToScene = false;\r\n private _onContextRestoredObserver: Nullable<Observer<ThinEngine>>;\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[\"sounds\"] = [];\r\n this[\"effectLayers\"] = [];\r\n this[\"layers\"] = [];\r\n this[\"lensFlareSystems\"] = [];\r\n this[\"proceduralTextures\"] = [];\r\n this[\"reflectionProbes\"] = [];\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 * 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; predicate?: (entity: any) => boolean }\r\n ): InstantiatedEntries {\r\n const convertionMap: { [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 if (!options) {\r\n options = {\r\n doNotInstantiate: true,\r\n };\r\n }\r\n\r\n const onClone = (source: TransformNode, clone: TransformNode) => {\r\n convertionMap[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 as Mesh;\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 convertionMap[oldTarget.uniqueId] = newTarget.uniqueId;\r\n storeMap[newTarget.uniqueId] = newTarget;\r\n }\r\n }\r\n }\r\n };\r\n\r\n this.transformNodes.forEach((o) => {\r\n if (options && options.predicate && !options.predicate(o)) {\r\n return;\r\n }\r\n\r\n if (!o.parent) {\r\n const newOne = o.instantiateHierarchy(null, options, (source, clone) => {\r\n onClone(source, clone);\r\n });\r\n\r\n if (newOne) {\r\n result.rootNodes.push(newOne);\r\n }\r\n }\r\n });\r\n\r\n this.meshes.forEach((o) => {\r\n if (options && options.predicate && !options.predicate(o)) {\r\n return;\r\n }\r\n\r\n if (!o.parent) {\r\n const newOne = o.instantiateHierarchy(null, options, (source, clone) => {\r\n onClone(source, clone);\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 convertionMap[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 convertionMap[material.uniqueId] = swap.uniqueId;\r\n storeMap[swap.uniqueId] = swap;\r\n }\r\n\r\n multi.subMaterials = multi.subMaterials.map((m) => m && storeMap[convertionMap[m.uniqueId]]);\r\n }\r\n }\r\n\r\n if (mesh.getClassName() !== \"InstancedMesh\") {\r\n mesh.material = storeMap[convertionMap[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\r\n if (newOne) {\r\n result.rootNodes.push(newOne);\r\n }\r\n }\r\n });\r\n\r\n this.skeletons.forEach((s) => {\r\n if (options && options.predicate && !options.predicate(s)) {\r\n return;\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[convertionMap[m.uniqueId]] as Mesh;\r\n if (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[convertionMap[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 this.animationGroups.forEach((o) => {\r\n if (options && options.predicate && !options.predicate(o)) {\r\n return;\r\n }\r\n\r\n const clone = o.clone(nameFunction ? nameFunction(o.name) : \"Clone of \" + o.name, (oldTarget) => {\r\n const newTarget = storeMap[convertionMap[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\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 this.cameras.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addCamera(o);\r\n });\r\n this.lights.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addLight(o);\r\n });\r\n this.meshes.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addMesh(o);\r\n });\r\n this.skeletons.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addSkeleton(o);\r\n });\r\n this.animations.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addAnimation(o);\r\n });\r\n this.animationGroups.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addAnimationGroup(o);\r\n });\r\n this.multiMaterials.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addMultiMaterial(o);\r\n });\r\n this.materials.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addMaterial(o);\r\n });\r\n this.morphTargetManagers.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addMorphTargetManager(o);\r\n });\r\n this.geometries.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addGeometry(o);\r\n });\r\n this.transformNodes.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addTransformNode(o);\r\n });\r\n this.actionManagers.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addActionManager(o);\r\n });\r\n this.textures.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addTexture(o);\r\n });\r\n this.reflectionProbes.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addReflectionProbe(o);\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 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 this.cameras.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeCamera(o);\r\n });\r\n this.lights.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeLight(o);\r\n });\r\n this.meshes.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeMesh(o);\r\n });\r\n this.skeletons.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeSkeleton(o);\r\n });\r\n this.animations.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeAnimation(o);\r\n });\r\n this.animationGroups.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeAnimationGroup(o);\r\n });\r\n this.multiMaterials.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeMultiMaterial(o);\r\n });\r\n this.materials.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeMaterial(o);\r\n });\r\n this.morphTargetManagers.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeMorphTargetManager(o);\r\n });\r\n this.geometries.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeGeometry(o);\r\n });\r\n this.transformNodes.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeTransformNode(o);\r\n });\r\n this.actionManagers.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeActionManager(o);\r\n });\r\n this.textures.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeTexture(o);\r\n });\r\n this.reflectionProbes.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\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 this.cameras.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.cameras = [];\r\n\r\n this.lights.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.lights = [];\r\n\r\n this.meshes.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.meshes = [];\r\n\r\n this.skeletons.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.skeletons = [];\r\n\r\n this.animationGroups.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.animationGroups = [];\r\n\r\n this.multiMaterials.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.multiMaterials = [];\r\n\r\n this.materials.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.materials = [];\r\n\r\n this.geometries.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.geometries = [];\r\n\r\n this.transformNodes.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.transformNodes = [];\r\n\r\n this.actionManagers.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.actionManagers = [];\r\n\r\n this.textures.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.textures = [];\r\n\r\n this.reflectionProbes.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.reflectionProbes = [];\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) {\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 this.meshes.forEach((m) => {\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 nodesInAC.forEach((nodeInAC) => {\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 = new Array<AnimationGroup>();\r\n\r\n // Copy new animation groups\r\n this.animationGroups.slice().forEach((animationGroupInAC) => {\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 animationGroupInAC.animatables.forEach((animatable) => {\r\n animatable.stop();\r\n });\r\n });\r\n\r\n // Retarget animatables\r\n animatables.forEach((animatable) => {\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"]}
|
|
1
|
+
{"version":3,"file":"assetContainer.js","sourceRoot":"","sources":["../../../../lts/core/generated/assetContainer.ts"],"names":[],"mappings":"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","sourcesContent":["import { AbstractScene } from \"./abstractScene\";\r\nimport type { Scene } from \"./scene\";\r\nimport { Mesh } from \"./Meshes/mesh\";\r\nimport type { 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\";\r\nimport type { 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 { ThinEngine } from \"./Engines/thinEngine\";\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 AbstractScene {}\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: TransformNode[] = [];\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/**\r\n * Container with a set of assets that can be added or removed from a scene.\r\n */\r\nexport class AssetContainer extends AbstractScene {\r\n private _wasAddedToScene = false;\r\n private _onContextRestoredObserver: Nullable<Observer<ThinEngine>>;\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[\"sounds\"] = [];\r\n this[\"effectLayers\"] = [];\r\n this[\"layers\"] = [];\r\n this[\"lensFlareSystems\"] = [];\r\n this[\"proceduralTextures\"] = [];\r\n this[\"reflectionProbes\"] = [];\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 * 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: TransformNode) => boolean); predicate?: (entity: any) => boolean }\r\n ): InstantiatedEntries {\r\n const convertionMap: { [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 if (!localOptions.doNotInstantiate) {\r\n // Always clone skinned meshes.\r\n localOptions.doNotInstantiate = (node) => !!(node as AbstractMesh).skeleton;\r\n }\r\n\r\n const onClone = (source: TransformNode, clone: TransformNode) => {\r\n convertionMap[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 as Mesh;\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 convertionMap[oldTarget.uniqueId] = newTarget.uniqueId;\r\n storeMap[newTarget.uniqueId] = newTarget;\r\n }\r\n }\r\n }\r\n };\r\n\r\n this.transformNodes.forEach((o) => {\r\n if (localOptions.predicate && !localOptions.predicate(o)) {\r\n return;\r\n }\r\n\r\n if (!o.parent) {\r\n const newOne = o.instantiateHierarchy(null, localOptions, (source, clone) => {\r\n onClone(source, clone);\r\n });\r\n\r\n if (newOne) {\r\n result.rootNodes.push(newOne);\r\n }\r\n }\r\n });\r\n\r\n this.meshes.forEach((o) => {\r\n if (localOptions.predicate && !localOptions.predicate(o)) {\r\n return;\r\n }\r\n\r\n if (!o.parent) {\r\n const newOne = o.instantiateHierarchy(null, localOptions, (source, clone) => {\r\n onClone(source, clone);\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 convertionMap[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 convertionMap[material.uniqueId] = swap.uniqueId;\r\n storeMap[swap.uniqueId] = swap;\r\n }\r\n\r\n multi.subMaterials = multi.subMaterials.map((m) => m && storeMap[convertionMap[m.uniqueId]]);\r\n }\r\n }\r\n\r\n if (mesh.getClassName() !== \"InstancedMesh\") {\r\n mesh.material = storeMap[convertionMap[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\r\n if (newOne) {\r\n result.rootNodes.push(newOne);\r\n }\r\n }\r\n });\r\n\r\n this.skeletons.forEach((s) => {\r\n if (localOptions.predicate && !localOptions.predicate(s)) {\r\n return;\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[convertionMap[m.uniqueId]] as Mesh;\r\n if (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[convertionMap[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 this.animationGroups.forEach((o) => {\r\n if (localOptions.predicate && !localOptions.predicate(o)) {\r\n return;\r\n }\r\n\r\n const clone = o.clone(nameFunction ? nameFunction(o.name) : \"Clone of \" + o.name, (oldTarget) => {\r\n const newTarget = storeMap[convertionMap[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\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 this.cameras.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addCamera(o);\r\n });\r\n this.lights.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addLight(o);\r\n });\r\n this.meshes.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addMesh(o);\r\n });\r\n this.skeletons.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addSkeleton(o);\r\n });\r\n this.animations.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addAnimation(o);\r\n });\r\n this.animationGroups.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addAnimationGroup(o);\r\n });\r\n this.multiMaterials.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addMultiMaterial(o);\r\n });\r\n this.materials.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addMaterial(o);\r\n });\r\n this.morphTargetManagers.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addMorphTargetManager(o);\r\n });\r\n this.geometries.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addGeometry(o);\r\n });\r\n this.transformNodes.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addTransformNode(o);\r\n });\r\n this.actionManagers.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addActionManager(o);\r\n });\r\n this.textures.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addTexture(o);\r\n });\r\n this.reflectionProbes.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addReflectionProbe(o);\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 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 this.cameras.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeCamera(o);\r\n });\r\n this.lights.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeLight(o);\r\n });\r\n this.meshes.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeMesh(o);\r\n });\r\n this.skeletons.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeSkeleton(o);\r\n });\r\n this.animations.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeAnimation(o);\r\n });\r\n this.animationGroups.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeAnimationGroup(o);\r\n });\r\n this.multiMaterials.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeMultiMaterial(o);\r\n });\r\n this.materials.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeMaterial(o);\r\n });\r\n this.morphTargetManagers.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeMorphTargetManager(o);\r\n });\r\n this.geometries.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeGeometry(o);\r\n });\r\n this.transformNodes.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeTransformNode(o);\r\n });\r\n this.actionManagers.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeActionManager(o);\r\n });\r\n this.textures.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeTexture(o);\r\n });\r\n this.reflectionProbes.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\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 this.cameras.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.cameras.length = 0;\r\n\r\n this.lights.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.lights.length = 0;\r\n\r\n this.meshes.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.meshes.length = 0;\r\n\r\n this.skeletons.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.skeletons.length = 0;\r\n\r\n this.animationGroups.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.animationGroups.length = 0;\r\n\r\n this.multiMaterials.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.multiMaterials.length = 0;\r\n\r\n this.materials.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.materials.length = 0;\r\n\r\n this.geometries.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.geometries.length = 0;\r\n\r\n this.transformNodes.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.transformNodes.length = 0;\r\n\r\n this.actionManagers.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.actionManagers.length = 0;\r\n\r\n this.textures.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.textures.length = 0;\r\n\r\n this.reflectionProbes.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.reflectionProbes.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) {\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 this.meshes.forEach((m) => {\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 nodesInAC.forEach((nodeInAC) => {\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 = new Array<AnimationGroup>();\r\n\r\n // Copy new animation groups\r\n this.animationGroups.slice().forEach((animationGroupInAC) => {\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 animationGroupInAC.animatables.forEach((animatable) => {\r\n animatable.stop();\r\n });\r\n });\r\n\r\n // Retarget animatables\r\n animatables.forEach((animatable) => {\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"]}
|
package/node.js
CHANGED
package/node.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../../../lts/core/generated/node.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAGtD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAgB9C,cAAc;AACd;IAAA;QACW,oBAAe,GAAG,KAAK,CAAC;QACxB,gBAAW,GAAG,KAAK,CAAC;QACpB,yBAAoB,GAAG,CAAC,CAAC,CAAC;QAC1B,eAAU,GAAG,IAAI,CAAC;QAClB,qBAAgB,GAAG,IAAI,CAAC;QACxB,aAAQ,GAAG,IAAI,CAAC;QAChB,qCAAgC,GAAG,IAAI,UAAU,EAAW,CAAC;QAC7D,wBAAmB,GAAG,IAAI,UAAU,EAAQ,CAAC;IACxD,CAAC;IAAD,4BAAC;AAAD,CAAC,AATD,IASC;AAED;;GAEG;AACH;IA6RI;;;;OAIG;IACH,cAAY,IAAY,EAAE,KAA6B;QAA7B,sBAAA,EAAA,YAA6B;QAjS7C,aAAQ,GAAG,KAAK,CAAC;QA0CnB,qBAAgB,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAoBvD;;WAEG;QAEI,UAAK,GAAG,EAAE,CAAC;QAElB;;WAEG;QAEI,aAAQ,GAAQ,IAAI,CAAC;QAE5B;;WAEG;QACI,sBAAiB,GAAQ,IAAI,CAAC;QA2BrC,cAAc;QACP,qBAAgB,GAA4B,IAAI,CAAC;QAExD;;WAEG;QACI,eAAU,GAAG,IAAI,KAAK,EAAa,CAAC;QACjC,YAAO,GAAiD,EAAE,CAAC;QAErE;;WAEG;QACI,YAAO,GAAmC,IAAI,CAAC;QAEtD,cAAc;QACP,qBAAgB,GAAG,CAAC,CAAC,CAAC;QACrB,oBAAe,GAAG,CAAC,CAAC,CAAC;QAC7B,cAAc;QACP,mBAAc,GAAG,CAAC,CAAC,CAAC;QAE3B,cAAc;QACP,qBAAgB,GAAqB,IAAI,CAAC;QACjD,cAAc;QACP,gCAA2B,GAAqB,IAAI,CAAC;QAG5D,cAAc;QACP,WAAM,GAAQ,EAAE,CAAC;QAEd,gBAAW,GAAmB,IAAI,CAAC;QAE7C,cAAc;QACJ,cAAS,GAAqB,IAAI,CAAC;QAE7C,cAAc;QACP,iBAAY,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QACxC,cAAc;QACP,4BAAuB,GAAG,CAAC,CAAC;QACnC,cAAc;QACP,mCAA8B,GAAG,IAAI,CAAC;QAoFrC,iCAA4B,GAA0C,IAAI,CAAC;QAwBnF,cAAc;QACE,YAAO,GAAG,IAAI,CAAC;QAE/B;;WAEG;QACI,wBAAmB,GAAG,IAAI,UAAU,EAAQ,CAAC;QAE5C,uBAAkB,GAA6B,IAAI,CAAC;QAsD5D,YAAY;QACJ,eAAU,GAAG,IAAI,KAAK,EAAkB,CAAC;QAxB7C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;QACf,IAAI,CAAC,MAAM,GAAU,CAAC,KAAK,IAAI,WAAW,CAAC,gBAAgB,CAAC,CAAC;QAC7D,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QAC1C,IAAI,CAAC,UAAU,EAAE,CAAC;IACtB,CAAC;IAxRD;;;;OAIG;IACW,uBAAkB,GAAhC,UAAiC,IAAY,EAAE,eAAgC;QAC3E,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC;IACnD,CAAC;IAED;;;;;;;OAOG;IACW,cAAS,GAAvB,UAAwB,IAAY,EAAE,IAAY,EAAE,KAAY,EAAE,OAAa;QAC3E,IAAM,eAAe,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAErD,IAAI,CAAC,eAAe,EAAE;YAClB,OAAO,IAAI,CAAC;SACf;QAED,OAAO,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IAgDD,sBAAW,gCAAc;QAHzB;;WAEG;aACH;YACI,IAAI,IAAI,CAAC,gBAAgB,CAAC,eAAe,EAAE;gBACvC,OAAO,IAAI,CAAC;aACf;YAED,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClB,OAAO,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;aAC1C;YAED,OAAO,KAAK,CAAC;QACjB,CAAC;aAED,UAA0B,KAAc;YACpC,IAAI,CAAC,gBAAgB,CAAC,eAAe,GAAG,KAAK,CAAC;QAClD,CAAC;;;OAJA;IA+CD;;;OAGG;IACI,yBAAU,GAAjB;QACI,OAAO,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC;IAC7C,CAAC;IAMD,sBAAW,wBAAM;aAsCjB;YACI,OAAO,IAAI,CAAC,WAAW,CAAC;QAC5B,CAAC;QA5CD;;;WAGG;aACH,UAAkB,MAAsB;YACpC,IAAI,IAAI,CAAC,WAAW,KAAK,MAAM,EAAE;gBAC7B,OAAO;aACV;YAED,IAAM,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC;YAE5C,8CAA8C;YAC9C,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,SAAS,KAAK,IAAI,EAAE;gBACrG,IAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACvD,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;oBACd,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;iBAC/C;gBAED,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE;oBAC/C,IAAI,CAAC,oBAAoB,EAAE,CAAC;iBAC/B;aACJ;YAED,mBAAmB;YACnB,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC;YAE1B,6BAA6B;YAC7B,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClB,IAAI,IAAI,CAAC,WAAW,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,SAAS,KAAK,IAAI,EAAE;oBACjF,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,IAAI,KAAK,EAAQ,CAAC;iBAClD;gBACD,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAEtC,IAAI,CAAC,kBAAkB,EAAE;oBACrB,IAAI,CAAC,yBAAyB,EAAE,CAAC;iBACpC;aACJ;YAED,gBAAgB;YAChB,IAAI,CAAC,uBAAuB,EAAE,CAAC;QACnC,CAAC;;;OAAA;IAMD;;;OAGG;IACI,iCAAkB,GAAzB,UAA0B,mBAAwB;QAC9C,mBAAmB,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IACjD,CAAC;IAED,cAAc;IACP,mCAAoB,GAA3B;QACI,IAAI,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,KAAK,CAAC,CAAC,EAAE;YACnD,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;YAC1E,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACpC;IACL,CAAC;IAED,cAAc;IACP,wCAAyB,GAAhC;QACI,IAAI,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,KAAK,CAAC,CAAC,EAAE;YACnD,IAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;YACxC,IAAM,OAAO,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;YACrC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;YAC3E,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,CAAC,gBAAgB,CAAC,oBAAoB,GAAG,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC;YACzI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;YAC5B,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,GAAG,CAAC,CAAC,CAAC;SACnD;IACL,CAAC;IAOD,sBAAW,6CAA2B;QAHtC;;WAEG;aACH;YACI,IAAI,CAAC,IAAI,CAAC,4BAA4B,EAAE;gBACpC,OAAO,IAAI,CAAC,MAAM,CAAC,2BAA2B,CAAC;aAClD;YACD,OAAO,IAAI,CAAC,4BAA4B,CAAC;QAC7C,CAAC;aAED,UAAuC,KAA4C;YAC/E,IAAI,CAAC,4BAA4B,GAAG,KAAK,CAAC;QAC9C,CAAC;;;OAJA;IAMD;;;OAGG;IACI,2BAAY,GAAnB;QACI,OAAO,MAAM,CAAC;IAClB,CAAC;IAcD,sBAAW,2BAAS;QAHpB;;WAEG;aACH,UAAqB,QAAoB;YACrC,IAAI,IAAI,CAAC,kBAAkB,EAAE;gBACzB,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;aAC5D;YACD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACrE,CAAC;;;OAAA;IAKD,sBAAW,iDAA+B;QAH1C;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,gBAAgB,CAAC,gCAAgC,CAAC;QAClE,CAAC;;;OAAA;IAKD,sBAAW,oCAAkB;QAH7B;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC;QACrD,CAAC;;;OAAA;IAeD;;;OAGG;IACI,uBAAQ,GAAf;QACI,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED;;;OAGG;IACI,wBAAS,GAAhB;QACI,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;IACnC,CAAC;IAKD;;;;;;OAMG;IACI,0BAAW,GAAlB,UAAmB,QAAwB,EAAE,iBAAyB;QAAtE,iBAmBC;QAnB4C,kCAAA,EAAA,yBAAyB;QAClE,IAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAEhD,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;YACd,OAAO,IAAI,CAAC;SACf;QAED,QAAQ,CAAC,IAAI,EAAE,CAAC;QAChB,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,iBAAiB,EAAE;YAC7C,oDAAoD;YACpD,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,OAAO,CAAC;gBACvC,QAAQ,CAAC,MAAM,CAAC,KAAI,CAAC,CAAC;YAC1B,CAAC,CAAC,CAAC;SACN;aAAM;YACH,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SACzB;QACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE/B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACI,6BAAc,GAArB,UAAsB,QAAwB;QAC1C,IAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAEhD,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;YACd,OAAO,IAAI,CAAC;SACf;QAED,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QAChC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAEjC,OAAO,IAAI,CAAC;IAChB,CAAC;IAMD,sBAAW,2BAAS;QAJpB;;;WAGG;aACH;YACI,OAAO,IAAI,CAAC,UAAU,CAAC;QAC3B,CAAC;;;OAAA;IAED;;;;;OAKG;IACI,gCAAiB,GAAxB,UAAyB,IAAY;QACjC,KAAuB,UAAe,EAAf,KAAA,IAAI,CAAC,UAAU,EAAf,cAAe,EAAf,IAAe,EAAE;YAAnC,IAAM,QAAQ,SAAA;YACf,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,EAAE;gBACxB,OAAO,QAAQ,CAAC;aACnB;SACJ;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;OAGG;IACI,6BAAc,GAArB;QACI,IAAI,IAAI,CAAC,gBAAgB,KAAK,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE;YACrD,IAAI,CAAC,kBAAkB,EAAE,CAAC;SAC7B;QACD,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED,cAAc;IACP,yCAA0B,GAAjC;QACI,IAAI,IAAI,CAAC,8BAA8B,EAAE;YACrC,IAAI,CAAC,8BAA8B,GAAG,KAAK,CAAC;YAC5C,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;SAClE;QACD,OAAO,IAAI,CAAC,uBAAuB,CAAC;IACxC,CAAC;IAMD,sBAAW,sCAAoB;QAJ/B;;;WAGG;aACH;YACI,OAAO,IAAI,CAAC,YAAY,CAAC;QAC7B,CAAC;;;OAAA;IAED,qEAAqE;IACrE,mCAAmC;IACnC,cAAc;IACP,yBAAU,GAAjB;QACI,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC;IACnC,CAAC;IAED;;;OAGG;IACI,0BAAW,GAAlB,UAAmB,KAAe;QAC9B,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;YACjC,OAAO;SACV;QAED,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAEjC,IAAI,CAAC,YAAY,EAAE,CAAC;IACxB,CAAC;IAED;;;;OAIG;IACH,6DAA6D;IACtD,0CAA2B,GAAlC,UAAmC,OAAgB,EAAE,WAAkB;QAAlB,4BAAA,EAAA,kBAAkB;QACnE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACd,OAAO,IAAI,CAAC;SACf;QAED,OAAO,IAAI,CAAC,MAAM,CAAC,2BAA2B,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACnE,CAAC;IAED,qEAAqE;IACrE,yDAAyD;IACzD;;;OAGG;IACH,6DAA6D;IACtD,2BAAY,GAAnB,UAAoB,iBAA2B,IAAS,CAAC;IAEzD,qEAAqE;IACrE,cAAc;IACP,8BAAe,GAAtB;QACI,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,cAAc;IACP,oCAAqB,GAA5B;QACI,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;SAC1D;IACL,CAAC;IAED,cAAc;IACP,uCAAwB,GAA/B;QACI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACnB,OAAO,IAAI,CAAC;SACf;QAED,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE;YACvF,OAAO,KAAK,CAAC;SAChB;QAED,OAAO,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC;IAC7C,CAAC;IAED,cAAc;IACP,6BAAc,GAArB;QACI,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,WAAW,EAAE;YACzC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC;YACtC,OAAO,KAAK,CAAC;SAChB;QAED,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE;YACtD,OAAO,KAAK,CAAC;SAChB;QAED,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC;IAClC,CAAC;IAED;;;;OAIG;IACI,sBAAO,GAAd,UAAe,aAAqB;QAArB,8BAAA,EAAA,qBAAqB;QAChC,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;IAC1C,CAAC;IAED;;;;OAIG;IACI,0BAAW,GAAlB,UAAmB,QAAiB;QAChC,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,SAAS,CAAC;QACzC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACI,wBAAS,GAAhB,UAAiB,cAA8B;QAA9B,+BAAA,EAAA,qBAA8B;QAC3C,IAAI,cAAc,KAAK,KAAK,EAAE;YAC1B,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC;SAC3C;QAED,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE;YACnC,OAAO,KAAK,CAAC;SAChB;QAED,OAAO,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC;IAClD,CAAC;IAED,cAAc;IACJ,sCAAuB,GAAjC;QACI,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAEhG,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAC,CAAC;gBACrB,CAAC,CAAC,uBAAuB,EAAE,CAAC,CAAC,uCAAuC;YACxE,CAAC,CAAC,CAAC;SACN;IACL,CAAC;IAED;;;OAGG;IACI,yBAAU,GAAjB,UAAkB,KAAc;QAC5B,IAAI,IAAI,CAAC,gBAAgB,CAAC,UAAU,KAAK,KAAK,EAAE;YAC5C,OAAO;SACV;QACD,IAAI,CAAC,gBAAgB,CAAC,UAAU,GAAG,KAAK,CAAC;QAEzC,IAAI,CAAC,gBAAgB,CAAC,gCAAgC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAE9E,IAAI,CAAC,uBAAuB,EAAE,CAAC;IACnC,CAAC;IAED;;;;;OAKG;IACI,6BAAc,GAArB,UAAsB,QAAc;QAChC,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE;gBAC1B,OAAO,IAAI,CAAC;aACf;YAED,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;SAC/C;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;;;OAKG;IACI,8BAAe,GAAtB,UAAuB,OAAe,EAAE,qBAAsC,EAAE,SAAmC;QAA3E,sCAAA,EAAA,6BAAsC;QAC1E,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACjB,OAAO;SACV;QAED,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACxD,IAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAEnC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;gBAC/B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACtB;YAED,IAAI,CAAC,qBAAqB,EAAE;gBACxB,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;aACnD;SACJ;IACL,CAAC;IAkBD;;;;;OAKG;IACI,6BAAc,GAArB,UAAsB,qBAA+B,EAAE,SAAmC;QACtF,IAAM,OAAO,GAAG,IAAI,KAAK,EAAQ,CAAC;QAElC,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,qBAAqB,EAAE,SAAS,CAAC,CAAC;QAEhE,OAAO,OAAO,CAAC;IACnB,CAAC;IAkBD;;;;;OAKG;IACI,6BAAc,GAArB,UAAsB,qBAA+B,EAAE,SAAmC;QACtF,IAAM,OAAO,GAAwB,EAAE,CAAC;QACxC,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,qBAAqB,EAAE,UAAC,IAAU;YAC5D,OAAO,CAAC,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,IAAmB,IAAK,CAAC,eAAe,KAAK,SAAS,CAAC;QACjG,CAAC,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;IACnB,CAAC;IAkBD;;;;;OAKG;IACI,0BAAW,GAAlB,UAAmB,SAAmC,EAAE,qBAA4B;QAA5B,sCAAA,EAAA,4BAA4B;QAChF,OAAO,IAAI,CAAC,cAAc,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC;IACjE,CAAC;IAED;;;OAGG;IACI,wBAAS,GAAhB,UAAiB,KAAc;QAC3B,IAAI,KAAK,KAAK,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE;YAC1C,OAAO;SACV;QAED,IAAI,CAAC,KAAK,EAAE;YACR,IAAI,CAAC,gBAAgB,CAAC,QAAQ,GAAG,KAAK,CAAC;YACvC,OAAO;SACV;QAED,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SACtB;QACD,IAAI,CAAC,gBAAgB,CAAC,QAAQ,GAAG,IAAI,CAAC;IAC1C,CAAC;IAED;;;;OAIG;IACI,iCAAkB,GAAzB,UAA0B,IAAY;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC7C,IAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAErC,IAAI,SAAS,CAAC,IAAI,KAAK,IAAI,EAAE;gBACzB,OAAO,SAAS,CAAC;aACpB;SACJ;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACI,mCAAoB,GAA3B,UAA4B,IAAY,EAAE,IAAY,EAAE,EAAU;QAC9D,gCAAgC;QAChC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACrB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;YACjE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE;gBACxE,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;oBACpB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;iBAClD;aACJ;SACJ;IACL,CAAC;IAED;;;;OAIG;IACI,mCAAoB,GAA3B,UAA4B,IAAY,EAAE,YAAmB;QAAnB,6BAAA,EAAA,mBAAmB;QACzD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE;YACxE,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;gBACpB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;aACtD;SACJ;QACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,mDAAmD;IAClF,CAAC;IAED;;;;OAIG;IACI,gCAAiB,GAAxB,UAAyB,IAAY;QACjC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;IACtC,CAAC;IAED;;;OAGG;IACI,iCAAkB,GAAzB;QACI,IAAM,eAAe,GAA+B,EAAE,CAAC;QACvD,IAAI,IAAY,CAAC;QACjB,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE;YACvB,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;SAC5C;QACD,OAAO,eAAe,CAAC;IAC3B,CAAC;IAED;;;;;;;OAOG;IACI,6BAAc,GAArB,UAAsB,IAAY,EAAE,IAAc,EAAE,UAAmB,EAAE,cAA2B;QAChG,IAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAE3C,IAAI,CAAC,KAAK,EAAE;YACR,OAAO,IAAI,CAAC;SACf;QAED,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;IACpG,CAAC;IAED;;;OAGG;IACI,uCAAwB,GAA/B;QACI,IAAM,mBAAmB,GAAG,EAAE,CAAC;QAC/B,KAAK,IAAM,MAAI,IAAI,IAAI,CAAC,OAAO,EAAE;YAC7B,IAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAI,CAAC,CAAC;YACtC,IAAI,CAAC,UAAU,EAAE;gBACb,SAAS;aACZ;YACD,IAAM,KAAK,GAAQ,EAAE,CAAC;YACtB,KAAK,CAAC,IAAI,GAAG,MAAI,CAAC;YAClB,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;YAC7B,KAAK,CAAC,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC;YACzB,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACnC;QACD,OAAO,mBAAmB,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IACI,iCAAkB,GAAzB,UAA0B,KAAe;QACrC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACpB,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;SACzC;QACD,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED;;;;OAIG;IACI,sBAAO,GAAd,UAAe,YAAsB,EAAE,0BAAkC;QAAlC,2CAAA,EAAA,kCAAkC;QACrE,IAAI,CAAC,gBAAgB,CAAC,WAAW,GAAG,IAAI,CAAC;QAEzC,IAAI,CAAC,YAAY,EAAE;YACf,IAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YACxC,KAAmB,UAAK,EAAL,eAAK,EAAL,mBAAK,EAAL,IAAK,EAAE;gBAArB,IAAM,IAAI,cAAA;gBACX,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,0BAA0B,CAAC,CAAC;aAC1D;SACJ;QAED,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACd,IAAI,CAAC,yBAAyB,EAAE,CAAC;SACpC;aAAM;YACH,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;SACtB;QAED,WAAW;QACX,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;QAEjC,IAAI,CAAC,+BAA+B,CAAC,KAAK,EAAE,CAAC;QAC7C,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;QAEhC,YAAY;QACZ,KAAuB,UAAe,EAAf,KAAA,IAAI,CAAC,UAAU,EAAf,cAAe,EAAf,IAAe,EAAE;YAAnC,IAAM,QAAQ,SAAA;YACf,QAAQ,CAAC,MAAM,EAAE,CAAC;SACrB;QAED,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QAErB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACzB,CAAC;IAED;;;;;OAKG;IACW,yBAAoB,GAAlC,UAAmC,IAAU,EAAE,UAAe,EAAE,KAAY;QACxE,IAAI,UAAU,CAAC,MAAM,EAAE;YACnB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gBAC3D,IAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACtC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;aAC5D;SACJ;IACL,CAAC;IACD;;;;;OAKG;IACI,0CAA2B,GAAlC,UAAmC,kBAAyB,EAAE,SAAmE;QAA9F,mCAAA,EAAA,yBAAyB;QAAE,0BAAA,EAAA,gBAAmE;QAC7H,oDAAoD;QACpD,IAAI,CAAC,QAAQ,EAAE,CAAC,iBAAiB,EAAE,CAAC;QAEpC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAE9B,IAAI,GAAY,CAAC;QACjB,IAAI,GAAY,CAAC;QAEjB,IAAM,gBAAgB,GAAG,IAA4B,CAAC;QACtD,IAAI,gBAAgB,CAAC,eAAe,IAAI,gBAAgB,CAAC,SAAS,EAAE;YAChE,oDAAoD;YACpD,IAAM,YAAY,GAAG,gBAAgB,CAAC,eAAe,EAAE,CAAC;YACxD,GAAG,GAAG,YAAY,CAAC,WAAW,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;YACpD,GAAG,GAAG,YAAY,CAAC,WAAW,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;SACvD;aAAM;YACH,GAAG,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;YACxE,GAAG,GAAG,IAAI,OAAO,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;SAC9E;QAED,IAAI,kBAAkB,EAAE;YACpB,IAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YAE/C,KAAyB,UAAW,EAAX,2BAAW,EAAX,yBAAW,EAAX,IAAW,EAAE;gBAAjC,IAAM,UAAU,oBAAA;gBACjB,IAAM,SAAS,GAAiB,UAAU,CAAC;gBAC3C,SAAS,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;gBAEnC,qDAAqD;gBACrD,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE;oBACpC,SAAS;iBACZ;gBAED,wDAAwD;gBACxD,IAAI,CAAC,SAAS,CAAC,eAAe,IAAI,SAAS,CAAC,gBAAgB,EAAE,KAAK,CAAC,EAAE;oBAClE,SAAS;iBACZ;gBAED,IAAM,iBAAiB,GAAG,SAAS,CAAC,eAAe,EAAE,CAAC;gBACtD,IAAM,WAAW,GAAG,iBAAiB,CAAC,WAAW,CAAC;gBAElD,IAAM,MAAM,GAAG,WAAW,CAAC,YAAY,CAAC;gBACxC,IAAM,MAAM,GAAG,WAAW,CAAC,YAAY,CAAC;gBAExC,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBACvC,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;aAC1C;SACJ;QAED,OAAO;YACH,GAAG,EAAE,GAAG;YACR,GAAG,EAAE,GAAG;SACX,CAAC;IACN,CAAC;IA56BD;;;;;OAKG;IACH,6DAA6D;IAC/C,2BAAsB,GAAG,UAAC,IAAY,EAAE,IAAY,EAAE,EAAU;QAC1E,MAAM,WAAW,CAAC,gBAAgB,CAAC,CAAC;IACxC,CAAC,CAAC;IAEa,sBAAiB,GAA2B,EAAE,CAAC;IAmC9D;QADC,SAAS,EAAE;sCACQ;IAMpB;QADC,SAAS,EAAE;oCACM;IAMlB;QADC,SAAS,EAAE;0CACY;IAMxB;QADC,SAAS,EAAE;uCACM;IAMlB;QADC,SAAS,EAAE;0CACgB;IAu2BhC,WAAC;CAAA,AAh7BD,IAg7BC;SAh7BY,IAAI","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\r\nimport type { Scene } from \"./scene\";\r\nimport type { Nullable } from \"./types\";\r\nimport { Matrix, Vector3 } from \"./Maths/math.vector\";\r\nimport type { Engine } from \"./Engines/engine\";\r\nimport type { IBehaviorAware, Behavior } from \"./Behaviors/behavior\";\r\nimport { serialize } from \"./Misc/decorators\";\r\nimport type { Observer } from \"./Misc/observable\";\r\nimport { Observable } from \"./Misc/observable\";\r\nimport { EngineStore } from \"./Engines/engineStore\";\r\nimport { _WarnImport } from \"./Misc/devTools\";\r\nimport type { AbstractActionManager } from \"./Actions/abstractActionManager\";\r\nimport type { IInspectable } from \"./Misc/iInspectable\";\r\nimport type { AbstractScene } from \"./abstractScene\";\r\n\r\ndeclare type Animatable = import(\"./Animations/animatable\").Animatable;\r\ndeclare type AnimationPropertiesOverride = import(\"./Animations/animationPropertiesOverride\").AnimationPropertiesOverride;\r\ndeclare type Animation = import(\"./Animations/animation\").Animation;\r\ndeclare type AnimationRange = import(\"./Animations/animationRange\").AnimationRange;\r\ndeclare type AbstractMesh = import(\"./Meshes/abstractMesh\").AbstractMesh;\r\n\r\n/**\r\n * Defines how a node can be built from a string name.\r\n */\r\nexport type NodeConstructor = (name: string, scene: Scene, options?: any) => () => Node;\r\n\r\n/** @hidden */\r\nclass _InternalNodeDataInfo {\r\n public _doNotSerialize = false;\r\n public _isDisposed = false;\r\n public _sceneRootNodesIndex = -1;\r\n public _isEnabled = true;\r\n public _isParentEnabled = true;\r\n public _isReady = true;\r\n public _onEnabledStateChangedObservable = new Observable<boolean>();\r\n public _onClonedObservable = new Observable<Node>();\r\n}\r\n\r\n/**\r\n * Node is the basic class for all scene objects (Mesh, Light, Camera.)\r\n */\r\nexport class Node implements IBehaviorAware<Node> {\r\n protected _isDirty = false;\r\n\r\n /**\r\n * @param name\r\n * @param from\r\n * @param to\r\n * @hidden\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public static _AnimationRangeFactory = (name: string, from: number, to: number): AnimationRange => {\r\n throw _WarnImport(\"AnimationRange\");\r\n };\r\n\r\n private static _NodeConstructors: { [key: string]: any } = {};\r\n\r\n /**\r\n * Add a new node constructor\r\n * @param type defines the type name of the node to construct\r\n * @param constructorFunc defines the constructor function\r\n */\r\n public static AddNodeConstructor(type: string, constructorFunc: NodeConstructor) {\r\n this._NodeConstructors[type] = constructorFunc;\r\n }\r\n\r\n /**\r\n * Returns a node constructor based on type name\r\n * @param type defines the type name\r\n * @param name defines the new node name\r\n * @param scene defines the hosting scene\r\n * @param options defines optional options to transmit to constructors\r\n * @returns the new constructor or null\r\n */\r\n public static Construct(type: string, name: string, scene: Scene, options?: any): Nullable<() => Node> {\r\n const constructorFunc = this._NodeConstructors[type];\r\n\r\n if (!constructorFunc) {\r\n return null;\r\n }\r\n\r\n return constructorFunc(name, scene, options);\r\n }\r\n\r\n private _nodeDataStorage = new _InternalNodeDataInfo();\r\n\r\n /**\r\n * Gets or sets the name of the node\r\n */\r\n @serialize()\r\n public name: string;\r\n\r\n /**\r\n * Gets or sets the id of the node\r\n */\r\n @serialize()\r\n public id: string;\r\n\r\n /**\r\n * Gets or sets the unique id of the node\r\n */\r\n @serialize()\r\n public uniqueId: number;\r\n\r\n /**\r\n * Gets or sets a string used to store user defined state for the node\r\n */\r\n @serialize()\r\n public state = \"\";\r\n\r\n /**\r\n * Gets or sets an object used to store user defined information for the node\r\n */\r\n @serialize()\r\n public metadata: any = null;\r\n\r\n /**\r\n * For internal use only. Please do not use.\r\n */\r\n public reservedDataStore: any = null;\r\n\r\n /**\r\n * List of inspectable custom properties (used by the Inspector)\r\n * @see https://doc.babylonjs.com/how_to/debug_layer#extensibility\r\n */\r\n public inspectableCustomProperties: IInspectable[];\r\n\r\n /**\r\n * Gets or sets a boolean used to define if the node must be serialized\r\n */\r\n public get doNotSerialize() {\r\n if (this._nodeDataStorage._doNotSerialize) {\r\n return true;\r\n }\r\n\r\n if (this._parentNode) {\r\n return this._parentNode.doNotSerialize;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public set doNotSerialize(value: boolean) {\r\n this._nodeDataStorage._doNotSerialize = value;\r\n }\r\n\r\n /** @hidden */\r\n public _parentContainer: Nullable<AbstractScene> = null;\r\n\r\n /**\r\n * Gets a list of Animations associated with the node\r\n */\r\n public animations = new Array<Animation>();\r\n protected _ranges: { [name: string]: Nullable<AnimationRange> } = {};\r\n\r\n /**\r\n * Callback raised when the node is ready to be used\r\n */\r\n public onReady: Nullable<(node: Node) => void> = null;\r\n\r\n /** @hidden */\r\n public _currentRenderId = -1;\r\n private _parentUpdateId = -1;\r\n /** @hidden */\r\n public _childUpdateId = -1;\r\n\r\n /** @hidden */\r\n public _waitingParentId: Nullable<string> = null;\r\n /** @hidden */\r\n public _waitingParentInstanceIndex: Nullable<string> = null;\r\n /** @hidden */\r\n public _scene: Scene;\r\n /** @hidden */\r\n public _cache: any = {};\r\n\r\n protected _parentNode: Nullable<Node> = null;\r\n\r\n /** @hidden */\r\n protected _children: Nullable<Node[]> = null;\r\n\r\n /** @hidden */\r\n public _worldMatrix = Matrix.Identity();\r\n /** @hidden */\r\n public _worldMatrixDeterminant = 0;\r\n /** @hidden */\r\n public _worldMatrixDeterminantIsDirty = true;\r\n\r\n /**\r\n * Gets a boolean indicating if the node has been disposed\r\n * @returns true if the node was disposed\r\n */\r\n public isDisposed(): boolean {\r\n return this._nodeDataStorage._isDisposed;\r\n }\r\n\r\n /**\r\n * Gets or sets the parent of the node (without keeping the current position in the scene)\r\n * @see https://doc.babylonjs.com/how_to/parenting\r\n */\r\n public set parent(parent: Nullable<Node>) {\r\n if (this._parentNode === parent) {\r\n return;\r\n }\r\n\r\n const previousParentNode = this._parentNode;\r\n\r\n // Remove self from list of children of parent\r\n if (this._parentNode && this._parentNode._children !== undefined && this._parentNode._children !== null) {\r\n const index = this._parentNode._children.indexOf(this);\r\n if (index !== -1) {\r\n this._parentNode._children.splice(index, 1);\r\n }\r\n\r\n if (!parent && !this._nodeDataStorage._isDisposed) {\r\n this._addToSceneRootNodes();\r\n }\r\n }\r\n\r\n // Store new parent\r\n this._parentNode = parent;\r\n\r\n // Add as child to new parent\r\n if (this._parentNode) {\r\n if (this._parentNode._children === undefined || this._parentNode._children === null) {\r\n this._parentNode._children = new Array<Node>();\r\n }\r\n this._parentNode._children.push(this);\r\n\r\n if (!previousParentNode) {\r\n this._removeFromSceneRootNodes();\r\n }\r\n }\r\n\r\n // Enabled state\r\n this._syncParentEnabledState();\r\n }\r\n\r\n public get parent(): Nullable<Node> {\r\n return this._parentNode;\r\n }\r\n\r\n /**\r\n * @param serializationObject\r\n * @hidden\r\n */\r\n public _serializeAsParent(serializationObject: any): void {\r\n serializationObject.parentId = this.uniqueId;\r\n }\r\n\r\n /** @hidden */\r\n public _addToSceneRootNodes() {\r\n if (this._nodeDataStorage._sceneRootNodesIndex === -1) {\r\n this._nodeDataStorage._sceneRootNodesIndex = this._scene.rootNodes.length;\r\n this._scene.rootNodes.push(this);\r\n }\r\n }\r\n\r\n /** @hidden */\r\n public _removeFromSceneRootNodes() {\r\n if (this._nodeDataStorage._sceneRootNodesIndex !== -1) {\r\n const rootNodes = this._scene.rootNodes;\r\n const lastIdx = rootNodes.length - 1;\r\n rootNodes[this._nodeDataStorage._sceneRootNodesIndex] = rootNodes[lastIdx];\r\n rootNodes[this._nodeDataStorage._sceneRootNodesIndex]._nodeDataStorage._sceneRootNodesIndex = this._nodeDataStorage._sceneRootNodesIndex;\r\n this._scene.rootNodes.pop();\r\n this._nodeDataStorage._sceneRootNodesIndex = -1;\r\n }\r\n }\r\n\r\n private _animationPropertiesOverride: Nullable<AnimationPropertiesOverride> = null;\r\n\r\n /**\r\n * Gets or sets the animation properties override\r\n */\r\n public get animationPropertiesOverride(): Nullable<AnimationPropertiesOverride> {\r\n if (!this._animationPropertiesOverride) {\r\n return this._scene.animationPropertiesOverride;\r\n }\r\n return this._animationPropertiesOverride;\r\n }\r\n\r\n public set animationPropertiesOverride(value: Nullable<AnimationPropertiesOverride>) {\r\n this._animationPropertiesOverride = value;\r\n }\r\n\r\n /**\r\n * Gets a string identifying the name of the class\r\n * @returns \"Node\" string\r\n */\r\n public getClassName(): string {\r\n return \"Node\";\r\n }\r\n\r\n /** @hidden */\r\n public readonly _isNode = true;\r\n\r\n /**\r\n * An event triggered when the mesh is disposed\r\n */\r\n public onDisposeObservable = new Observable<Node>();\r\n\r\n private _onDisposeObserver: Nullable<Observer<Node>> = null;\r\n /**\r\n * Sets a callback that will be raised when the node will be disposed\r\n */\r\n public set onDispose(callback: () => void) {\r\n if (this._onDisposeObserver) {\r\n this.onDisposeObservable.remove(this._onDisposeObserver);\r\n }\r\n this._onDisposeObserver = this.onDisposeObservable.add(callback);\r\n }\r\n\r\n /**\r\n * An event triggered when the enabled state of the node changes\r\n */\r\n public get onEnabledStateChangedObservable(): Observable<boolean> {\r\n return this._nodeDataStorage._onEnabledStateChangedObservable;\r\n }\r\n\r\n /**\r\n * An event triggered when the node is cloned\r\n */\r\n public get onClonedObservable(): Observable<Node> {\r\n return this._nodeDataStorage._onClonedObservable;\r\n }\r\n\r\n /**\r\n * Creates a new Node\r\n * @param name the name and id to be given to this node\r\n * @param scene the scene this node will be added to\r\n */\r\n constructor(name: string, scene: Nullable<Scene> = null) {\r\n this.name = name;\r\n this.id = name;\r\n this._scene = <Scene>(scene || EngineStore.LastCreatedScene);\r\n this.uniqueId = this._scene.getUniqueId();\r\n this._initCache();\r\n }\r\n\r\n /**\r\n * Gets the scene of the node\r\n * @returns a scene\r\n */\r\n public getScene(): Scene {\r\n return this._scene;\r\n }\r\n\r\n /**\r\n * Gets the engine of the node\r\n * @returns a Engine\r\n */\r\n public getEngine(): Engine {\r\n return this._scene.getEngine();\r\n }\r\n\r\n // Behaviors\r\n private _behaviors = new Array<Behavior<Node>>();\r\n\r\n /**\r\n * Attach a behavior to the node\r\n * @see https://doc.babylonjs.com/features/behaviour\r\n * @param behavior defines the behavior to attach\r\n * @param attachImmediately defines that the behavior must be attached even if the scene is still loading\r\n * @returns the current Node\r\n */\r\n public addBehavior(behavior: Behavior<Node>, attachImmediately = false): Node {\r\n const index = this._behaviors.indexOf(behavior);\r\n\r\n if (index !== -1) {\r\n return this;\r\n }\r\n\r\n behavior.init();\r\n if (this._scene.isLoading && !attachImmediately) {\r\n // We defer the attach when the scene will be loaded\r\n this._scene.onDataLoadedObservable.addOnce(() => {\r\n behavior.attach(this);\r\n });\r\n } else {\r\n behavior.attach(this);\r\n }\r\n this._behaviors.push(behavior);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Remove an attached behavior\r\n * @see https://doc.babylonjs.com/features/behaviour\r\n * @param behavior defines the behavior to attach\r\n * @returns the current Node\r\n */\r\n public removeBehavior(behavior: Behavior<Node>): Node {\r\n const index = this._behaviors.indexOf(behavior);\r\n\r\n if (index === -1) {\r\n return this;\r\n }\r\n\r\n this._behaviors[index].detach();\r\n this._behaviors.splice(index, 1);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets the list of attached behaviors\r\n * @see https://doc.babylonjs.com/features/behaviour\r\n */\r\n public get behaviors(): Behavior<Node>[] {\r\n return this._behaviors;\r\n }\r\n\r\n /**\r\n * Gets an attached behavior by name\r\n * @param name defines the name of the behavior to look for\r\n * @see https://doc.babylonjs.com/features/behaviour\r\n * @returns null if behavior was not found else the requested behavior\r\n */\r\n public getBehaviorByName(name: string): Nullable<Behavior<Node>> {\r\n for (const behavior of this._behaviors) {\r\n if (behavior.name === name) {\r\n return behavior;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Returns the latest update of the World matrix\r\n * @returns a Matrix\r\n */\r\n public getWorldMatrix(): Matrix {\r\n if (this._currentRenderId !== this._scene.getRenderId()) {\r\n this.computeWorldMatrix();\r\n }\r\n return this._worldMatrix;\r\n }\r\n\r\n /** @hidden */\r\n public _getWorldMatrixDeterminant(): number {\r\n if (this._worldMatrixDeterminantIsDirty) {\r\n this._worldMatrixDeterminantIsDirty = false;\r\n this._worldMatrixDeterminant = this._worldMatrix.determinant();\r\n }\r\n return this._worldMatrixDeterminant;\r\n }\r\n\r\n /**\r\n * Returns directly the latest state of the mesh World matrix.\r\n * A Matrix is returned.\r\n */\r\n public get worldMatrixFromCache(): Matrix {\r\n return this._worldMatrix;\r\n }\r\n\r\n // override it in derived class if you add new variables to the cache\r\n // and call the parent class method\r\n /** @hidden */\r\n public _initCache() {\r\n this._cache = {};\r\n this._cache.parent = undefined;\r\n }\r\n\r\n /**\r\n * @param force\r\n * @hidden\r\n */\r\n public updateCache(force?: boolean): void {\r\n if (!force && this.isSynchronized()) {\r\n return;\r\n }\r\n\r\n this._cache.parent = this.parent;\r\n\r\n this._updateCache();\r\n }\r\n\r\n /**\r\n * @param trigger\r\n * @param initialCall\r\n * @hidden\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public _getActionManagerForTrigger(trigger?: number, initialCall = true): Nullable<AbstractActionManager> {\r\n if (!this.parent) {\r\n return null;\r\n }\r\n\r\n return this.parent._getActionManagerForTrigger(trigger, false);\r\n }\r\n\r\n // override it in derived class if you add new variables to the cache\r\n // and call the parent class method if !ignoreParentClass\r\n /**\r\n * @param ignoreParentClass\r\n * @hidden\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public _updateCache(ignoreParentClass?: boolean): void {}\r\n\r\n // override it in derived class if you add new variables to the cache\r\n /** @hidden */\r\n public _isSynchronized(): boolean {\r\n return true;\r\n }\r\n\r\n /** @hidden */\r\n public _markSyncedWithParent() {\r\n if (this._parentNode) {\r\n this._parentUpdateId = this._parentNode._childUpdateId;\r\n }\r\n }\r\n\r\n /** @hidden */\r\n public isSynchronizedWithParent(): boolean {\r\n if (!this._parentNode) {\r\n return true;\r\n }\r\n\r\n if (this._parentNode._isDirty || this._parentUpdateId !== this._parentNode._childUpdateId) {\r\n return false;\r\n }\r\n\r\n return this._parentNode.isSynchronized();\r\n }\r\n\r\n /** @hidden */\r\n public isSynchronized(): boolean {\r\n if (this._cache.parent !== this._parentNode) {\r\n this._cache.parent = this._parentNode;\r\n return false;\r\n }\r\n\r\n if (this._parentNode && !this.isSynchronizedWithParent()) {\r\n return false;\r\n }\r\n\r\n return this._isSynchronized();\r\n }\r\n\r\n /**\r\n * Is this node ready to be used/rendered\r\n * @param completeCheck defines if a complete check (including materials and lights) has to be done (false by default)\r\n * @return true if the node is ready\r\n */\r\n public isReady(completeCheck = false): boolean {\r\n return this._nodeDataStorage._isReady;\r\n }\r\n\r\n /**\r\n * Flag the node as dirty (Forcing it to update everything)\r\n * @param property helps children apply precise \"dirtyfication\"\r\n * @returns this node\r\n */\r\n public markAsDirty(property?: string): Node {\r\n this._currentRenderId = Number.MAX_VALUE;\r\n this._isDirty = true;\r\n return this;\r\n }\r\n\r\n /**\r\n * Is this node enabled?\r\n * If the node has a parent, all ancestors will be checked and false will be returned if any are false (not enabled), otherwise will return true\r\n * @param checkAncestors indicates if this method should check the ancestors. The default is to check the ancestors. If set to false, the method will return the value of this node without checking ancestors\r\n * @return whether this node (and its parent) is enabled\r\n */\r\n public isEnabled(checkAncestors: boolean = true): boolean {\r\n if (checkAncestors === false) {\r\n return this._nodeDataStorage._isEnabled;\r\n }\r\n\r\n if (!this._nodeDataStorage._isEnabled) {\r\n return false;\r\n }\r\n\r\n return this._nodeDataStorage._isParentEnabled;\r\n }\r\n\r\n /** @hidden */\r\n protected _syncParentEnabledState() {\r\n this._nodeDataStorage._isParentEnabled = this._parentNode ? this._parentNode.isEnabled() : true;\r\n\r\n if (this._children) {\r\n this._children.forEach((c) => {\r\n c._syncParentEnabledState(); // Force children to update accordingly\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Set the enabled state of this node\r\n * @param value defines the new enabled state\r\n */\r\n public setEnabled(value: boolean): void {\r\n if (this._nodeDataStorage._isEnabled === value) {\r\n return;\r\n }\r\n this._nodeDataStorage._isEnabled = value;\r\n\r\n this._nodeDataStorage._onEnabledStateChangedObservable.notifyObservers(value);\r\n\r\n this._syncParentEnabledState();\r\n }\r\n\r\n /**\r\n * Is this node a descendant of the given node?\r\n * The function will iterate up the hierarchy until the ancestor was found or no more parents defined\r\n * @param ancestor defines the parent node to inspect\r\n * @returns a boolean indicating if this node is a descendant of the given node\r\n */\r\n public isDescendantOf(ancestor: Node): boolean {\r\n if (this.parent) {\r\n if (this.parent === ancestor) {\r\n return true;\r\n }\r\n\r\n return this.parent.isDescendantOf(ancestor);\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * @param results\r\n * @param directDescendantsOnly\r\n * @param predicate\r\n * @hidden\r\n */\r\n public _getDescendants(results: Node[], directDescendantsOnly: boolean = false, predicate?: (node: Node) => boolean): void {\r\n if (!this._children) {\r\n return;\r\n }\r\n\r\n for (let index = 0; index < this._children.length; index++) {\r\n const item = this._children[index];\r\n\r\n if (!predicate || predicate(item)) {\r\n results.push(item);\r\n }\r\n\r\n if (!directDescendantsOnly) {\r\n item._getDescendants(results, false, predicate);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Will return all nodes that have this node as ascendant\r\n * @param directDescendantsOnly defines if true only direct descendants of 'this' will be considered, if false direct and also indirect (children of children, an so on in a recursive manner) descendants of 'this' will be considered\r\n * @param predicate defines an optional predicate that will be called on every evaluated child, the predicate must return true for a given child to be part of the result, otherwise it will be ignored\r\n * @return all children nodes of all types\r\n */\r\n public getDescendants<T extends Node>(directDescendantsOnly?: boolean, predicate?: (node: Node) => node is T): T[];\r\n\r\n /**\r\n * Will return all nodes that have this node as ascendant\r\n * @param directDescendantsOnly defines if true only direct descendants of 'this' will be considered, if false direct and also indirect (children of children, an so on in a recursive manner) descendants of 'this' will be considered\r\n * @param predicate defines an optional predicate that will be called on every evaluated child, the predicate must return true for a given child to be part of the result, otherwise it will be ignored\r\n * @return all children nodes of all types\r\n */\r\n public getDescendants(directDescendantsOnly?: boolean, predicate?: (node: Node) => boolean): Node[];\r\n\r\n /**\r\n * Will return all nodes that have this node as ascendant\r\n * @param directDescendantsOnly defines if true only direct descendants of 'this' will be considered, if false direct and also indirect (children of children, an so on in a recursive manner) descendants of 'this' will be considered\r\n * @param predicate defines an optional predicate that will be called on every evaluated child, the predicate must return true for a given child to be part of the result, otherwise it will be ignored\r\n * @return all children nodes of all types\r\n */\r\n public getDescendants(directDescendantsOnly?: boolean, predicate?: (node: Node) => boolean): Node[] {\r\n const results = new Array<Node>();\r\n\r\n this._getDescendants(results, directDescendantsOnly, predicate);\r\n\r\n return results;\r\n }\r\n\r\n /**\r\n * Get all child-meshes of this node\r\n * @param directDescendantsOnly defines if true only direct descendants of 'this' will be considered, if false direct and also indirect (children of children, an so on in a recursive manner) descendants of 'this' will be considered (Default: false)\r\n * @param predicate defines an optional predicate that will be called on every evaluated child, the predicate must return true for a given child to be part of the result, otherwise it will be ignored\r\n * @returns an array of AbstractMesh\r\n */\r\n public getChildMeshes<T extends AbstractMesh>(directDescendantsOnly?: boolean, predicate?: (node: Node) => node is T): T[];\r\n\r\n /**\r\n * Get all child-meshes of this node\r\n * @param directDescendantsOnly defines if true only direct descendants of 'this' will be considered, if false direct and also indirect (children of children, an so on in a recursive manner) descendants of 'this' will be considered (Default: false)\r\n * @param predicate defines an optional predicate that will be called on every evaluated child, the predicate must return true for a given child to be part of the result, otherwise it will be ignored\r\n * @returns an array of AbstractMesh\r\n */\r\n public getChildMeshes(directDescendantsOnly?: boolean, predicate?: (node: Node) => boolean): AbstractMesh[];\r\n\r\n /**\r\n * Get all child-meshes of this node\r\n * @param directDescendantsOnly defines if true only direct descendants of 'this' will be considered, if false direct and also indirect (children of children, an so on in a recursive manner) descendants of 'this' will be considered (Default: false)\r\n * @param predicate defines an optional predicate that will be called on every evaluated child, the predicate must return true for a given child to be part of the result, otherwise it will be ignored\r\n * @returns an array of AbstractMesh\r\n */\r\n public getChildMeshes(directDescendantsOnly?: boolean, predicate?: (node: Node) => boolean): AbstractMesh[] {\r\n const results: Array<AbstractMesh> = [];\r\n this._getDescendants(results, directDescendantsOnly, (node: Node) => {\r\n return (!predicate || predicate(node)) && (<AbstractMesh>node).cullingStrategy !== undefined;\r\n });\r\n return results;\r\n }\r\n\r\n /**\r\n * Get all direct children of this node\r\n * @param predicate defines an optional predicate that will be called on every evaluated child, the predicate must return true for a given child to be part of the result, otherwise it will be ignored\r\n * @param directDescendantsOnly defines if true only direct descendants of 'this' will be considered, if false direct and also indirect (children of children, an so on in a recursive manner) descendants of 'this' will be considered (Default: true)\r\n * @returns an array of Node\r\n */\r\n public getChildren<T extends Node>(predicate?: (node: Node) => node is T, directDescendantsOnly?: boolean): T[];\r\n\r\n /**\r\n * Get all direct children of this node\r\n * @param predicate defines an optional predicate that will be called on every evaluated child, the predicate must return true for a given child to be part of the result, otherwise it will be ignored\r\n * @param directDescendantsOnly defines if true only direct descendants of 'this' will be considered, if false direct and also indirect (children of children, an so on in a recursive manner) descendants of 'this' will be considered (Default: true)\r\n * @returns an array of Node\r\n */\r\n public getChildren(predicate?: (node: Node) => boolean, directDescendantsOnly?: boolean): Node[];\r\n\r\n /**\r\n * Get all direct children of this node\r\n * @param predicate defines an optional predicate that will be called on every evaluated child, the predicate must return true for a given child to be part of the result, otherwise it will be ignored\r\n * @param directDescendantsOnly defines if true only direct descendants of 'this' will be considered, if false direct and also indirect (children of children, an so on in a recursive manner) descendants of 'this' will be considered (Default: true)\r\n * @returns an array of Node\r\n */\r\n public getChildren(predicate?: (node: Node) => boolean, directDescendantsOnly = true): Node[] {\r\n return this.getDescendants(directDescendantsOnly, predicate);\r\n }\r\n\r\n /**\r\n * @param state\r\n * @hidden\r\n */\r\n public _setReady(state: boolean): void {\r\n if (state === this._nodeDataStorage._isReady) {\r\n return;\r\n }\r\n\r\n if (!state) {\r\n this._nodeDataStorage._isReady = false;\r\n return;\r\n }\r\n\r\n if (this.onReady) {\r\n this.onReady(this);\r\n }\r\n this._nodeDataStorage._isReady = true;\r\n }\r\n\r\n /**\r\n * Get an animation by name\r\n * @param name defines the name of the animation to look for\r\n * @returns null if not found else the requested animation\r\n */\r\n public getAnimationByName(name: string): Nullable<Animation> {\r\n for (let i = 0; i < this.animations.length; i++) {\r\n const animation = this.animations[i];\r\n\r\n if (animation.name === name) {\r\n return animation;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Creates an animation range for this node\r\n * @param name defines the name of the range\r\n * @param from defines the starting key\r\n * @param to defines the end key\r\n */\r\n public createAnimationRange(name: string, from: number, to: number): void {\r\n // check name not already in use\r\n if (!this._ranges[name]) {\r\n this._ranges[name] = Node._AnimationRangeFactory(name, from, to);\r\n for (let i = 0, nAnimations = this.animations.length; i < nAnimations; i++) {\r\n if (this.animations[i]) {\r\n this.animations[i].createRange(name, from, to);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Delete a specific animation range\r\n * @param name defines the name of the range to delete\r\n * @param deleteFrames defines if animation frames from the range must be deleted as well\r\n */\r\n public deleteAnimationRange(name: string, deleteFrames = true): void {\r\n for (let i = 0, nAnimations = this.animations.length; i < nAnimations; i++) {\r\n if (this.animations[i]) {\r\n this.animations[i].deleteRange(name, deleteFrames);\r\n }\r\n }\r\n this._ranges[name] = null; // said much faster than 'delete this._range[name]'\r\n }\r\n\r\n /**\r\n * Get an animation range by name\r\n * @param name defines the name of the animation range to look for\r\n * @returns null if not found else the requested animation range\r\n */\r\n public getAnimationRange(name: string): Nullable<AnimationRange> {\r\n return this._ranges[name] || null;\r\n }\r\n\r\n /**\r\n * Gets the list of all animation ranges defined on this node\r\n * @returns an array\r\n */\r\n public getAnimationRanges(): Nullable<AnimationRange>[] {\r\n const animationRanges: Nullable<AnimationRange>[] = [];\r\n let name: string;\r\n for (name in this._ranges) {\r\n animationRanges.push(this._ranges[name]);\r\n }\r\n return animationRanges;\r\n }\r\n\r\n /**\r\n * Will start the animation sequence\r\n * @param name defines the range frames for animation sequence\r\n * @param loop defines if the animation should loop (false by default)\r\n * @param speedRatio defines the speed factor in which to run the animation (1 by default)\r\n * @param onAnimationEnd defines a function to be executed when the animation ended (undefined by default)\r\n * @returns the object created for this animation. If range does not exist, it will return null\r\n */\r\n public beginAnimation(name: string, loop?: boolean, speedRatio?: number, onAnimationEnd?: () => void): Nullable<Animatable> {\r\n const range = this.getAnimationRange(name);\r\n\r\n if (!range) {\r\n return null;\r\n }\r\n\r\n return this._scene.beginAnimation(this, range.from, range.to, loop, speedRatio, onAnimationEnd);\r\n }\r\n\r\n /**\r\n * Serialize animation ranges into a JSON compatible object\r\n * @returns serialization object\r\n */\r\n public serializeAnimationRanges(): any {\r\n const serializationRanges = [];\r\n for (const name in this._ranges) {\r\n const localRange = this._ranges[name];\r\n if (!localRange) {\r\n continue;\r\n }\r\n const range: any = {};\r\n range.name = name;\r\n range.from = localRange.from;\r\n range.to = localRange.to;\r\n serializationRanges.push(range);\r\n }\r\n return serializationRanges;\r\n }\r\n\r\n /**\r\n * Computes the world matrix of the node\r\n * @param force defines if the cache version should be invalidated forcing the world matrix to be created from scratch\r\n * @returns the world matrix\r\n */\r\n public computeWorldMatrix(force?: boolean): Matrix {\r\n if (!this._worldMatrix) {\r\n this._worldMatrix = Matrix.Identity();\r\n }\r\n return this._worldMatrix;\r\n }\r\n\r\n /**\r\n * Releases resources associated with this node.\r\n * @param doNotRecurse Set to true to not recurse into each children (recurse into each children by default)\r\n * @param disposeMaterialAndTextures Set to true to also dispose referenced materials and textures (false by default)\r\n */\r\n public dispose(doNotRecurse?: boolean, disposeMaterialAndTextures = false): void {\r\n this._nodeDataStorage._isDisposed = true;\r\n\r\n if (!doNotRecurse) {\r\n const nodes = this.getDescendants(true);\r\n for (const node of nodes) {\r\n node.dispose(doNotRecurse, disposeMaterialAndTextures);\r\n }\r\n }\r\n\r\n if (!this.parent) {\r\n this._removeFromSceneRootNodes();\r\n } else {\r\n this.parent = null;\r\n }\r\n\r\n // Callback\r\n this.onDisposeObservable.notifyObservers(this);\r\n this.onDisposeObservable.clear();\r\n\r\n this.onEnabledStateChangedObservable.clear();\r\n this.onClonedObservable.clear();\r\n\r\n // Behaviors\r\n for (const behavior of this._behaviors) {\r\n behavior.detach();\r\n }\r\n\r\n this._behaviors = [];\r\n\r\n this.metadata = null;\r\n }\r\n\r\n /**\r\n * Parse animation range data from a serialization object and store them into a given node\r\n * @param node defines where to store the animation ranges\r\n * @param parsedNode defines the serialization object to read data from\r\n * @param scene defines the hosting scene\r\n */\r\n public static ParseAnimationRanges(node: Node, parsedNode: any, scene: Scene): void {\r\n if (parsedNode.ranges) {\r\n for (let index = 0; index < parsedNode.ranges.length; index++) {\r\n const data = parsedNode.ranges[index];\r\n node.createAnimationRange(data.name, data.from, data.to);\r\n }\r\n }\r\n }\r\n /**\r\n * Return the minimum and maximum world vectors of the entire hierarchy under current node\r\n * @param includeDescendants Include bounding info from descendants as well (true by default)\r\n * @param predicate defines a callback function that can be customize to filter what meshes should be included in the list used to compute the bounding vectors\r\n * @returns the new bounding vectors\r\n */\r\n public getHierarchyBoundingVectors(includeDescendants = true, predicate: Nullable<(abstractMesh: AbstractMesh) => boolean> = null): { min: Vector3; max: Vector3 } {\r\n // Ensures that all world matrix will be recomputed.\r\n this.getScene().incrementRenderId();\r\n\r\n this.computeWorldMatrix(true);\r\n\r\n let min: Vector3;\r\n let max: Vector3;\r\n\r\n const thisAbstractMesh = this as Node as AbstractMesh;\r\n if (thisAbstractMesh.getBoundingInfo && thisAbstractMesh.subMeshes) {\r\n // If this is an abstract mesh get its bounding info\r\n const boundingInfo = thisAbstractMesh.getBoundingInfo();\r\n min = boundingInfo.boundingBox.minimumWorld.clone();\r\n max = boundingInfo.boundingBox.maximumWorld.clone();\r\n } else {\r\n min = new Vector3(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);\r\n max = new Vector3(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);\r\n }\r\n\r\n if (includeDescendants) {\r\n const descendants = this.getDescendants(false);\r\n\r\n for (const descendant of descendants) {\r\n const childMesh = <AbstractMesh>descendant;\r\n childMesh.computeWorldMatrix(true);\r\n\r\n // Filters meshes based on custom predicate function.\r\n if (predicate && !predicate(childMesh)) {\r\n continue;\r\n }\r\n\r\n //make sure we have the needed params to get mix and max\r\n if (!childMesh.getBoundingInfo || childMesh.getTotalVertices() === 0) {\r\n continue;\r\n }\r\n\r\n const childBoundingInfo = childMesh.getBoundingInfo();\r\n const boundingBox = childBoundingInfo.boundingBox;\r\n\r\n const minBox = boundingBox.minimumWorld;\r\n const maxBox = boundingBox.maximumWorld;\r\n\r\n Vector3.CheckExtends(minBox, min, max);\r\n Vector3.CheckExtends(maxBox, min, max);\r\n }\r\n }\r\n\r\n return {\r\n min: min,\r\n max: max,\r\n };\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../../../lts/core/generated/node.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\r\nimport type { Scene } from \"./scene\";\r\nimport type { Nullable } from \"./types\";\r\nimport { Matrix, Vector3 } from \"./Maths/math.vector\";\r\nimport type { Engine } from \"./Engines/engine\";\r\nimport type { IBehaviorAware, Behavior } from \"./Behaviors/behavior\";\r\nimport { serialize } from \"./Misc/decorators\";\r\nimport type { Observer } from \"./Misc/observable\";\r\nimport { Observable } from \"./Misc/observable\";\r\nimport { EngineStore } from \"./Engines/engineStore\";\r\nimport { _WarnImport } from \"./Misc/devTools\";\r\nimport type { AbstractActionManager } from \"./Actions/abstractActionManager\";\r\nimport type { IInspectable } from \"./Misc/iInspectable\";\r\nimport type { AbstractScene } from \"./abstractScene\";\r\n\r\ndeclare type Animatable = import(\"./Animations/animatable\").Animatable;\r\ndeclare type AnimationPropertiesOverride = import(\"./Animations/animationPropertiesOverride\").AnimationPropertiesOverride;\r\ndeclare type Animation = import(\"./Animations/animation\").Animation;\r\ndeclare type AnimationRange = import(\"./Animations/animationRange\").AnimationRange;\r\ndeclare type AbstractMesh = import(\"./Meshes/abstractMesh\").AbstractMesh;\r\n\r\n/**\r\n * Defines how a node can be built from a string name.\r\n */\r\nexport type NodeConstructor = (name: string, scene: Scene, options?: any) => () => Node;\r\n\r\n/** @hidden */\r\nclass _InternalNodeDataInfo {\r\n public _doNotSerialize = false;\r\n public _isDisposed = false;\r\n public _sceneRootNodesIndex = -1;\r\n public _isEnabled = true;\r\n public _isParentEnabled = true;\r\n public _isReady = true;\r\n public _onEnabledStateChangedObservable = new Observable<boolean>();\r\n public _onClonedObservable = new Observable<Node>();\r\n}\r\n\r\n/**\r\n * Node is the basic class for all scene objects (Mesh, Light, Camera.)\r\n */\r\nexport class Node implements IBehaviorAware<Node> {\r\n protected _isDirty = false;\r\n\r\n /**\r\n * @param name\r\n * @param from\r\n * @param to\r\n * @hidden\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public static _AnimationRangeFactory = (name: string, from: number, to: number): AnimationRange => {\r\n throw _WarnImport(\"AnimationRange\");\r\n };\r\n\r\n private static _NodeConstructors: { [key: string]: any } = {};\r\n\r\n /**\r\n * Add a new node constructor\r\n * @param type defines the type name of the node to construct\r\n * @param constructorFunc defines the constructor function\r\n */\r\n public static AddNodeConstructor(type: string, constructorFunc: NodeConstructor) {\r\n this._NodeConstructors[type] = constructorFunc;\r\n }\r\n\r\n /**\r\n * Returns a node constructor based on type name\r\n * @param type defines the type name\r\n * @param name defines the new node name\r\n * @param scene defines the hosting scene\r\n * @param options defines optional options to transmit to constructors\r\n * @returns the new constructor or null\r\n */\r\n public static Construct(type: string, name: string, scene: Scene, options?: any): Nullable<() => Node> {\r\n const constructorFunc = this._NodeConstructors[type];\r\n\r\n if (!constructorFunc) {\r\n return null;\r\n }\r\n\r\n return constructorFunc(name, scene, options);\r\n }\r\n\r\n private _nodeDataStorage = new _InternalNodeDataInfo();\r\n\r\n /**\r\n * Gets or sets the name of the node\r\n */\r\n @serialize()\r\n public name: string;\r\n\r\n /**\r\n * Gets or sets the id of the node\r\n */\r\n @serialize()\r\n public id: string;\r\n\r\n /**\r\n * Gets or sets the unique id of the node\r\n */\r\n @serialize()\r\n public uniqueId: number;\r\n\r\n /**\r\n * Gets or sets a string used to store user defined state for the node\r\n */\r\n @serialize()\r\n public state = \"\";\r\n\r\n /**\r\n * Gets or sets an object used to store user defined information for the node\r\n */\r\n @serialize()\r\n public metadata: any = null;\r\n\r\n /**\r\n * For internal use only. Please do not use.\r\n */\r\n public reservedDataStore: any = null;\r\n\r\n /**\r\n * List of inspectable custom properties (used by the Inspector)\r\n * @see https://doc.babylonjs.com/how_to/debug_layer#extensibility\r\n */\r\n public inspectableCustomProperties: IInspectable[];\r\n\r\n /**\r\n * Gets or sets a boolean used to define if the node must be serialized\r\n */\r\n public get doNotSerialize() {\r\n if (this._nodeDataStorage._doNotSerialize) {\r\n return true;\r\n }\r\n\r\n if (this._parentNode) {\r\n return this._parentNode.doNotSerialize;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public set doNotSerialize(value: boolean) {\r\n this._nodeDataStorage._doNotSerialize = value;\r\n }\r\n\r\n /** @hidden */\r\n public _parentContainer: Nullable<AbstractScene> = null;\r\n\r\n /**\r\n * Gets a list of Animations associated with the node\r\n */\r\n public animations = new Array<Animation>();\r\n protected _ranges: { [name: string]: Nullable<AnimationRange> } = {};\r\n\r\n /**\r\n * Callback raised when the node is ready to be used\r\n */\r\n public onReady: Nullable<(node: Node) => void> = null;\r\n\r\n /** @hidden */\r\n public _currentRenderId = -1;\r\n private _parentUpdateId = -1;\r\n /** @hidden */\r\n public _childUpdateId = -1;\r\n\r\n /** @hidden */\r\n public _waitingParentId: Nullable<string> = null;\r\n /** @hidden */\r\n public _waitingParentInstanceIndex: Nullable<string> = null;\r\n /** @hidden */\r\n public _scene: Scene;\r\n /** @hidden */\r\n public _cache: any = {};\r\n\r\n protected _parentNode: Nullable<Node> = null;\r\n\r\n /** @hidden */\r\n protected _children: Nullable<Node[]> = null;\r\n\r\n /** @hidden */\r\n public _worldMatrix = Matrix.Identity();\r\n /** @hidden */\r\n public _worldMatrixDeterminant = 0;\r\n /** @hidden */\r\n public _worldMatrixDeterminantIsDirty = true;\r\n\r\n /**\r\n * Gets a boolean indicating if the node has been disposed\r\n * @returns true if the node was disposed\r\n */\r\n public isDisposed(): boolean {\r\n return this._nodeDataStorage._isDisposed;\r\n }\r\n\r\n /**\r\n * Gets or sets the parent of the node (without keeping the current position in the scene)\r\n * @see https://doc.babylonjs.com/how_to/parenting\r\n */\r\n public set parent(parent: Nullable<Node>) {\r\n if (this._parentNode === parent) {\r\n return;\r\n }\r\n\r\n const previousParentNode = this._parentNode;\r\n\r\n // Remove self from list of children of parent\r\n if (this._parentNode && this._parentNode._children !== undefined && this._parentNode._children !== null) {\r\n const index = this._parentNode._children.indexOf(this);\r\n if (index !== -1) {\r\n this._parentNode._children.splice(index, 1);\r\n }\r\n\r\n if (!parent && !this._nodeDataStorage._isDisposed) {\r\n this._addToSceneRootNodes();\r\n }\r\n }\r\n\r\n // Store new parent\r\n this._parentNode = parent;\r\n\r\n // Add as child to new parent\r\n if (this._parentNode) {\r\n if (this._parentNode._children === undefined || this._parentNode._children === null) {\r\n this._parentNode._children = new Array<Node>();\r\n }\r\n this._parentNode._children.push(this);\r\n\r\n if (!previousParentNode) {\r\n this._removeFromSceneRootNodes();\r\n }\r\n }\r\n\r\n // Enabled state\r\n this._syncParentEnabledState();\r\n }\r\n\r\n public get parent(): Nullable<Node> {\r\n return this._parentNode;\r\n }\r\n\r\n /**\r\n * @param serializationObject\r\n * @hidden\r\n */\r\n public _serializeAsParent(serializationObject: any): void {\r\n serializationObject.parentId = this.uniqueId;\r\n }\r\n\r\n /** @hidden */\r\n public _addToSceneRootNodes() {\r\n if (this._nodeDataStorage._sceneRootNodesIndex === -1) {\r\n this._nodeDataStorage._sceneRootNodesIndex = this._scene.rootNodes.length;\r\n this._scene.rootNodes.push(this);\r\n }\r\n }\r\n\r\n /** @hidden */\r\n public _removeFromSceneRootNodes() {\r\n if (this._nodeDataStorage._sceneRootNodesIndex !== -1) {\r\n const rootNodes = this._scene.rootNodes;\r\n const lastIdx = rootNodes.length - 1;\r\n rootNodes[this._nodeDataStorage._sceneRootNodesIndex] = rootNodes[lastIdx];\r\n rootNodes[this._nodeDataStorage._sceneRootNodesIndex]._nodeDataStorage._sceneRootNodesIndex = this._nodeDataStorage._sceneRootNodesIndex;\r\n this._scene.rootNodes.pop();\r\n this._nodeDataStorage._sceneRootNodesIndex = -1;\r\n }\r\n }\r\n\r\n private _animationPropertiesOverride: Nullable<AnimationPropertiesOverride> = null;\r\n\r\n /**\r\n * Gets or sets the animation properties override\r\n */\r\n public get animationPropertiesOverride(): Nullable<AnimationPropertiesOverride> {\r\n if (!this._animationPropertiesOverride) {\r\n return this._scene.animationPropertiesOverride;\r\n }\r\n return this._animationPropertiesOverride;\r\n }\r\n\r\n public set animationPropertiesOverride(value: Nullable<AnimationPropertiesOverride>) {\r\n this._animationPropertiesOverride = value;\r\n }\r\n\r\n /**\r\n * Gets a string identifying the name of the class\r\n * @returns \"Node\" string\r\n */\r\n public getClassName(): string {\r\n return \"Node\";\r\n }\r\n\r\n /** @hidden */\r\n public readonly _isNode = true;\r\n\r\n /**\r\n * An event triggered when the mesh is disposed\r\n */\r\n public onDisposeObservable = new Observable<Node>();\r\n\r\n private _onDisposeObserver: Nullable<Observer<Node>> = null;\r\n /**\r\n * Sets a callback that will be raised when the node will be disposed\r\n */\r\n public set onDispose(callback: () => void) {\r\n if (this._onDisposeObserver) {\r\n this.onDisposeObservable.remove(this._onDisposeObserver);\r\n }\r\n this._onDisposeObserver = this.onDisposeObservable.add(callback);\r\n }\r\n\r\n /**\r\n * An event triggered when the enabled state of the node changes\r\n */\r\n public get onEnabledStateChangedObservable(): Observable<boolean> {\r\n return this._nodeDataStorage._onEnabledStateChangedObservable;\r\n }\r\n\r\n /**\r\n * An event triggered when the node is cloned\r\n */\r\n public get onClonedObservable(): Observable<Node> {\r\n return this._nodeDataStorage._onClonedObservable;\r\n }\r\n\r\n /**\r\n * Creates a new Node\r\n * @param name the name and id to be given to this node\r\n * @param scene the scene this node will be added to\r\n */\r\n constructor(name: string, scene: Nullable<Scene> = null) {\r\n this.name = name;\r\n this.id = name;\r\n this._scene = <Scene>(scene || EngineStore.LastCreatedScene);\r\n this.uniqueId = this._scene.getUniqueId();\r\n this._initCache();\r\n }\r\n\r\n /**\r\n * Gets the scene of the node\r\n * @returns a scene\r\n */\r\n public getScene(): Scene {\r\n return this._scene;\r\n }\r\n\r\n /**\r\n * Gets the engine of the node\r\n * @returns a Engine\r\n */\r\n public getEngine(): Engine {\r\n return this._scene.getEngine();\r\n }\r\n\r\n // Behaviors\r\n private _behaviors = new Array<Behavior<Node>>();\r\n\r\n /**\r\n * Attach a behavior to the node\r\n * @see https://doc.babylonjs.com/features/behaviour\r\n * @param behavior defines the behavior to attach\r\n * @param attachImmediately defines that the behavior must be attached even if the scene is still loading\r\n * @returns the current Node\r\n */\r\n public addBehavior(behavior: Behavior<Node>, attachImmediately = false): Node {\r\n const index = this._behaviors.indexOf(behavior);\r\n\r\n if (index !== -1) {\r\n return this;\r\n }\r\n\r\n behavior.init();\r\n if (this._scene.isLoading && !attachImmediately) {\r\n // We defer the attach when the scene will be loaded\r\n this._scene.onDataLoadedObservable.addOnce(() => {\r\n behavior.attach(this);\r\n });\r\n } else {\r\n behavior.attach(this);\r\n }\r\n this._behaviors.push(behavior);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Remove an attached behavior\r\n * @see https://doc.babylonjs.com/features/behaviour\r\n * @param behavior defines the behavior to attach\r\n * @returns the current Node\r\n */\r\n public removeBehavior(behavior: Behavior<Node>): Node {\r\n const index = this._behaviors.indexOf(behavior);\r\n\r\n if (index === -1) {\r\n return this;\r\n }\r\n\r\n this._behaviors[index].detach();\r\n this._behaviors.splice(index, 1);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets the list of attached behaviors\r\n * @see https://doc.babylonjs.com/features/behaviour\r\n */\r\n public get behaviors(): Behavior<Node>[] {\r\n return this._behaviors;\r\n }\r\n\r\n /**\r\n * Gets an attached behavior by name\r\n * @param name defines the name of the behavior to look for\r\n * @see https://doc.babylonjs.com/features/behaviour\r\n * @returns null if behavior was not found else the requested behavior\r\n */\r\n public getBehaviorByName(name: string): Nullable<Behavior<Node>> {\r\n for (const behavior of this._behaviors) {\r\n if (behavior.name === name) {\r\n return behavior;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Returns the latest update of the World matrix\r\n * @returns a Matrix\r\n */\r\n public getWorldMatrix(): Matrix {\r\n if (this._currentRenderId !== this._scene.getRenderId()) {\r\n this.computeWorldMatrix();\r\n }\r\n return this._worldMatrix;\r\n }\r\n\r\n /** @hidden */\r\n public _getWorldMatrixDeterminant(): number {\r\n if (this._worldMatrixDeterminantIsDirty) {\r\n this._worldMatrixDeterminantIsDirty = false;\r\n this._worldMatrixDeterminant = this._worldMatrix.determinant();\r\n }\r\n return this._worldMatrixDeterminant;\r\n }\r\n\r\n /**\r\n * Returns directly the latest state of the mesh World matrix.\r\n * A Matrix is returned.\r\n */\r\n public get worldMatrixFromCache(): Matrix {\r\n return this._worldMatrix;\r\n }\r\n\r\n // override it in derived class if you add new variables to the cache\r\n // and call the parent class method\r\n /** @hidden */\r\n public _initCache() {\r\n this._cache = {};\r\n this._cache.parent = undefined;\r\n }\r\n\r\n /**\r\n * @param force\r\n * @hidden\r\n */\r\n public updateCache(force?: boolean): void {\r\n if (!force && this.isSynchronized()) {\r\n return;\r\n }\r\n\r\n this._cache.parent = this.parent;\r\n\r\n this._updateCache();\r\n }\r\n\r\n /**\r\n * @param trigger\r\n * @param initialCall\r\n * @hidden\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public _getActionManagerForTrigger(trigger?: number, initialCall = true): Nullable<AbstractActionManager> {\r\n if (!this.parent) {\r\n return null;\r\n }\r\n\r\n return this.parent._getActionManagerForTrigger(trigger, false);\r\n }\r\n\r\n // override it in derived class if you add new variables to the cache\r\n // and call the parent class method if !ignoreParentClass\r\n /**\r\n * @param ignoreParentClass\r\n * @hidden\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public _updateCache(ignoreParentClass?: boolean): void {}\r\n\r\n // override it in derived class if you add new variables to the cache\r\n /** @hidden */\r\n public _isSynchronized(): boolean {\r\n return true;\r\n }\r\n\r\n /** @hidden */\r\n public _markSyncedWithParent() {\r\n if (this._parentNode) {\r\n this._parentUpdateId = this._parentNode._childUpdateId;\r\n }\r\n }\r\n\r\n /** @hidden */\r\n public isSynchronizedWithParent(): boolean {\r\n if (!this._parentNode) {\r\n return true;\r\n }\r\n\r\n if (this._parentNode._isDirty || this._parentUpdateId !== this._parentNode._childUpdateId) {\r\n return false;\r\n }\r\n\r\n return this._parentNode.isSynchronized();\r\n }\r\n\r\n /** @hidden */\r\n public isSynchronized(): boolean {\r\n if (this._cache.parent !== this._parentNode) {\r\n this._cache.parent = this._parentNode;\r\n return false;\r\n }\r\n\r\n if (this._parentNode && !this.isSynchronizedWithParent()) {\r\n return false;\r\n }\r\n\r\n return this._isSynchronized();\r\n }\r\n\r\n /**\r\n * Is this node ready to be used/rendered\r\n * @param completeCheck defines if a complete check (including materials and lights) has to be done (false by default)\r\n * @return true if the node is ready\r\n */\r\n public isReady(completeCheck = false): boolean {\r\n return this._nodeDataStorage._isReady;\r\n }\r\n\r\n /**\r\n * Flag the node as dirty (Forcing it to update everything)\r\n * @param property helps children apply precise \"dirtyfication\"\r\n * @returns this node\r\n */\r\n public markAsDirty(property?: string): Node {\r\n this._currentRenderId = Number.MAX_VALUE;\r\n this._isDirty = true;\r\n return this;\r\n }\r\n\r\n /**\r\n * Is this node enabled?\r\n * If the node has a parent, all ancestors will be checked and false will be returned if any are false (not enabled), otherwise will return true\r\n * @param checkAncestors indicates if this method should check the ancestors. The default is to check the ancestors. If set to false, the method will return the value of this node without checking ancestors\r\n * @return whether this node (and its parent) is enabled\r\n */\r\n public isEnabled(checkAncestors: boolean = true): boolean {\r\n if (checkAncestors === false) {\r\n return this._nodeDataStorage._isEnabled;\r\n }\r\n\r\n if (!this._nodeDataStorage._isEnabled) {\r\n return false;\r\n }\r\n\r\n return this._nodeDataStorage._isParentEnabled;\r\n }\r\n\r\n /** @hidden */\r\n protected _syncParentEnabledState() {\r\n this._nodeDataStorage._isParentEnabled = this._parentNode ? this._parentNode.isEnabled() : true;\r\n\r\n if (this._children) {\r\n this._children.forEach((c) => {\r\n c._syncParentEnabledState(); // Force children to update accordingly\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Set the enabled state of this node\r\n * @param value defines the new enabled state\r\n */\r\n public setEnabled(value: boolean): void {\r\n if (this._nodeDataStorage._isEnabled === value) {\r\n return;\r\n }\r\n this._nodeDataStorage._isEnabled = value;\r\n\r\n this._nodeDataStorage._onEnabledStateChangedObservable.notifyObservers(value);\r\n\r\n this._syncParentEnabledState();\r\n }\r\n\r\n /**\r\n * Is this node a descendant of the given node?\r\n * The function will iterate up the hierarchy until the ancestor was found or no more parents defined\r\n * @param ancestor defines the parent node to inspect\r\n * @returns a boolean indicating if this node is a descendant of the given node\r\n */\r\n public isDescendantOf(ancestor: Node): boolean {\r\n if (this.parent) {\r\n if (this.parent === ancestor) {\r\n return true;\r\n }\r\n\r\n return this.parent.isDescendantOf(ancestor);\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * @param results\r\n * @param directDescendantsOnly\r\n * @param predicate\r\n * @hidden\r\n */\r\n public _getDescendants(results: Node[], directDescendantsOnly: boolean = false, predicate?: (node: Node) => boolean): void {\r\n if (!this._children) {\r\n return;\r\n }\r\n\r\n for (let index = 0; index < this._children.length; index++) {\r\n const item = this._children[index];\r\n\r\n if (!predicate || predicate(item)) {\r\n results.push(item);\r\n }\r\n\r\n if (!directDescendantsOnly) {\r\n item._getDescendants(results, false, predicate);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Will return all nodes that have this node as ascendant\r\n * @param directDescendantsOnly defines if true only direct descendants of 'this' will be considered, if false direct and also indirect (children of children, an so on in a recursive manner) descendants of 'this' will be considered\r\n * @param predicate defines an optional predicate that will be called on every evaluated child, the predicate must return true for a given child to be part of the result, otherwise it will be ignored\r\n * @return all children nodes of all types\r\n */\r\n public getDescendants<T extends Node>(directDescendantsOnly?: boolean, predicate?: (node: Node) => node is T): T[];\r\n\r\n /**\r\n * Will return all nodes that have this node as ascendant\r\n * @param directDescendantsOnly defines if true only direct descendants of 'this' will be considered, if false direct and also indirect (children of children, an so on in a recursive manner) descendants of 'this' will be considered\r\n * @param predicate defines an optional predicate that will be called on every evaluated child, the predicate must return true for a given child to be part of the result, otherwise it will be ignored\r\n * @return all children nodes of all types\r\n */\r\n public getDescendants(directDescendantsOnly?: boolean, predicate?: (node: Node) => boolean): Node[];\r\n\r\n /**\r\n * Will return all nodes that have this node as ascendant\r\n * @param directDescendantsOnly defines if true only direct descendants of 'this' will be considered, if false direct and also indirect (children of children, an so on in a recursive manner) descendants of 'this' will be considered\r\n * @param predicate defines an optional predicate that will be called on every evaluated child, the predicate must return true for a given child to be part of the result, otherwise it will be ignored\r\n * @return all children nodes of all types\r\n */\r\n public getDescendants(directDescendantsOnly?: boolean, predicate?: (node: Node) => boolean): Node[] {\r\n const results = new Array<Node>();\r\n\r\n this._getDescendants(results, directDescendantsOnly, predicate);\r\n\r\n return results;\r\n }\r\n\r\n /**\r\n * Get all child-meshes of this node\r\n * @param directDescendantsOnly defines if true only direct descendants of 'this' will be considered, if false direct and also indirect (children of children, an so on in a recursive manner) descendants of 'this' will be considered (Default: false)\r\n * @param predicate defines an optional predicate that will be called on every evaluated child, the predicate must return true for a given child to be part of the result, otherwise it will be ignored\r\n * @returns an array of AbstractMesh\r\n */\r\n public getChildMeshes<T extends AbstractMesh>(directDescendantsOnly?: boolean, predicate?: (node: Node) => node is T): T[];\r\n\r\n /**\r\n * Get all child-meshes of this node\r\n * @param directDescendantsOnly defines if true only direct descendants of 'this' will be considered, if false direct and also indirect (children of children, an so on in a recursive manner) descendants of 'this' will be considered (Default: false)\r\n * @param predicate defines an optional predicate that will be called on every evaluated child, the predicate must return true for a given child to be part of the result, otherwise it will be ignored\r\n * @returns an array of AbstractMesh\r\n */\r\n public getChildMeshes(directDescendantsOnly?: boolean, predicate?: (node: Node) => boolean): AbstractMesh[];\r\n\r\n /**\r\n * Get all child-meshes of this node\r\n * @param directDescendantsOnly defines if true only direct descendants of 'this' will be considered, if false direct and also indirect (children of children, an so on in a recursive manner) descendants of 'this' will be considered (Default: false)\r\n * @param predicate defines an optional predicate that will be called on every evaluated child, the predicate must return true for a given child to be part of the result, otherwise it will be ignored\r\n * @returns an array of AbstractMesh\r\n */\r\n public getChildMeshes(directDescendantsOnly?: boolean, predicate?: (node: Node) => boolean): AbstractMesh[] {\r\n const results: Array<AbstractMesh> = [];\r\n this._getDescendants(results, directDescendantsOnly, (node: Node) => {\r\n return (!predicate || predicate(node)) && (<AbstractMesh>node).cullingStrategy !== undefined;\r\n });\r\n return results;\r\n }\r\n\r\n /**\r\n * Get all direct children of this node\r\n * @param predicate defines an optional predicate that will be called on every evaluated child, the predicate must return true for a given child to be part of the result, otherwise it will be ignored\r\n * @param directDescendantsOnly defines if true only direct descendants of 'this' will be considered, if false direct and also indirect (children of children, an so on in a recursive manner) descendants of 'this' will be considered (Default: true)\r\n * @returns an array of Node\r\n */\r\n public getChildren<T extends Node>(predicate?: (node: Node) => node is T, directDescendantsOnly?: boolean): T[];\r\n\r\n /**\r\n * Get all direct children of this node\r\n * @param predicate defines an optional predicate that will be called on every evaluated child, the predicate must return true for a given child to be part of the result, otherwise it will be ignored\r\n * @param directDescendantsOnly defines if true only direct descendants of 'this' will be considered, if false direct and also indirect (children of children, an so on in a recursive manner) descendants of 'this' will be considered (Default: true)\r\n * @returns an array of Node\r\n */\r\n public getChildren(predicate?: (node: Node) => boolean, directDescendantsOnly?: boolean): Node[];\r\n\r\n /**\r\n * Get all direct children of this node\r\n * @param predicate defines an optional predicate that will be called on every evaluated child, the predicate must return true for a given child to be part of the result, otherwise it will be ignored\r\n * @param directDescendantsOnly defines if true only direct descendants of 'this' will be considered, if false direct and also indirect (children of children, an so on in a recursive manner) descendants of 'this' will be considered (Default: true)\r\n * @returns an array of Node\r\n */\r\n public getChildren(predicate?: (node: Node) => boolean, directDescendantsOnly = true): Node[] {\r\n return this.getDescendants(directDescendantsOnly, predicate);\r\n }\r\n\r\n /**\r\n * @param state\r\n * @hidden\r\n */\r\n public _setReady(state: boolean): void {\r\n if (state === this._nodeDataStorage._isReady) {\r\n return;\r\n }\r\n\r\n if (!state) {\r\n this._nodeDataStorage._isReady = false;\r\n return;\r\n }\r\n\r\n if (this.onReady) {\r\n this.onReady(this);\r\n }\r\n this._nodeDataStorage._isReady = true;\r\n }\r\n\r\n /**\r\n * Get an animation by name\r\n * @param name defines the name of the animation to look for\r\n * @returns null if not found else the requested animation\r\n */\r\n public getAnimationByName(name: string): Nullable<Animation> {\r\n for (let i = 0; i < this.animations.length; i++) {\r\n const animation = this.animations[i];\r\n\r\n if (animation.name === name) {\r\n return animation;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Creates an animation range for this node\r\n * @param name defines the name of the range\r\n * @param from defines the starting key\r\n * @param to defines the end key\r\n */\r\n public createAnimationRange(name: string, from: number, to: number): void {\r\n // check name not already in use\r\n if (!this._ranges[name]) {\r\n this._ranges[name] = Node._AnimationRangeFactory(name, from, to);\r\n for (let i = 0, nAnimations = this.animations.length; i < nAnimations; i++) {\r\n if (this.animations[i]) {\r\n this.animations[i].createRange(name, from, to);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Delete a specific animation range\r\n * @param name defines the name of the range to delete\r\n * @param deleteFrames defines if animation frames from the range must be deleted as well\r\n */\r\n public deleteAnimationRange(name: string, deleteFrames = true): void {\r\n for (let i = 0, nAnimations = this.animations.length; i < nAnimations; i++) {\r\n if (this.animations[i]) {\r\n this.animations[i].deleteRange(name, deleteFrames);\r\n }\r\n }\r\n this._ranges[name] = null; // said much faster than 'delete this._range[name]'\r\n }\r\n\r\n /**\r\n * Get an animation range by name\r\n * @param name defines the name of the animation range to look for\r\n * @returns null if not found else the requested animation range\r\n */\r\n public getAnimationRange(name: string): Nullable<AnimationRange> {\r\n return this._ranges[name] || null;\r\n }\r\n\r\n /**\r\n * Gets the list of all animation ranges defined on this node\r\n * @returns an array\r\n */\r\n public getAnimationRanges(): Nullable<AnimationRange>[] {\r\n const animationRanges: Nullable<AnimationRange>[] = [];\r\n let name: string;\r\n for (name in this._ranges) {\r\n animationRanges.push(this._ranges[name]);\r\n }\r\n return animationRanges;\r\n }\r\n\r\n /**\r\n * Will start the animation sequence\r\n * @param name defines the range frames for animation sequence\r\n * @param loop defines if the animation should loop (false by default)\r\n * @param speedRatio defines the speed factor in which to run the animation (1 by default)\r\n * @param onAnimationEnd defines a function to be executed when the animation ended (undefined by default)\r\n * @returns the object created for this animation. If range does not exist, it will return null\r\n */\r\n public beginAnimation(name: string, loop?: boolean, speedRatio?: number, onAnimationEnd?: () => void): Nullable<Animatable> {\r\n const range = this.getAnimationRange(name);\r\n\r\n if (!range) {\r\n return null;\r\n }\r\n\r\n return this._scene.beginAnimation(this, range.from, range.to, loop, speedRatio, onAnimationEnd);\r\n }\r\n\r\n /**\r\n * Serialize animation ranges into a JSON compatible object\r\n * @returns serialization object\r\n */\r\n public serializeAnimationRanges(): any {\r\n const serializationRanges = [];\r\n for (const name in this._ranges) {\r\n const localRange = this._ranges[name];\r\n if (!localRange) {\r\n continue;\r\n }\r\n const range: any = {};\r\n range.name = name;\r\n range.from = localRange.from;\r\n range.to = localRange.to;\r\n serializationRanges.push(range);\r\n }\r\n return serializationRanges;\r\n }\r\n\r\n /**\r\n * Computes the world matrix of the node\r\n * @param force defines if the cache version should be invalidated forcing the world matrix to be created from scratch\r\n * @returns the world matrix\r\n */\r\n public computeWorldMatrix(force?: boolean): Matrix {\r\n if (!this._worldMatrix) {\r\n this._worldMatrix = Matrix.Identity();\r\n }\r\n return this._worldMatrix;\r\n }\r\n\r\n /**\r\n * Releases resources associated with this node.\r\n * @param doNotRecurse Set to true to not recurse into each children (recurse into each children by default)\r\n * @param disposeMaterialAndTextures Set to true to also dispose referenced materials and textures (false by default)\r\n */\r\n public dispose(doNotRecurse?: boolean, disposeMaterialAndTextures = false): void {\r\n this._nodeDataStorage._isDisposed = true;\r\n\r\n if (!doNotRecurse) {\r\n const nodes = this.getDescendants(true);\r\n for (const node of nodes) {\r\n node.dispose(doNotRecurse, disposeMaterialAndTextures);\r\n }\r\n }\r\n\r\n if (!this.parent) {\r\n this._removeFromSceneRootNodes();\r\n } else {\r\n this.parent = null;\r\n }\r\n\r\n // Callback\r\n this.onDisposeObservable.notifyObservers(this);\r\n this.onDisposeObservable.clear();\r\n\r\n this.onEnabledStateChangedObservable.clear();\r\n this.onClonedObservable.clear();\r\n\r\n // Behaviors\r\n for (const behavior of this._behaviors) {\r\n behavior.detach();\r\n }\r\n\r\n this._behaviors.length = 0;\r\n\r\n this.metadata = null;\r\n }\r\n\r\n /**\r\n * Parse animation range data from a serialization object and store them into a given node\r\n * @param node defines where to store the animation ranges\r\n * @param parsedNode defines the serialization object to read data from\r\n * @param scene defines the hosting scene\r\n */\r\n public static ParseAnimationRanges(node: Node, parsedNode: any, scene: Scene): void {\r\n if (parsedNode.ranges) {\r\n for (let index = 0; index < parsedNode.ranges.length; index++) {\r\n const data = parsedNode.ranges[index];\r\n node.createAnimationRange(data.name, data.from, data.to);\r\n }\r\n }\r\n }\r\n /**\r\n * Return the minimum and maximum world vectors of the entire hierarchy under current node\r\n * @param includeDescendants Include bounding info from descendants as well (true by default)\r\n * @param predicate defines a callback function that can be customize to filter what meshes should be included in the list used to compute the bounding vectors\r\n * @returns the new bounding vectors\r\n */\r\n public getHierarchyBoundingVectors(includeDescendants = true, predicate: Nullable<(abstractMesh: AbstractMesh) => boolean> = null): { min: Vector3; max: Vector3 } {\r\n // Ensures that all world matrix will be recomputed.\r\n this.getScene().incrementRenderId();\r\n\r\n this.computeWorldMatrix(true);\r\n\r\n let min: Vector3;\r\n let max: Vector3;\r\n\r\n const thisAbstractMesh = this as Node as AbstractMesh;\r\n if (thisAbstractMesh.getBoundingInfo && thisAbstractMesh.subMeshes) {\r\n // If this is an abstract mesh get its bounding info\r\n const boundingInfo = thisAbstractMesh.getBoundingInfo();\r\n min = boundingInfo.boundingBox.minimumWorld.clone();\r\n max = boundingInfo.boundingBox.maximumWorld.clone();\r\n } else {\r\n min = new Vector3(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);\r\n max = new Vector3(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);\r\n }\r\n\r\n if (includeDescendants) {\r\n const descendants = this.getDescendants(false);\r\n\r\n for (const descendant of descendants) {\r\n const childMesh = <AbstractMesh>descendant;\r\n childMesh.computeWorldMatrix(true);\r\n\r\n // Filters meshes based on custom predicate function.\r\n if (predicate && !predicate(childMesh)) {\r\n continue;\r\n }\r\n\r\n //make sure we have the needed params to get mix and max\r\n if (!childMesh.getBoundingInfo || childMesh.getTotalVertices() === 0) {\r\n continue;\r\n }\r\n\r\n const childBoundingInfo = childMesh.getBoundingInfo();\r\n const boundingBox = childBoundingInfo.boundingBox;\r\n\r\n const minBox = boundingBox.minimumWorld;\r\n const maxBox = boundingBox.maximumWorld;\r\n\r\n Vector3.CheckExtends(minBox, min, max);\r\n Vector3.CheckExtends(maxBox, min, max);\r\n }\r\n }\r\n\r\n return {\r\n min: min,\r\n max: max,\r\n };\r\n }\r\n}\r\n"]}
|
package/package.json
CHANGED
package/scene.d.ts
CHANGED
|
@@ -301,6 +301,7 @@ export declare class Scene extends AbstractScene implements IAnimatable, IClipPl
|
|
|
301
301
|
onAfterRenderObservable: Observable<Scene>;
|
|
302
302
|
/**
|
|
303
303
|
* An event triggered after rendering the scene for an active camera (When scene.render is called this will be called after each camera)
|
|
304
|
+
* This is triggered for each "sub" camera in a Camera Rig unlike onAfterCameraRenderObservable
|
|
304
305
|
*/
|
|
305
306
|
onAfterRenderCameraObservable: Observable<import("./Cameras/camera").Camera>;
|
|
306
307
|
private _onAfterRenderObserver;
|
|
@@ -335,6 +336,7 @@ export declare class Scene extends AbstractScene implements IAnimatable, IClipPl
|
|
|
335
336
|
set beforeCameraRender(callback: () => void);
|
|
336
337
|
/**
|
|
337
338
|
* An event triggered after rendering a camera
|
|
339
|
+
* This is triggered for the full rig Camera only unlike onAfterRenderCameraObservable
|
|
338
340
|
*/
|
|
339
341
|
onAfterCameraRenderObservable: Observable<import("./Cameras/camera").Camera>;
|
|
340
342
|
private _onAfterCameraRenderObserver;
|
|
@@ -1205,15 +1207,15 @@ export declare class Scene extends AbstractScene implements IAnimatable, IClipPl
|
|
|
1205
1207
|
*/
|
|
1206
1208
|
executeOnceBeforeRender(func: () => void, timeout?: number): void;
|
|
1207
1209
|
/**
|
|
1208
|
-
*
|
|
1209
|
-
* @
|
|
1210
|
+
* This function can help adding any object to the list of data awaited to be ready in order to check for a complete scene loading.
|
|
1211
|
+
* @param data defines the object to wait for
|
|
1210
1212
|
*/
|
|
1211
|
-
|
|
1213
|
+
addPendingData(data: any): void;
|
|
1212
1214
|
/**
|
|
1213
|
-
*
|
|
1214
|
-
* @
|
|
1215
|
+
* Remove a pending data from the loading list which has previously been added with addPendingData.
|
|
1216
|
+
* @param data defines the object to remove from the pending list
|
|
1215
1217
|
*/
|
|
1216
|
-
|
|
1218
|
+
removePendingData(data: any): void;
|
|
1217
1219
|
/**
|
|
1218
1220
|
* Returns the number of items waiting to be loaded
|
|
1219
1221
|
* @returns the number of items waiting to be loaded
|