@babylonjs/core 5.31.0 → 5.31.2
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.d.ts +1 -0
- package/Animations/animatable.js +7 -0
- package/Animations/animatable.js.map +1 -1
- package/Engines/Extensions/engine.rawTexture.js +17 -0
- package/Engines/Extensions/engine.rawTexture.js.map +1 -1
- package/Engines/Extensions/engine.views.js +2 -2
- package/Engines/Extensions/engine.views.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.rawTexture.js +3 -0
- package/Engines/WebGPU/Extensions/engine.rawTexture.js.map +1 -1
- package/Engines/thinEngine.js +6 -4
- package/Engines/thinEngine.js.map +1 -1
- package/Lights/Shadows/shadowGenerator.js +8 -4
- package/Lights/Shadows/shadowGenerator.js.map +1 -1
- package/Materials/effectRenderer.d.ts +6 -4
- package/Materials/effectRenderer.js +27 -28
- package/Materials/effectRenderer.js.map +1 -1
- package/Meshes/mesh.d.ts +3 -1
- package/Meshes/mesh.js +4 -1
- package/Meshes/mesh.js.map +1 -1
- package/PostProcesses/motionBlurPostProcess.js +7 -5
- package/PostProcesses/motionBlurPostProcess.js.map +1 -1
- package/Shaders/motionBlur.fragment.js +2 -2
- package/Shaders/motionBlur.fragment.js.map +1 -1
- package/Shaders/shadowMap.fragment.js +6 -4
- package/Shaders/shadowMap.fragment.js.map +1 -1
- package/Shaders/shadowMap.vertex.js +2 -2
- package/Shaders/shadowMap.vertex.js.map +1 -1
- package/XR/webXRCamera.js +2 -0
- package/XR/webXRCamera.js.map +1 -1
- package/assetContainer.js +2 -2
- package/assetContainer.js.map +1 -1
- package/package.json +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\nimport type { InstancedMesh } from \"./Meshes/instancedMesh\";\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 conversionMap: { [key: number]: number } = {};\r\n const storeMap: { [key: number]: any } = {};\r\n const result = new InstantiatedEntries();\r\n const alreadySwappedSkeletons: Skeleton[] = [];\r\n const alreadySwappedMaterials: Material[] = [];\r\n\r\n const localOptions = {\r\n doNotInstantiate: true,\r\n ...options,\r\n };\r\n\r\n 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 conversionMap[source.uniqueId] = clone.uniqueId;\r\n storeMap[clone.uniqueId] = clone;\r\n\r\n if (nameFunction) {\r\n clone.name = nameFunction(source.name);\r\n }\r\n\r\n if (clone instanceof Mesh) {\r\n const clonedMesh = clone 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 conversionMap[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 // check if there are instanced meshes in the array, to set their new source mesh\r\n const instancesExist = this.meshes.some((m) => m.getClassName() === \"InstancedMesh\");\r\n const instanceSourceMap: TransformNode[] = [];\r\n\r\n const onNewCreated = (source: TransformNode, clone: TransformNode) => {\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 conversionMap[sourceMaterial.uniqueId] = swap.uniqueId;\r\n storeMap[swap.uniqueId] = swap;\r\n\r\n if (sourceMaterial.getClassName() === \"MultiMaterial\") {\r\n const multi = sourceMaterial as MultiMaterial;\r\n\r\n for (const material of multi.subMaterials) {\r\n if (!material) {\r\n continue;\r\n }\r\n swap = material.clone(nameFunction ? nameFunction(material.name) : \"Clone of \" + material.name)!;\r\n alreadySwappedMaterials.push(material);\r\n conversionMap[material.uniqueId] = swap.uniqueId;\r\n storeMap[swap.uniqueId] = swap;\r\n }\r\n\r\n multi.subMaterials = multi.subMaterials.map((m) => m && storeMap[conversionMap[m.uniqueId]]);\r\n }\r\n }\r\n\r\n if (mesh.getClassName() !== \"InstancedMesh\") {\r\n mesh.material = storeMap[conversionMap[sourceMaterial.uniqueId]];\r\n }\r\n } else {\r\n if (mesh.material.getClassName() === \"MultiMaterial\") {\r\n if (this.scene.multiMaterials.indexOf(mesh.material as MultiMaterial) === -1) {\r\n this.scene.addMultiMaterial(mesh.material as MultiMaterial);\r\n }\r\n } else {\r\n if (this.scene.materials.indexOf(mesh.material) === -1) {\r\n this.scene.addMaterial(mesh.material);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n this.meshes.forEach((o, idx) => {\r\n if (localOptions.predicate && !localOptions.predicate(o)) {\r\n return;\r\n }\r\n\r\n if (!o.parent) {\r\n const isInstance = o.getClassName() === \"InstancedMesh\";\r\n let sourceMap: Mesh | undefined = undefined;\r\n if (isInstance) {\r\n const oInstance = o as InstancedMesh;\r\n // find the right index for the source mesh\r\n const sourceMesh = oInstance.sourceMesh;\r\n const sourceMeshIndex = this.meshes.indexOf(sourceMesh);\r\n if (sourceMeshIndex !== -1 && instanceSourceMap[sourceMeshIndex]) {\r\n sourceMap = instanceSourceMap[sourceMeshIndex] as Mesh;\r\n }\r\n }\r\n const newOne = isInstance\r\n ? (o as InstancedMesh).instantiateHierarchy(\r\n null,\r\n {\r\n ...localOptions,\r\n newSourcedMesh: sourceMap,\r\n },\r\n onNewCreated\r\n )\r\n : o.instantiateHierarchy(null, localOptions, onNewCreated);\r\n\r\n if (newOne) {\r\n if (instancesExist && newOne.getClassName() !== \"InstancedMesh\") {\r\n instanceSourceMap[idx] = newOne;\r\n }\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[conversionMap[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[conversionMap[bone._linkedTransformNode.uniqueId]];\r\n }\r\n }\r\n }\r\n }\r\n\r\n result.skeletons.push(clone);\r\n });\r\n\r\n 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[conversionMap[oldTarget.uniqueId]];\r\n\r\n return newTarget || oldTarget;\r\n });\r\n\r\n result.animationGroups.push(clone);\r\n });\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Adds all the assets from the container to the scene.\r\n */\r\n public addAllToScene() {\r\n if (this._wasAddedToScene) {\r\n return;\r\n }\r\n\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"]}
|
|
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\nimport type { InstancedMesh } from \"./Meshes/instancedMesh\";\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 conversionMap: { [key: number]: number } = {};\r\n const storeMap: { [key: number]: any } = {};\r\n const result = new InstantiatedEntries();\r\n const alreadySwappedSkeletons: Skeleton[] = [];\r\n const alreadySwappedMaterials: Material[] = [];\r\n\r\n const localOptions = {\r\n doNotInstantiate: true,\r\n ...options,\r\n };\r\n\r\n 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 conversionMap[source.uniqueId] = clone.uniqueId;\r\n storeMap[clone.uniqueId] = clone;\r\n\r\n if (nameFunction) {\r\n clone.name = nameFunction(source.name);\r\n }\r\n\r\n if (clone instanceof Mesh) {\r\n const clonedMesh = clone 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 conversionMap[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 // check if there are instanced meshes in the array, to set their new source mesh\r\n const instancesExist = this.meshes.some((m) => m.getClassName() === \"InstancedMesh\");\r\n const instanceSourceMap: TransformNode[] = [];\r\n\r\n const onNewCreated = (source: TransformNode, clone: TransformNode) => {\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 conversionMap[sourceMaterial.uniqueId] = swap.uniqueId;\r\n storeMap[swap.uniqueId] = swap;\r\n\r\n if (sourceMaterial.getClassName() === \"MultiMaterial\") {\r\n const multi = sourceMaterial as MultiMaterial;\r\n\r\n for (const material of multi.subMaterials) {\r\n if (!material) {\r\n continue;\r\n }\r\n swap = material.clone(nameFunction ? nameFunction(material.name) : \"Clone of \" + material.name)!;\r\n alreadySwappedMaterials.push(material);\r\n conversionMap[material.uniqueId] = swap.uniqueId;\r\n storeMap[swap.uniqueId] = swap;\r\n }\r\n\r\n multi.subMaterials = multi.subMaterials.map((m) => m && storeMap[conversionMap[m.uniqueId]]);\r\n }\r\n }\r\n\r\n if (mesh.getClassName() !== \"InstancedMesh\") {\r\n mesh.material = storeMap[conversionMap[sourceMaterial.uniqueId]];\r\n }\r\n } else {\r\n if (mesh.material.getClassName() === \"MultiMaterial\") {\r\n if (this.scene.multiMaterials.indexOf(mesh.material as MultiMaterial) === -1) {\r\n this.scene.addMultiMaterial(mesh.material as MultiMaterial);\r\n }\r\n } else {\r\n if (this.scene.materials.indexOf(mesh.material) === -1) {\r\n this.scene.addMaterial(mesh.material);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n this.meshes.forEach((o, idx) => {\r\n if (localOptions.predicate && !localOptions.predicate(o)) {\r\n return;\r\n }\r\n\r\n if (!o.parent) {\r\n const isInstance = o.getClassName() === \"InstancedMesh\";\r\n let sourceMap: Mesh | undefined = undefined;\r\n if (isInstance) {\r\n const oInstance = o as InstancedMesh;\r\n // find the right index for the source mesh\r\n const sourceMesh = oInstance.sourceMesh;\r\n const sourceMeshIndex = this.meshes.indexOf(sourceMesh);\r\n if (sourceMeshIndex !== -1 && instanceSourceMap[sourceMeshIndex]) {\r\n sourceMap = instanceSourceMap[sourceMeshIndex] as Mesh;\r\n }\r\n }\r\n const newOne = isInstance\r\n ? (o as InstancedMesh).instantiateHierarchy(\r\n null,\r\n {\r\n ...localOptions,\r\n newSourcedMesh: sourceMap,\r\n },\r\n onNewCreated\r\n )\r\n : o.instantiateHierarchy(null, localOptions, onNewCreated);\r\n\r\n if (newOne) {\r\n if (instancesExist && newOne.getClassName() !== \"InstancedMesh\") {\r\n instanceSourceMap[idx] = newOne;\r\n }\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[conversionMap[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[conversionMap[bone._linkedTransformNode.uniqueId]];\r\n }\r\n }\r\n }\r\n }\r\n\r\n result.skeletons.push(clone);\r\n });\r\n\r\n 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[conversionMap[oldTarget.uniqueId]];\r\n\r\n return newTarget || oldTarget;\r\n });\r\n\r\n result.animationGroups.push(clone);\r\n });\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Adds all the assets from the container to the scene.\r\n */\r\n public addAllToScene() {\r\n if (this._wasAddedToScene) {\r\n return;\r\n }\r\n\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 || !targetAssets) {\r\n return;\r\n }\r\n\r\n for (const asset of sourceAssets) {\r\n let move = true;\r\n if (keepAssets) {\r\n for (const keepAsset of keepAssets) {\r\n if (asset === keepAsset) {\r\n move = false;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (move) {\r\n targetAssets.push(asset);\r\n (asset as any)._parentContainer = this;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Removes all the assets contained in the scene and adds them to the container.\r\n * @param keepAssets Set of assets to keep in the scene. (default: empty)\r\n */\r\n public moveAllFromScene(keepAssets?: KeepAssets): void {\r\n this._wasAddedToScene = false;\r\n\r\n if (keepAssets === undefined) {\r\n keepAssets = new KeepAssets();\r\n }\r\n\r\n for (const key in this) {\r\n if (Object.prototype.hasOwnProperty.call(this, key)) {\r\n (<any>this)[key] = (<any>this)[key] || (key === \"_environmentTexture\" ? null : []);\r\n this._moveAssets((<any>this.scene)[key], (<any>this)[key], (<any>keepAssets)[key]);\r\n }\r\n }\r\n\r\n this.environmentTexture = this.scene.environmentTexture;\r\n\r\n this.removeAllFromScene();\r\n }\r\n\r\n /**\r\n * Adds all meshes in the asset container to a root mesh that can be used to position all the contained meshes. The root mesh is then added to the front of the meshes in the assetContainer.\r\n * @returns the root mesh\r\n */\r\n public createRootMesh() {\r\n const rootMesh = new Mesh(\"assetContainerRootMesh\", this.scene);\r\n 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"]}
|