@babylonjs/core 5.0.2 → 5.1.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/Engines/Extensions/engine.readTexture.d.ts +2 -2
- package/Engines/Extensions/engine.readTexture.js +8 -4
- package/Engines/Extensions/engine.readTexture.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.readTexture.js +4 -2
- package/Engines/WebGPU/Extensions/engine.readTexture.js.map +1 -1
- package/Engines/engine.d.ts +7 -1
- package/Engines/engine.js +14 -0
- package/Engines/engine.js.map +1 -1
- package/Engines/nativeEngine.d.ts +24 -0
- package/Engines/nativeEngine.js +39 -0
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/thinEngine.d.ts +2 -1
- package/Engines/thinEngine.js +16 -6
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.d.ts +13 -1
- package/Engines/webgpuEngine.js +25 -1
- package/Engines/webgpuEngine.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.js +3 -0
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/Textures/MultiviewRenderTarget.js +1 -0
- package/Materials/Textures/MultiviewRenderTarget.js.map +1 -1
- package/Materials/Textures/baseTexture.d.ts +5 -1
- package/Materials/Textures/baseTexture.js +21 -11
- package/Materials/Textures/baseTexture.js.map +1 -1
- package/Materials/Textures/texture.d.ts +3 -0
- package/Materials/Textures/texture.js +4 -2
- package/Materials/Textures/texture.js.map +1 -1
- package/Maths/math.color.d.ts +11 -2
- package/Maths/math.color.js +12 -7
- package/Maths/math.color.js.map +1 -1
- package/Meshes/abstractMesh.js +1 -1
- package/Meshes/abstractMesh.js.map +1 -1
- package/Meshes/mesh.js +0 -1
- package/Meshes/mesh.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.d.ts +6 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js +13 -2
- package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js.map +1 -1
- package/XR/features/WebXRHandTracking.js +1 -1
- package/XR/features/WebXRHandTracking.js.map +1 -1
- package/assetContainer.d.ts +13 -1
- package/assetContainer.js +130 -17
- package/assetContainer.js.map +1 -1
- package/package.json +1 -1
package/assetContainer.js
CHANGED
|
@@ -89,7 +89,8 @@ var AssetContainer = /** @class */ (function (_super) {
|
|
|
89
89
|
* @param nameFunction defines an optional function used to get new names for clones
|
|
90
90
|
* @param cloneMaterials defines an optional boolean that defines if materials must be cloned as well (false by default)
|
|
91
91
|
* @param options defines an optional list of options to control how to instantiate / clone models
|
|
92
|
-
* @param options.doNotInstantiate
|
|
92
|
+
* @param options.doNotInstantiate defines if the model must be instantiated or just cloned
|
|
93
|
+
* @param options.predicate defines a predicate used to filter whih mesh to instantiate/clone
|
|
93
94
|
* @returns a list of rootNodes, skeletons and animation groups that were duplicated
|
|
94
95
|
*/
|
|
95
96
|
AssetContainer.prototype.instantiateModelsToScene = function (nameFunction, cloneMaterials, options) {
|
|
@@ -126,6 +127,9 @@ var AssetContainer = /** @class */ (function (_super) {
|
|
|
126
127
|
}
|
|
127
128
|
};
|
|
128
129
|
this.transformNodes.forEach(function (o) {
|
|
130
|
+
if (options && options.predicate && !options.predicate(o)) {
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
129
133
|
if (!o.parent) {
|
|
130
134
|
var newOne = o.instantiateHierarchy(null, options, function (source, clone) {
|
|
131
135
|
onClone(source, clone);
|
|
@@ -136,6 +140,9 @@ var AssetContainer = /** @class */ (function (_super) {
|
|
|
136
140
|
}
|
|
137
141
|
});
|
|
138
142
|
this.meshes.forEach(function (o) {
|
|
143
|
+
if (options && options.predicate && !options.predicate(o)) {
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
139
146
|
if (!o.parent) {
|
|
140
147
|
var newOne = o.instantiateHierarchy(null, options, function (source, clone) {
|
|
141
148
|
onClone(source, clone);
|
|
@@ -189,6 +196,9 @@ var AssetContainer = /** @class */ (function (_super) {
|
|
|
189
196
|
}
|
|
190
197
|
});
|
|
191
198
|
this.skeletons.forEach(function (s) {
|
|
199
|
+
if (options && options.predicate && !options.predicate(s)) {
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
192
202
|
var clone = s.clone(nameFunction ? nameFunction(s.name) : "Clone of " + s.name);
|
|
193
203
|
for (var _i = 0, _a = _this.meshes; _i < _a.length; _i++) {
|
|
194
204
|
var m = _a[_i];
|
|
@@ -214,6 +224,9 @@ var AssetContainer = /** @class */ (function (_super) {
|
|
|
214
224
|
result.skeletons.push(clone);
|
|
215
225
|
});
|
|
216
226
|
this.animationGroups.forEach(function (o) {
|
|
227
|
+
if (options && options.predicate && !options.predicate(o)) {
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
217
230
|
var clone = o.clone(nameFunction ? nameFunction(o.name) : "Clone of " + o.name, function (oldTarget) {
|
|
218
231
|
var newTarget = storeMap[convertionMap[oldTarget.uniqueId]];
|
|
219
232
|
return newTarget || oldTarget;
|
|
@@ -226,118 +239,218 @@ var AssetContainer = /** @class */ (function (_super) {
|
|
|
226
239
|
* Adds all the assets from the container to the scene.
|
|
227
240
|
*/
|
|
228
241
|
AssetContainer.prototype.addAllToScene = function () {
|
|
229
|
-
var _this = this;
|
|
230
242
|
if (this._wasAddedToScene) {
|
|
231
243
|
return;
|
|
232
244
|
}
|
|
233
245
|
this._wasAddedToScene = true;
|
|
246
|
+
this.addToScene(null);
|
|
247
|
+
if (this.environmentTexture) {
|
|
248
|
+
this.scene.environmentTexture = this.environmentTexture;
|
|
249
|
+
}
|
|
250
|
+
for (var _i = 0, _a = this.scene._serializableComponents; _i < _a.length; _i++) {
|
|
251
|
+
var component = _a[_i];
|
|
252
|
+
component.addFromContainer(this);
|
|
253
|
+
}
|
|
254
|
+
this.scene.getEngine().onContextRestoredObservable.remove(this._onContextRestoredObserver);
|
|
255
|
+
this._onContextRestoredObserver = null;
|
|
256
|
+
};
|
|
257
|
+
/**
|
|
258
|
+
* Adds assets from the container to the scene.
|
|
259
|
+
* @param predicate defines a predicate used to select which entity will be added (can be null)
|
|
260
|
+
*/
|
|
261
|
+
AssetContainer.prototype.addToScene = function (predicate) {
|
|
262
|
+
var _this = this;
|
|
263
|
+
if (predicate === void 0) { predicate = null; }
|
|
234
264
|
this.cameras.forEach(function (o) {
|
|
265
|
+
if (predicate && !predicate(o)) {
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
235
268
|
_this.scene.addCamera(o);
|
|
236
269
|
});
|
|
237
270
|
this.lights.forEach(function (o) {
|
|
271
|
+
if (predicate && !predicate(o)) {
|
|
272
|
+
return;
|
|
273
|
+
}
|
|
238
274
|
_this.scene.addLight(o);
|
|
239
275
|
});
|
|
240
276
|
this.meshes.forEach(function (o) {
|
|
277
|
+
if (predicate && !predicate(o)) {
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
241
280
|
_this.scene.addMesh(o);
|
|
242
281
|
});
|
|
243
282
|
this.skeletons.forEach(function (o) {
|
|
283
|
+
if (predicate && !predicate(o)) {
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
244
286
|
_this.scene.addSkeleton(o);
|
|
245
287
|
});
|
|
246
288
|
this.animations.forEach(function (o) {
|
|
289
|
+
if (predicate && !predicate(o)) {
|
|
290
|
+
return;
|
|
291
|
+
}
|
|
247
292
|
_this.scene.addAnimation(o);
|
|
248
293
|
});
|
|
249
294
|
this.animationGroups.forEach(function (o) {
|
|
295
|
+
if (predicate && !predicate(o)) {
|
|
296
|
+
return;
|
|
297
|
+
}
|
|
250
298
|
_this.scene.addAnimationGroup(o);
|
|
251
299
|
});
|
|
252
300
|
this.multiMaterials.forEach(function (o) {
|
|
301
|
+
if (predicate && !predicate(o)) {
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
253
304
|
_this.scene.addMultiMaterial(o);
|
|
254
305
|
});
|
|
255
306
|
this.materials.forEach(function (o) {
|
|
307
|
+
if (predicate && !predicate(o)) {
|
|
308
|
+
return;
|
|
309
|
+
}
|
|
256
310
|
_this.scene.addMaterial(o);
|
|
257
311
|
});
|
|
258
312
|
this.morphTargetManagers.forEach(function (o) {
|
|
313
|
+
if (predicate && !predicate(o)) {
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
259
316
|
_this.scene.addMorphTargetManager(o);
|
|
260
317
|
});
|
|
261
318
|
this.geometries.forEach(function (o) {
|
|
319
|
+
if (predicate && !predicate(o)) {
|
|
320
|
+
return;
|
|
321
|
+
}
|
|
262
322
|
_this.scene.addGeometry(o);
|
|
263
323
|
});
|
|
264
324
|
this.transformNodes.forEach(function (o) {
|
|
325
|
+
if (predicate && !predicate(o)) {
|
|
326
|
+
return;
|
|
327
|
+
}
|
|
265
328
|
_this.scene.addTransformNode(o);
|
|
266
329
|
});
|
|
267
330
|
this.actionManagers.forEach(function (o) {
|
|
331
|
+
if (predicate && !predicate(o)) {
|
|
332
|
+
return;
|
|
333
|
+
}
|
|
268
334
|
_this.scene.addActionManager(o);
|
|
269
335
|
});
|
|
270
336
|
this.textures.forEach(function (o) {
|
|
337
|
+
if (predicate && !predicate(o)) {
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
271
340
|
_this.scene.addTexture(o);
|
|
272
341
|
});
|
|
273
342
|
this.reflectionProbes.forEach(function (o) {
|
|
343
|
+
if (predicate && !predicate(o)) {
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
274
346
|
_this.scene.addReflectionProbe(o);
|
|
275
347
|
});
|
|
276
|
-
|
|
277
|
-
|
|
348
|
+
};
|
|
349
|
+
/**
|
|
350
|
+
* Removes all the assets in the container from the scene
|
|
351
|
+
*/
|
|
352
|
+
AssetContainer.prototype.removeAllFromScene = function () {
|
|
353
|
+
this._wasAddedToScene = false;
|
|
354
|
+
this.removeFromScene(null);
|
|
355
|
+
if (this.environmentTexture === this.scene.environmentTexture) {
|
|
356
|
+
this.scene.environmentTexture = null;
|
|
278
357
|
}
|
|
279
358
|
for (var _i = 0, _a = this.scene._serializableComponents; _i < _a.length; _i++) {
|
|
280
359
|
var component = _a[_i];
|
|
281
|
-
component.
|
|
360
|
+
component.removeFromContainer(this);
|
|
282
361
|
}
|
|
283
|
-
this.scene.getEngine().onContextRestoredObservable.remove(this._onContextRestoredObserver);
|
|
284
|
-
this._onContextRestoredObserver = null;
|
|
285
362
|
};
|
|
286
363
|
/**
|
|
287
|
-
* Removes
|
|
364
|
+
* Removes assets in the container from the scene
|
|
365
|
+
* @param predicate defines a predicate used to select which entity will be added (can be null)
|
|
288
366
|
*/
|
|
289
|
-
AssetContainer.prototype.
|
|
367
|
+
AssetContainer.prototype.removeFromScene = function (predicate) {
|
|
290
368
|
var _this = this;
|
|
291
|
-
|
|
369
|
+
if (predicate === void 0) { predicate = null; }
|
|
292
370
|
this.cameras.forEach(function (o) {
|
|
371
|
+
if (predicate && !predicate(o)) {
|
|
372
|
+
return;
|
|
373
|
+
}
|
|
293
374
|
_this.scene.removeCamera(o);
|
|
294
375
|
});
|
|
295
376
|
this.lights.forEach(function (o) {
|
|
377
|
+
if (predicate && !predicate(o)) {
|
|
378
|
+
return;
|
|
379
|
+
}
|
|
296
380
|
_this.scene.removeLight(o);
|
|
297
381
|
});
|
|
298
382
|
this.meshes.forEach(function (o) {
|
|
383
|
+
if (predicate && !predicate(o)) {
|
|
384
|
+
return;
|
|
385
|
+
}
|
|
299
386
|
_this.scene.removeMesh(o);
|
|
300
387
|
});
|
|
301
388
|
this.skeletons.forEach(function (o) {
|
|
389
|
+
if (predicate && !predicate(o)) {
|
|
390
|
+
return;
|
|
391
|
+
}
|
|
302
392
|
_this.scene.removeSkeleton(o);
|
|
303
393
|
});
|
|
304
394
|
this.animations.forEach(function (o) {
|
|
395
|
+
if (predicate && !predicate(o)) {
|
|
396
|
+
return;
|
|
397
|
+
}
|
|
305
398
|
_this.scene.removeAnimation(o);
|
|
306
399
|
});
|
|
307
400
|
this.animationGroups.forEach(function (o) {
|
|
401
|
+
if (predicate && !predicate(o)) {
|
|
402
|
+
return;
|
|
403
|
+
}
|
|
308
404
|
_this.scene.removeAnimationGroup(o);
|
|
309
405
|
});
|
|
310
406
|
this.multiMaterials.forEach(function (o) {
|
|
407
|
+
if (predicate && !predicate(o)) {
|
|
408
|
+
return;
|
|
409
|
+
}
|
|
311
410
|
_this.scene.removeMultiMaterial(o);
|
|
312
411
|
});
|
|
313
412
|
this.materials.forEach(function (o) {
|
|
413
|
+
if (predicate && !predicate(o)) {
|
|
414
|
+
return;
|
|
415
|
+
}
|
|
314
416
|
_this.scene.removeMaterial(o);
|
|
315
417
|
});
|
|
316
418
|
this.morphTargetManagers.forEach(function (o) {
|
|
419
|
+
if (predicate && !predicate(o)) {
|
|
420
|
+
return;
|
|
421
|
+
}
|
|
317
422
|
_this.scene.removeMorphTargetManager(o);
|
|
318
423
|
});
|
|
319
424
|
this.geometries.forEach(function (o) {
|
|
425
|
+
if (predicate && !predicate(o)) {
|
|
426
|
+
return;
|
|
427
|
+
}
|
|
320
428
|
_this.scene.removeGeometry(o);
|
|
321
429
|
});
|
|
322
430
|
this.transformNodes.forEach(function (o) {
|
|
431
|
+
if (predicate && !predicate(o)) {
|
|
432
|
+
return;
|
|
433
|
+
}
|
|
323
434
|
_this.scene.removeTransformNode(o);
|
|
324
435
|
});
|
|
325
436
|
this.actionManagers.forEach(function (o) {
|
|
437
|
+
if (predicate && !predicate(o)) {
|
|
438
|
+
return;
|
|
439
|
+
}
|
|
326
440
|
_this.scene.removeActionManager(o);
|
|
327
441
|
});
|
|
328
442
|
this.textures.forEach(function (o) {
|
|
443
|
+
if (predicate && !predicate(o)) {
|
|
444
|
+
return;
|
|
445
|
+
}
|
|
329
446
|
_this.scene.removeTexture(o);
|
|
330
447
|
});
|
|
331
448
|
this.reflectionProbes.forEach(function (o) {
|
|
449
|
+
if (predicate && !predicate(o)) {
|
|
450
|
+
return;
|
|
451
|
+
}
|
|
332
452
|
_this.scene.removeReflectionProbe(o);
|
|
333
453
|
});
|
|
334
|
-
if (this.environmentTexture === this.scene.environmentTexture) {
|
|
335
|
-
this.scene.environmentTexture = null;
|
|
336
|
-
}
|
|
337
|
-
for (var _i = 0, _a = this.scene._serializableComponents; _i < _a.length; _i++) {
|
|
338
|
-
var component = _a[_i];
|
|
339
|
-
component.removeFromContainer(this);
|
|
340
|
-
}
|
|
341
454
|
};
|
|
342
455
|
/**
|
|
343
456
|
* Disposes all the assets in the container
|
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\r\n * @returns a list of rootNodes, skeletons and animation groups that were duplicated\r\n */\r\n public instantiateModelsToScene(nameFunction?: (sourceName: string) => string, cloneMaterials = false, options?: { doNotInstantiate: boolean }): 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 (!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 (!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 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 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.cameras.forEach((o) => {\r\n this.scene.addCamera(o);\r\n });\r\n this.lights.forEach((o) => {\r\n this.scene.addLight(o);\r\n });\r\n this.meshes.forEach((o) => {\r\n this.scene.addMesh(o);\r\n });\r\n this.skeletons.forEach((o) => {\r\n this.scene.addSkeleton(o);\r\n });\r\n this.animations.forEach((o) => {\r\n this.scene.addAnimation(o);\r\n });\r\n this.animationGroups.forEach((o) => {\r\n this.scene.addAnimationGroup(o);\r\n });\r\n this.multiMaterials.forEach((o) => {\r\n this.scene.addMultiMaterial(o);\r\n });\r\n this.materials.forEach((o) => {\r\n this.scene.addMaterial(o);\r\n });\r\n this.morphTargetManagers.forEach((o) => {\r\n this.scene.addMorphTargetManager(o);\r\n });\r\n this.geometries.forEach((o) => {\r\n this.scene.addGeometry(o);\r\n });\r\n this.transformNodes.forEach((o) => {\r\n this.scene.addTransformNode(o);\r\n });\r\n this.actionManagers.forEach((o) => {\r\n this.scene.addActionManager(o);\r\n });\r\n this.textures.forEach((o) => {\r\n this.scene.addTexture(o);\r\n });\r\n this.reflectionProbes.forEach((o) => {\r\n this.scene.addReflectionProbe(o);\r\n });\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 * 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.cameras.forEach((o) => {\r\n this.scene.removeCamera(o);\r\n });\r\n this.lights.forEach((o) => {\r\n this.scene.removeLight(o);\r\n });\r\n this.meshes.forEach((o) => {\r\n this.scene.removeMesh(o);\r\n });\r\n this.skeletons.forEach((o) => {\r\n this.scene.removeSkeleton(o);\r\n });\r\n this.animations.forEach((o) => {\r\n this.scene.removeAnimation(o);\r\n });\r\n this.animationGroups.forEach((o) => {\r\n this.scene.removeAnimationGroup(o);\r\n });\r\n this.multiMaterials.forEach((o) => {\r\n this.scene.removeMultiMaterial(o);\r\n });\r\n this.materials.forEach((o) => {\r\n this.scene.removeMaterial(o);\r\n });\r\n this.morphTargetManagers.forEach((o) => {\r\n this.scene.removeMorphTargetManager(o);\r\n });\r\n this.geometries.forEach((o) => {\r\n this.scene.removeGeometry(o);\r\n });\r\n this.transformNodes.forEach((o) => {\r\n this.scene.removeTransformNode(o);\r\n });\r\n this.actionManagers.forEach((o) => {\r\n this.scene.removeActionManager(o);\r\n });\r\n this.textures.forEach((o) => {\r\n this.scene.removeTexture(o);\r\n });\r\n this.reflectionProbes.forEach((o) => {\r\n this.scene.removeReflectionProbe(o);\r\n });\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 * 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; 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"]}
|