@babylonjs/core 8.53.1 → 8.54.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.
@@ -151,8 +151,36 @@ export function LoadAssetContainerFromSerializedScene(scene, serializedScene, ro
151
151
  }
152
152
  const LoadAssetContainer = (scene, data, rootUrl, onError, addToScene = false) => {
153
153
  const container = new AssetContainer(scene);
154
+ // When loading into a container (not directly into the scene), suppress entity-added
155
+ // observables to prevent scene events during loading. Entities still get added to scene
156
+ // arrays (so the linking code can find them), but no events fire.
157
+ // They are removed from the scene at the end via container.removeAllFromScene().
158
+ let savedObservables;
154
159
  if (!addToScene) {
155
- scene._blockEntityCollection = true;
160
+ savedObservables = {
161
+ mesh: scene.onNewMeshAddedObservable,
162
+ transformNode: scene.onNewTransformNodeAddedObservable,
163
+ light: scene.onNewLightAddedObservable,
164
+ camera: scene.onNewCameraAddedObservable,
165
+ material: scene.onNewMaterialAddedObservable,
166
+ multiMaterial: scene.onNewMultiMaterialAddedObservable,
167
+ texture: scene.onNewTextureAddedObservable,
168
+ skeleton: scene.onNewSkeletonAddedObservable,
169
+ geometry: scene.onNewGeometryAddedObservable,
170
+ animationGroup: scene.onNewAnimationGroupAddedObservable,
171
+ particleSystem: scene.onNewParticleSystemAddedObservable,
172
+ };
173
+ scene.onNewMeshAddedObservable = new Observable();
174
+ scene.onNewTransformNodeAddedObservable = new Observable();
175
+ scene.onNewLightAddedObservable = new Observable();
176
+ scene.onNewCameraAddedObservable = new Observable();
177
+ scene.onNewMaterialAddedObservable = new Observable();
178
+ scene.onNewMultiMaterialAddedObservable = new Observable();
179
+ scene.onNewTextureAddedObservable = new Observable();
180
+ scene.onNewSkeletonAddedObservable = new Observable();
181
+ scene.onNewGeometryAddedObservable = new Observable();
182
+ scene.onNewAnimationGroupAddedObservable = new Observable();
183
+ scene.onNewParticleSystemAddedObservable = new Observable();
156
184
  }
157
185
  // Entire method running in try block, so ALWAYS logs as far as it got, only actually writes details
158
186
  // when SceneLoader.debugLogging = true (default), or exception encountered.
@@ -341,17 +369,7 @@ const LoadAssetContainer = (scene, data, rootUrl, onError, addToScene = false) =
341
369
  if (vertexData !== undefined && vertexData !== null) {
342
370
  for (index = 0, cache = vertexData.length; index < cache; index++) {
343
371
  const parsedVertexData = vertexData[index];
344
- // Geometies are found by loadedUniqueId when imported
345
- // So we need to temporarily unblock the entity collection to add them to the scene
346
- scene._blockEntityCollection = false;
347
- // Temporarily replace the onNewGeometryAddedObservable to avoid multiple notifications
348
- const onNewGeometryAddedObservable = scene.onNewGeometryAddedObservable;
349
- scene.onNewGeometryAddedObservable = new Observable();
350
372
  addedGeometry.push(Geometry.Parse(parsedVertexData, scene, rootUrl));
351
- // Restore the onNewGeometryAddedObservable
352
- scene.onNewGeometryAddedObservable = onNewGeometryAddedObservable;
353
- // Restore the previous state of entity collection blocking
354
- scene._blockEntityCollection = !addToScene;
355
373
  }
356
374
  }
357
375
  for (const g of addedGeometry) {
@@ -655,10 +673,22 @@ const LoadAssetContainer = (scene, data, rootUrl, onError, addToScene = false) =
655
673
  TempMorphTargetManagerIndexContainer = {};
656
674
  TempSkeletonIndexContainer = {};
657
675
  if (!addToScene) {
658
- // Removes any breadcrumb left during the loading like geometries
676
+ // Restore observables before removing from scene
677
+ if (savedObservables) {
678
+ scene.onNewMeshAddedObservable = savedObservables.mesh;
679
+ scene.onNewTransformNodeAddedObservable = savedObservables.transformNode;
680
+ scene.onNewLightAddedObservable = savedObservables.light;
681
+ scene.onNewCameraAddedObservable = savedObservables.camera;
682
+ scene.onNewMaterialAddedObservable = savedObservables.material;
683
+ scene.onNewMultiMaterialAddedObservable = savedObservables.multiMaterial;
684
+ scene.onNewTextureAddedObservable = savedObservables.texture;
685
+ scene.onNewSkeletonAddedObservable = savedObservables.skeleton;
686
+ scene.onNewGeometryAddedObservable = savedObservables.geometry;
687
+ scene.onNewAnimationGroupAddedObservable = savedObservables.animationGroup;
688
+ scene.onNewParticleSystemAddedObservable = savedObservables.particleSystem;
689
+ }
690
+ // Removes entities from scene arrays and moves them to the container
659
691
  container.removeAllFromScene();
660
- // Unblock entity collection
661
- scene._blockEntityCollection = false;
662
692
  }
663
693
  if (log !== null && SceneLoaderFlags.loggingLevel !== 0) {
664
694
  Logger.Log(logOperation("loadAssets", parsedData ? parsedData.producer : "Unknown") + (SceneLoaderFlags.loggingLevel !== 1 ? log : ""));