@babylonjs/core 8.3.1 → 8.4.1

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.
Files changed (336) hide show
  1. package/Animations/animation.d.ts +4 -0
  2. package/Animations/animation.js +22 -13
  3. package/Animations/animation.js.map +1 -1
  4. package/Animations/animation.optimizations.d.ts +31 -0
  5. package/Animations/animation.optimizations.js +41 -0
  6. package/Animations/animation.optimizations.js.map +1 -0
  7. package/Animations/index.d.ts +1 -0
  8. package/Animations/index.js +1 -0
  9. package/Animations/index.js.map +1 -1
  10. package/Animations/pathCursor.js +3 -1
  11. package/Animations/pathCursor.js.map +1 -1
  12. package/Animations/runtimeAnimation.d.ts +3 -1
  13. package/Animations/runtimeAnimation.js +127 -116
  14. package/Animations/runtimeAnimation.js.map +1 -1
  15. package/Audio/audioSceneComponent.js +4 -4
  16. package/Audio/audioSceneComponent.js.map +1 -1
  17. package/Behaviors/Meshes/attachToBoxBehavior.js +6 -6
  18. package/Behaviors/Meshes/attachToBoxBehavior.js.map +1 -1
  19. package/Behaviors/Meshes/fadeInOutBehavior.js +3 -2
  20. package/Behaviors/Meshes/fadeInOutBehavior.js.map +1 -1
  21. package/Behaviors/Meshes/multiPointerScaleBehavior.js +6 -4
  22. package/Behaviors/Meshes/multiPointerScaleBehavior.js.map +1 -1
  23. package/Behaviors/Meshes/sixDofDragBehavior.js +3 -2
  24. package/Behaviors/Meshes/sixDofDragBehavior.js.map +1 -1
  25. package/Bones/skeleton.js +6 -6
  26. package/Bones/skeleton.js.map +1 -1
  27. package/Cameras/Inputs/followCameraKeyboardMoveInput.js +2 -2
  28. package/Cameras/Inputs/followCameraKeyboardMoveInput.js.map +1 -1
  29. package/Cameras/VR/vrExperienceHelper.js +2 -2
  30. package/Cameras/VR/vrExperienceHelper.js.map +1 -1
  31. package/Cameras/arcRotateCamera.js +6 -2
  32. package/Cameras/arcRotateCamera.js.map +1 -1
  33. package/Cameras/camera.js +2 -2
  34. package/Cameras/camera.js.map +1 -1
  35. package/Cameras/deviceOrientationCamera.js +3 -2
  36. package/Cameras/deviceOrientationCamera.js.map +1 -1
  37. package/Collisions/gpuPicker.d.ts +1 -0
  38. package/Collisions/gpuPicker.js +14 -4
  39. package/Collisions/gpuPicker.js.map +1 -1
  40. package/Debug/axesViewer.js +3 -2
  41. package/Debug/axesViewer.js.map +1 -1
  42. package/Debug/directionalLightFrustumViewer.js +4 -4
  43. package/Debug/directionalLightFrustumViewer.js.map +1 -1
  44. package/Debug/physicsViewer.js +7 -6
  45. package/Debug/physicsViewer.js.map +1 -1
  46. package/Debug/skeletonViewer.js +4 -4
  47. package/Debug/skeletonViewer.js.map +1 -1
  48. package/Engines/Processors/shaderCodeNode.js +2 -2
  49. package/Engines/Processors/shaderCodeNode.js.map +1 -1
  50. package/Engines/abstractEngine.d.ts +1 -0
  51. package/Engines/abstractEngine.js +14 -8
  52. package/Engines/abstractEngine.js.map +1 -1
  53. package/Engines/constants.d.ts +27 -5
  54. package/Engines/constants.js +27 -5
  55. package/Engines/constants.js.map +1 -1
  56. package/Engines/engine.js +8 -8
  57. package/Engines/engine.js.map +1 -1
  58. package/Engines/webgpuEngine.js +6 -2
  59. package/Engines/webgpuEngine.js.map +1 -1
  60. package/FlowGraph/Blocks/Data/Transformers/flowGraphJsonPointerParserBlock.js +2 -2
  61. package/FlowGraph/Blocks/Data/Transformers/flowGraphJsonPointerParserBlock.js.map +1 -1
  62. package/FlowGraph/Blocks/Data/flowGraphDataSwitchBlock.js +3 -2
  63. package/FlowGraph/Blocks/Data/flowGraphDataSwitchBlock.js.map +1 -1
  64. package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.js +3 -2
  65. package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.js.map +1 -1
  66. package/FlowGraph/Blocks/Event/flowGraphSendCustomEventBlock.js +2 -2
  67. package/FlowGraph/Blocks/Event/flowGraphSendCustomEventBlock.js.map +1 -1
  68. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphSwitchBlock.js +3 -2
  69. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphSwitchBlock.js.map +1 -1
  70. package/FlowGraph/flowGraphAsyncExecutionBlock.js +5 -3
  71. package/FlowGraph/flowGraphAsyncExecutionBlock.js.map +1 -1
  72. package/FlowGraph/flowGraphBlock.js +3 -2
  73. package/FlowGraph/flowGraphBlock.js.map +1 -1
  74. package/FlowGraph/flowGraphCoordinator.js +10 -6
  75. package/FlowGraph/flowGraphCoordinator.js.map +1 -1
  76. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js +2 -2
  77. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
  78. package/FrameGraph/Node/nodeRenderGraphBlock.js +5 -4
  79. package/FrameGraph/Node/nodeRenderGraphBlock.js.map +1 -1
  80. package/FrameGraph/Tasks/PostProcesses/depthOfFieldMergeTask.js +4 -3
  81. package/FrameGraph/Tasks/PostProcesses/depthOfFieldMergeTask.js.map +1 -1
  82. package/Gamepads/gamepadManager.js +2 -2
  83. package/Gamepads/gamepadManager.js.map +1 -1
  84. package/Gizmos/axisDragGizmo.js +3 -2
  85. package/Gizmos/axisDragGizmo.js.map +1 -1
  86. package/Gizmos/axisScaleGizmo.js +6 -4
  87. package/Gizmos/axisScaleGizmo.js.map +1 -1
  88. package/Gizmos/boundingBoxGizmo.js +28 -26
  89. package/Gizmos/boundingBoxGizmo.js.map +1 -1
  90. package/Gizmos/cameraGizmo.js +6 -3
  91. package/Gizmos/cameraGizmo.js.map +1 -1
  92. package/Gizmos/gizmo.js +11 -10
  93. package/Gizmos/gizmo.js.map +1 -1
  94. package/Gizmos/gizmoManager.js +16 -12
  95. package/Gizmos/gizmoManager.js.map +1 -1
  96. package/Gizmos/lightGizmo.js +3 -2
  97. package/Gizmos/lightGizmo.js.map +1 -1
  98. package/Gizmos/planeDragGizmo.js +3 -2
  99. package/Gizmos/planeDragGizmo.js.map +1 -1
  100. package/Gizmos/planeRotationGizmo.js +3 -2
  101. package/Gizmos/planeRotationGizmo.js.map +1 -1
  102. package/Gizmos/positionGizmo.js +41 -28
  103. package/Gizmos/positionGizmo.js.map +1 -1
  104. package/Gizmos/rotationGizmo.js +26 -18
  105. package/Gizmos/rotationGizmo.js.map +1 -1
  106. package/Gizmos/scaleGizmo.js +47 -32
  107. package/Gizmos/scaleGizmo.js.map +1 -1
  108. package/Layers/effectLayerSceneComponent.js +4 -4
  109. package/Layers/effectLayerSceneComponent.js.map +1 -1
  110. package/Layers/layerSceneComponent.js +4 -4
  111. package/Layers/layerSceneComponent.js.map +1 -1
  112. package/LensFlares/lensFlareSystemSceneComponent.js +4 -4
  113. package/LensFlares/lensFlareSystemSceneComponent.js.map +1 -1
  114. package/Lights/Shadows/shadowGenerator.js +3 -3
  115. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  116. package/Lights/light.js +4 -4
  117. package/Lights/light.js.map +1 -1
  118. package/Loading/Plugins/babylonFileLoader.js +54 -46
  119. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  120. package/Loading/loadingScreen.js +4 -3
  121. package/Loading/loadingScreen.js.map +1 -1
  122. package/Loading/sceneLoader.js +15 -12
  123. package/Loading/sceneLoader.js.map +1 -1
  124. package/Materials/Node/Blocks/Dual/currentScreenBlock.js +9 -3
  125. package/Materials/Node/Blocks/Dual/currentScreenBlock.js.map +1 -1
  126. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js +11 -0
  127. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
  128. package/Materials/Node/Blocks/Input/inputBlock.js +18 -31
  129. package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
  130. package/Materials/Node/Blocks/baseMathBlock.js +3 -1
  131. package/Materials/Node/Blocks/baseMathBlock.js.map +1 -1
  132. package/Materials/Node/Blocks/customBlock.js +53 -43
  133. package/Materials/Node/Blocks/customBlock.js.map +1 -1
  134. package/Materials/Node/Enums/nodeMaterialModes.d.ts +3 -1
  135. package/Materials/Node/Enums/nodeMaterialModes.js +2 -0
  136. package/Materials/Node/Enums/nodeMaterialModes.js.map +1 -1
  137. package/Materials/Node/nodeMaterial.d.ts +5 -0
  138. package/Materials/Node/nodeMaterial.js +33 -20
  139. package/Materials/Node/nodeMaterial.js.map +1 -1
  140. package/Materials/Node/nodeMaterialBlock.js +7 -4
  141. package/Materials/Node/nodeMaterialBlock.js.map +1 -1
  142. package/Materials/Node/nodeMaterialBuildState.d.ts +13 -2
  143. package/Materials/Node/nodeMaterialBuildState.js +72 -7
  144. package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
  145. package/Materials/Node/nodeMaterialDefault.d.ts +5 -0
  146. package/Materials/Node/nodeMaterialDefault.js +28 -0
  147. package/Materials/Node/nodeMaterialDefault.js.map +1 -1
  148. package/Materials/Textures/cubeTexture.js +3 -1
  149. package/Materials/Textures/cubeTexture.js.map +1 -1
  150. package/Materials/Textures/videoTexture.js +5 -4
  151. package/Materials/Textures/videoTexture.js.map +1 -1
  152. package/Materials/materialDefines.js +3 -1
  153. package/Materials/materialDefines.js.map +1 -1
  154. package/Materials/multiMaterial.js +3 -1
  155. package/Materials/multiMaterial.js.map +1 -1
  156. package/Materials/shaderMaterial.js +3 -2
  157. package/Materials/shaderMaterial.js.map +1 -1
  158. package/Materials/shadowDepthWrapper.js +6 -0
  159. package/Materials/shadowDepthWrapper.js.map +1 -1
  160. package/Materials/uniformBuffer.js +4 -0
  161. package/Materials/uniformBuffer.js.map +1 -1
  162. package/Meshes/Compression/dracoEncoder.js +2 -2
  163. package/Meshes/Compression/dracoEncoder.js.map +1 -1
  164. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +32 -15
  165. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
  166. package/Meshes/GreasedLine/greasedLineMesh.js +6 -6
  167. package/Meshes/GreasedLine/greasedLineMesh.js.map +1 -1
  168. package/Meshes/GreasedLine/greasedLineRibbonMesh.js +4 -3
  169. package/Meshes/GreasedLine/greasedLineRibbonMesh.js.map +1 -1
  170. package/Meshes/Node/Blocks/mathBlock.js +3 -1
  171. package/Meshes/Node/Blocks/mathBlock.js.map +1 -1
  172. package/Meshes/Node/nodeGeometryBlock.js +8 -5
  173. package/Meshes/Node/nodeGeometryBlock.js.map +1 -1
  174. package/Meshes/abstractMesh.js +2 -2
  175. package/Meshes/abstractMesh.js.map +1 -1
  176. package/Meshes/geodesicMesh.js +2 -2
  177. package/Meshes/geodesicMesh.js.map +1 -1
  178. package/Meshes/mesh.js +6 -6
  179. package/Meshes/mesh.js.map +1 -1
  180. package/Meshes/mesh.vertexData.functions.js +11 -10
  181. package/Meshes/mesh.vertexData.functions.js.map +1 -1
  182. package/Meshes/mesh.vertexData.subdivide.js +10 -10
  183. package/Meshes/mesh.vertexData.subdivide.js.map +1 -1
  184. package/Meshes/meshSimplification.js +10 -10
  185. package/Meshes/meshSimplification.js.map +1 -1
  186. package/Meshes/meshUtils.js +6 -3
  187. package/Meshes/meshUtils.js.map +1 -1
  188. package/Meshes/polygonMesh.js +10 -10
  189. package/Meshes/polygonMesh.js.map +1 -1
  190. package/Misc/PerformanceViewer/performanceViewerCollector.js +4 -4
  191. package/Misc/PerformanceViewer/performanceViewerCollector.js.map +1 -1
  192. package/Misc/arrayTools.js +2 -2
  193. package/Misc/arrayTools.js.map +1 -1
  194. package/Misc/asyncLock.js +9 -9
  195. package/Misc/asyncLock.js.map +1 -1
  196. package/Misc/basis.js +4 -2
  197. package/Misc/basis.js.map +1 -1
  198. package/Misc/deepCopier.js +3 -2
  199. package/Misc/deepCopier.js.map +1 -1
  200. package/Misc/deepMerger.js +3 -2
  201. package/Misc/deepMerger.js.map +1 -1
  202. package/Misc/fileTools.js +4 -4
  203. package/Misc/fileTools.js.map +1 -1
  204. package/Misc/greasedLineTools.js +14 -13
  205. package/Misc/greasedLineTools.js.map +1 -1
  206. package/Misc/logger.js +3 -2
  207. package/Misc/logger.js.map +1 -1
  208. package/Misc/observable.d.ts +3 -2
  209. package/Misc/observable.extensions.js +4 -4
  210. package/Misc/observable.extensions.js.map +1 -1
  211. package/Misc/observable.js +5 -4
  212. package/Misc/observable.js.map +1 -1
  213. package/Misc/sceneSerializer.js +5 -4
  214. package/Misc/sceneSerializer.js.map +1 -1
  215. package/Misc/snapshotRenderingHelper.js +3 -1
  216. package/Misc/snapshotRenderingHelper.js.map +1 -1
  217. package/Misc/tags.js +2 -2
  218. package/Misc/tags.js.map +1 -1
  219. package/Misc/trajectoryClassifier.js +8 -8
  220. package/Misc/trajectoryClassifier.js.map +1 -1
  221. package/Particles/IParticleSystem.d.ts +1 -1
  222. package/Particles/IParticleSystem.js.map +1 -1
  223. package/Particles/baseParticleSystem.d.ts +11 -3
  224. package/Particles/baseParticleSystem.js +37 -3
  225. package/Particles/baseParticleSystem.js.map +1 -1
  226. package/Particles/gpuParticleSystem.js +1 -14
  227. package/Particles/gpuParticleSystem.js.map +1 -1
  228. package/Particles/particle.js +2 -2
  229. package/Particles/particle.js.map +1 -1
  230. package/Particles/particleSystem.js +15 -13
  231. package/Particles/particleSystem.js.map +1 -1
  232. package/Particles/thinParticleSystem.js +3 -16
  233. package/Particles/thinParticleSystem.js.map +1 -1
  234. package/Physics/physicsHelper.js +18 -14
  235. package/Physics/physicsHelper.js.map +1 -1
  236. package/Physics/v1/Plugins/ammoJSPlugin.js +10 -8
  237. package/Physics/v1/Plugins/ammoJSPlugin.js.map +1 -1
  238. package/Physics/v1/Plugins/cannonJSPlugin.js +13 -8
  239. package/Physics/v1/Plugins/cannonJSPlugin.js.map +1 -1
  240. package/Physics/v1/Plugins/oimoJSPlugin.js +9 -8
  241. package/Physics/v1/Plugins/oimoJSPlugin.js.map +1 -1
  242. package/Physics/v1/physicsEngine.js +4 -4
  243. package/Physics/v1/physicsEngine.js.map +1 -1
  244. package/Physics/v1/physicsImpostor.js +10 -21
  245. package/Physics/v1/physicsImpostor.js.map +1 -1
  246. package/Physics/v2/Plugins/havokPlugin.js +12 -10
  247. package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
  248. package/Physics/v2/ragdoll.js +4 -4
  249. package/Physics/v2/ragdoll.js.map +1 -1
  250. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js +3 -2
  251. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js.map +1 -1
  252. package/PostProcesses/RenderPipeline/postProcessRenderEffect.js +8 -6
  253. package/PostProcesses/RenderPipeline/postProcessRenderEffect.js.map +1 -1
  254. package/PostProcesses/depthOfFieldMergePostProcess.js +4 -3
  255. package/PostProcesses/depthOfFieldMergePostProcess.js.map +1 -1
  256. package/Rendering/GlobalIllumination/giRSMManager.js +6 -6
  257. package/Rendering/GlobalIllumination/giRSMManager.js.map +1 -1
  258. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js +14 -14
  259. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js.map +1 -1
  260. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js +14 -12
  261. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js.map +1 -1
  262. package/Rendering/iblCdfGenerator.js +4 -4
  263. package/Rendering/iblCdfGenerator.js.map +1 -1
  264. package/Rendering/objectRenderer.js +2 -2
  265. package/Rendering/objectRenderer.js.map +1 -1
  266. package/Rendering/reflectiveShadowMap.js +7 -5
  267. package/Rendering/reflectiveShadowMap.js.map +1 -1
  268. package/ShadersWGSL/gaussianSplatting.vertex.js +1 -1
  269. package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
  270. package/Sprites/spriteMap.js +2 -2
  271. package/Sprites/spriteMap.js.map +1 -1
  272. package/XR/features/WebXRAbstractFeature.js +2 -2
  273. package/XR/features/WebXRAbstractFeature.js.map +1 -1
  274. package/XR/features/WebXRAnchorSystem.js +4 -4
  275. package/XR/features/WebXRAnchorSystem.js.map +1 -1
  276. package/XR/features/WebXRBackgroundRemover.js +3 -1
  277. package/XR/features/WebXRBackgroundRemover.js.map +1 -1
  278. package/XR/features/WebXRControllerMovement.js +6 -3
  279. package/XR/features/WebXRControllerMovement.js.map +1 -1
  280. package/XR/features/WebXRControllerPhysics.js +12 -7
  281. package/XR/features/WebXRControllerPhysics.js.map +1 -1
  282. package/XR/features/WebXRControllerPointerSelection.js +12 -7
  283. package/XR/features/WebXRControllerPointerSelection.js.map +1 -1
  284. package/XR/features/WebXRControllerTeleportation.js +11 -7
  285. package/XR/features/WebXRControllerTeleportation.js.map +1 -1
  286. package/XR/features/WebXRDepthSensing.js +6 -6
  287. package/XR/features/WebXRDepthSensing.js.map +1 -1
  288. package/XR/features/WebXRHandTracking.js +60 -24
  289. package/XR/features/WebXRHandTracking.js.map +1 -1
  290. package/XR/features/WebXRHitTest.js +4 -4
  291. package/XR/features/WebXRHitTest.js.map +1 -1
  292. package/XR/features/WebXRImageTracking.js +2 -2
  293. package/XR/features/WebXRImageTracking.js.map +1 -1
  294. package/XR/features/WebXRLayers.js +2 -2
  295. package/XR/features/WebXRLayers.js.map +1 -1
  296. package/XR/features/WebXRNearInteraction.js +12 -7
  297. package/XR/features/WebXRNearInteraction.js.map +1 -1
  298. package/XR/features/WebXRRawCameraAccess.js +9 -4
  299. package/XR/features/WebXRRawCameraAccess.js.map +1 -1
  300. package/XR/features/WebXRSpaceWarp.js +2 -2
  301. package/XR/features/WebXRSpaceWarp.js.map +1 -1
  302. package/XR/motionController/webXRAbstractMotionController.js +19 -8
  303. package/XR/motionController/webXRAbstractMotionController.js.map +1 -1
  304. package/XR/motionController/webXRGenericMotionController.js +2 -2
  305. package/XR/motionController/webXRGenericMotionController.js.map +1 -1
  306. package/XR/motionController/webXRHTCViveMotionController.js +5 -4
  307. package/XR/motionController/webXRHTCViveMotionController.js.map +1 -1
  308. package/XR/motionController/webXRMicrosoftMixedRealityController.js +9 -6
  309. package/XR/motionController/webXRMicrosoftMixedRealityController.js.map +1 -1
  310. package/XR/motionController/webXRMotionControllerManager.js +4 -4
  311. package/XR/motionController/webXRMotionControllerManager.js.map +1 -1
  312. package/XR/motionController/webXROculusTouchMotionController.js +5 -4
  313. package/XR/motionController/webXROculusTouchMotionController.js.map +1 -1
  314. package/XR/motionController/webXRProfiledMotionController.js +15 -10
  315. package/XR/motionController/webXRProfiledMotionController.js.map +1 -1
  316. package/XR/webXRCamera.js +3 -2
  317. package/XR/webXRCamera.js.map +1 -1
  318. package/XR/webXREnterExitUI.js +5 -4
  319. package/XR/webXREnterExitUI.js.map +1 -1
  320. package/XR/webXRExperienceHelper.js +2 -2
  321. package/XR/webXRExperienceHelper.js.map +1 -1
  322. package/XR/webXRFeaturesManager.js +10 -7
  323. package/XR/webXRFeaturesManager.js.map +1 -1
  324. package/XR/webXRInput.js +8 -8
  325. package/XR/webXRInput.js.map +1 -1
  326. package/XR/webXRInputSource.js +4 -1
  327. package/XR/webXRInputSource.js.map +1 -1
  328. package/XR/webXRRenderTargetTextureProvider.js +3 -1
  329. package/XR/webXRRenderTargetTextureProvider.js.map +1 -1
  330. package/assetContainer.js +156 -135
  331. package/assetContainer.js.map +1 -1
  332. package/node.js +2 -2
  333. package/node.js.map +1 -1
  334. package/package.json +1 -1
  335. package/scene.js +18 -11
  336. package/scene.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"loadingScreen.js","sourceRoot":"","sources":["../../../../dev/core/src/Loading/loadingScreen.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAyBrD;;;GAGG;AACH,MAAM,OAAO,oBAAoB;IAkB7B;;;;;OAKG;IACH,YACY,gBAAmC,EACnC,eAAe,EAAE,EACjB,6BAA6B,OAAO;QAFpC,qBAAgB,GAAhB,gBAAgB,CAAmB;QACnC,iBAAY,GAAZ,YAAY,CAAK;QACjB,+BAA0B,GAA1B,0BAA0B,CAAU;QAvBhD;;;WAGG;QACK,oCAA+B,GAA6D,IAAI,GAAG,EAAE,CAAC;QA0R9G,SAAS;QACD,qBAAgB,GAAG,GAAG,EAAE;YAC5B,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;gBACnB,OAAO;YACX,CAAC;YAED,IAAI,CAAC,+BAA+B,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAAE,UAAU,EAAE,EAAE;gBACtF,MAAM,iBAAiB,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC;gBACzD,IAAI,IAAI,CAAC,sBAAsB,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,EAAE,CAAC;oBACrE,MAAM,iBAAiB,GAAG,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC;oBAEnE,UAAU,CAAC,KAAK,CAAC,QAAQ,GAAG,iBAAiB,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;oBACjF,UAAU,CAAC,KAAK,CAAC,IAAI,GAAG,iBAAiB,CAAC,IAAI,GAAG,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;oBACvE,UAAU,CAAC,KAAK,CAAC,GAAG,GAAG,iBAAiB,CAAC,GAAG,GAAG,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;oBACrE,UAAU,CAAC,KAAK,CAAC,KAAK,GAAG,iBAAiB,CAAC,KAAK,GAAG,IAAI,CAAC;oBACxD,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,iBAAiB,CAAC,MAAM,GAAG,IAAI,CAAC;oBAE1D,IAAI,CAAC,+BAA+B,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;gBACtF,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC,CAAC;IA1RC,CAAC;IAEJ;;OAEG;IACI,gBAAgB;QACnB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,uDAAuD;YACvD,OAAO;QACX,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,yCAAyC;QACzC,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,kBAAkB,EAAE,KAAK,IAAI,CAAC,gBAAgB,CAAmB,CAAC;QAE/H,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAEjD,UAAU,CAAC,EAAE,GAAG,qBAAqB,CAAC;QACtC,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC;QAC/B,UAAU,CAAC,KAAK,CAAC,UAAU,GAAG,mBAAmB,CAAC;QAClD,UAAU,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC;QACxC,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QAClC,UAAU,CAAC,KAAK,CAAC,gBAAgB,GAAG,MAAM,CAAC;QAC3C,UAAU,CAAC,KAAK,CAAC,mBAAmB,GAAG,MAAM,CAAC;QAC9C,UAAU,CAAC,KAAK,CAAC,YAAY,GAAG,QAAQ,CAAC;QACzC,UAAU,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;QAEvC,eAAe;QACf,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACrD,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;QACjD,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC;QACtC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC;QACvC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;QAC9C,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;QAC1C,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;QAC3C,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,UAAU,GAAG,OAAO,CAAC;QAChD,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC;QAC7C,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC;QAC3C,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC;QAChD,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;QACxC,IAAI,CAAC,eAAe,CAAC,SAAS,GAAG,SAAS,CAAC;QAE3C,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAE7C,yBAAyB;QACzB,IAAI,CAAC,eAAe,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC;QAEnD,uBAAuB;QACvB,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC;QAC9B,MAAM,SAAS,GAAG;;;;;;;0BAOA,CAAC;QACnB,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;QAClC,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAElE,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC;QAC1C,cAAc;QACd,MAAM,OAAO,GAAG,IAAI,KAAK,EAAE,CAAC;QAC5B,IAAI,CAAC,oBAAoB,CAAC,cAAc,EAAE,CAAC;YACvC,OAAO,CAAC,GAAG,GAAG,CAAC,UAAU;gBACrB,CAAC,CAAC,kDAAkD;gBACpD,CAAC,CAAC,4lDAA4lD,CAAC;QACvmD,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,GAAG,GAAG,oBAAoB,CAAC,cAAc,CAAC;QACtD,CAAC;QAED,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,uBAAuB,CAAC;QAClD,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;QAEpC,MAAM,qBAAqB,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC5D,qBAAqB,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC;QAC5C,qBAAqB,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC;QAC7C,qBAAqB,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC;QAC1C,qBAAqB,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC;QACxC,qBAAqB,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC;QACzC,qBAAqB,CAAC,KAAK,CAAC,SAAS,GAAG,uBAAuB,CAAC;QAChE,qBAAqB,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;QAElD,kBAAkB;QAClB,MAAM,UAAU,GAAG,IAAI,KAAK,EAAE,CAAC;QAE/B,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,CAAC;YAC1C,UAAU,CAAC,GAAG,GAAG,CAAC,UAAU;gBACxB,CAAC,CAAC,kDAAkD;gBACpD,CAAC,CAAC,4/CAA4/C,CAAC;QACvgD,CAAC;aAAM,CAAC;YACJ,UAAU,CAAC,GAAG,GAAG,oBAAoB,CAAC,iBAAiB,CAAC;QAC5D,CAAC;QAED,UAAU,CAAC,KAAK,CAAC,SAAS,GAAG,6BAA6B,CAAC;QAC3D,UAAU,CAAC,KAAK,CAAC,eAAe,GAAG,SAAS,CAAC;QAE7C,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,MAAM,QAAQ,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;YACpC,MAAM,WAAW,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;YACrC,wBAAwB;YACxB,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC;YACxC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC;YACzC,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,cAAc,QAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;YACvD,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,cAAc,QAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;YAEtD,UAAU,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,WAAW,CAAC,CAAC,IAAI,CAAC;YAC9C,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC,IAAI,CAAC;YAC/C,UAAU,CAAC,KAAK,CAAC,IAAI,GAAG,cAAc,WAAW,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;YAC7D,UAAU,CAAC,KAAK,CAAC,GAAG,GAAG,cAAc,WAAW,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;QAChE,CAAC;QAED,qBAAqB,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAE9C,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAChC,UAAU,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;QAC9C,UAAU,CAAC,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,0BAA0B,CAAC;QACnE,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC;QAE/B,MAAM,QAAQ,GAA6B,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QACjC,IAAI,KAAK,EAAE,MAAM,EAAE,CAAC;YAChB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACvB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACf,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC/B,CAAC;YACL,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACzC,CAAC;QACD,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAC/B,MAAM,gBAAgB,GAAG,UAAW,CAAC,SAAS,CAAC,IAAI,CAAmB,CAAC;YACvE,gBAAgB,CAAC,EAAE,IAAI,IAAI,KAAK,EAAE,CAAC;YACnC,IAAI,CAAC,+BAA+B,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;QAC/E,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,EAAE;YAC5D,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,+BAA+B,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE;YAC3D,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACI,aAAa;QAChB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACnB,OAAO;QACX,CAAC;QAED,IAAI,oBAAoB,GAAG,CAAC,CAAC;QAE7B,MAAM,eAAe,GAAG,CAAC,KAAsB,EAAE,EAAE;YAC/C,MAAM,UAAU,GAAG,KAAK,CAAC,MAAwB,CAAC;YAClD,qFAAqF;YACrF,MAAM,2BAA2B,GAAG,IAAI,CAAC,+BAA+B,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAEzF,IAAI,2BAA2B,EAAE,CAAC;gBAC9B,oBAAoB,EAAE,CAAC;gBACvB,UAAU,CAAC,MAAM,EAAE,CAAC;gBAEpB,MAAM,uBAAuB,GAAG,oBAAoB,KAAK,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC;gBACnG,IAAI,uBAAuB,EAAE,CAAC;oBAC1B,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;wBACvB,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;wBAC9B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;oBAChC,CAAC;oBACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;wBACd,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;wBACrB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;oBACvB,CAAC;oBAED,MAAM,CAAC,mBAAmB,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;oBAC7D,IAAI,CAAC,OAAQ,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;oBAC9D,IAAI,CAAC,+BAA+B,CAAC,KAAK,EAAE,CAAC;oBAC7C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;oBACpB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;gBAC5B,CAAC;YACL,CAAC;QACL,CAAC,CAAC;QAEF,IAAI,CAAC,+BAA+B,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE;YAC3D,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,gBAAgB,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;IAC9D,CAAC;IAED;;OAEG;IACH,IAAW,aAAa,CAAC,IAAY;QACjC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAEzB,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,+BAA+B,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE;gBAC3D,2CAA2C;gBAC3C,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC;YACzD,CAAC,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED,IAAW,aAAa;QACpB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,IAAW,wBAAwB;QAC/B,OAAO,IAAI,CAAC,0BAA0B,CAAC;IAC3C,CAAC;IAED,IAAW,wBAAwB,CAAC,KAAa;QAC7C,IAAI,CAAC,0BAA0B,GAAG,KAAK,CAAC;QAExC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACnB,OAAO;QACX,CAAC;QAED,IAAI,CAAC,+BAA+B,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE;YAC3D,UAAU,CAAC,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,0BAA0B,CAAC;QACvE,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;;;;;;OAWG;IACK,sBAAsB,CAAC,kBAAkC,EAAE,iBAA0B;QACzF,OAAO,CACH,CAAC,kBAAkB;YACnB,kBAAkB,CAAC,IAAI,KAAK,iBAAiB,CAAC,IAAI;YAClD,kBAAkB,CAAC,GAAG,KAAK,iBAAiB,CAAC,GAAG;YAChD,kBAAkB,CAAC,KAAK,KAAK,iBAAiB,CAAC,KAAK;YACpD,kBAAkB,CAAC,MAAM,KAAK,iBAAiB,CAAC,MAAM;YACtD,kBAAkB,CAAC,KAAK,KAAK,iBAAiB,CAAC,KAAK;YACpD,kBAAkB,CAAC,MAAM,KAAK,iBAAiB,CAAC,MAAM;YACtD,kBAAkB,CAAC,CAAC,KAAK,iBAAiB,CAAC,CAAC;YAC5C,kBAAkB,CAAC,CAAC,KAAK,iBAAiB,CAAC,CAAC,CAC/C,CAAC;IACN,CAAC;;AApRD,sEAAsE;AACxD,mCAAc,GAAG,EAAE,AAAL,CAAM;AAElC,yEAAyE;AAC3D,sCAAiB,GAAG,EAAE,AAAL,CAAM;AAySzC,cAAc,CAAC,2BAA2B,GAAG,CAAC,MAAyB,EAAE,EAAE;IACvE,OAAO,IAAI,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAC5C,CAAC,CAAC","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport { AbstractEngine } from \"../Engines/abstractEngine\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport type { Observer } from \"../Misc/observable\";\r\n/**\r\n * Interface used to present a loading screen while loading a scene\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/scene/customLoadingScreen\r\n */\r\nexport interface ILoadingScreen {\r\n /**\r\n * Function called to display the loading screen\r\n */\r\n displayLoadingUI: () => void;\r\n /**\r\n * Function called to hide the loading screen\r\n */\r\n hideLoadingUI: () => void;\r\n /**\r\n * Gets or sets the color to use for the background\r\n */\r\n loadingUIBackgroundColor: string;\r\n /**\r\n * Gets or sets the text to display while loading\r\n */\r\n loadingUIText: string;\r\n}\r\n\r\n/**\r\n * Class used for the default loading screen\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/scene/customLoadingScreen\r\n */\r\nexport class DefaultLoadingScreen implements ILoadingScreen {\r\n private _engine: Nullable<AbstractEngine>;\r\n private _resizeObserver: Nullable<Observer<AbstractEngine>>;\r\n private _isLoading: boolean;\r\n /**\r\n * Maps a loading `HTMLDivElement` to a tuple containing the associated `HTMLCanvasElement`\r\n * and its `DOMRect` (or `null` if not yet available).\r\n */\r\n private _loadingDivToRenderingCanvasMap: Map<HTMLDivElement, [HTMLCanvasElement, DOMRect | null]> = new Map();\r\n private _loadingTextDiv: Nullable<HTMLDivElement>;\r\n private _style: Nullable<HTMLStyleElement>;\r\n\r\n /** Gets or sets the logo url to use for the default loading screen */\r\n public static DefaultLogoUrl = \"\";\r\n\r\n /** Gets or sets the spinner url to use for the default loading screen */\r\n public static DefaultSpinnerUrl = \"\";\r\n\r\n /**\r\n * Creates a new default loading screen\r\n * @param _renderingCanvas defines the canvas used to render the scene\r\n * @param _loadingText defines the default text to display\r\n * @param _loadingDivBackgroundColor defines the default background color\r\n */\r\n constructor(\r\n private _renderingCanvas: HTMLCanvasElement,\r\n private _loadingText = \"\",\r\n private _loadingDivBackgroundColor = \"black\"\r\n ) {}\r\n\r\n /**\r\n * Function called to display the loading screen\r\n */\r\n public displayLoadingUI(): void {\r\n if (this._isLoading) {\r\n // Do not add a loading screen if it is already loading\r\n return;\r\n }\r\n\r\n this._isLoading = true;\r\n // get current engine by rendering canvas\r\n this._engine = EngineStore.Instances.find((engine) => engine.getRenderingCanvas() === this._renderingCanvas) as AbstractEngine;\r\n\r\n const loadingDiv = document.createElement(\"div\");\r\n\r\n loadingDiv.id = \"babylonjsLoadingDiv\";\r\n loadingDiv.style.opacity = \"0\";\r\n loadingDiv.style.transition = \"opacity 1.5s ease\";\r\n loadingDiv.style.pointerEvents = \"none\";\r\n loadingDiv.style.display = \"grid\";\r\n loadingDiv.style.gridTemplateRows = \"100%\";\r\n loadingDiv.style.gridTemplateColumns = \"100%\";\r\n loadingDiv.style.justifyItems = \"center\";\r\n loadingDiv.style.alignItems = \"center\";\r\n\r\n // Loading text\r\n this._loadingTextDiv = document.createElement(\"div\");\r\n this._loadingTextDiv.style.position = \"absolute\";\r\n this._loadingTextDiv.style.left = \"0\";\r\n this._loadingTextDiv.style.top = \"50%\";\r\n this._loadingTextDiv.style.marginTop = \"80px\";\r\n this._loadingTextDiv.style.width = \"100%\";\r\n this._loadingTextDiv.style.height = \"20px\";\r\n this._loadingTextDiv.style.fontFamily = \"Arial\";\r\n this._loadingTextDiv.style.fontSize = \"14px\";\r\n this._loadingTextDiv.style.color = \"white\";\r\n this._loadingTextDiv.style.textAlign = \"center\";\r\n this._loadingTextDiv.style.zIndex = \"1\";\r\n this._loadingTextDiv.innerHTML = \"Loading\";\r\n\r\n loadingDiv.appendChild(this._loadingTextDiv);\r\n\r\n //set the predefined text\r\n this._loadingTextDiv.innerHTML = this._loadingText;\r\n\r\n // Generating keyframes\r\n this._style = document.createElement(\"style\");\r\n this._style.type = \"text/css\";\r\n const keyFrames = `@-webkit-keyframes spin1 {\\\r\n 0% { -webkit-transform: rotate(0deg);}\r\n 100% { -webkit-transform: rotate(360deg);}\r\n }\\\r\n @keyframes spin1 {\\\r\n 0% { transform: rotate(0deg);}\r\n 100% { transform: rotate(360deg);}\r\n }`;\r\n this._style.innerHTML = keyFrames;\r\n document.getElementsByTagName(\"head\")[0].appendChild(this._style);\r\n\r\n const svgSupport = !!window.SVGSVGElement;\r\n // Loading img\r\n const imgBack = new Image();\r\n if (!DefaultLoadingScreen.DefaultLogoUrl) {\r\n imgBack.src = !svgSupport\r\n ? \"https://cdn.babylonjs.com/Assets/babylonLogo.png\"\r\n : `data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxODAuMTcgMjA4LjA0Ij48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6I2ZmZjt9LmNscy0ye2ZpbGw6I2UwNjg0Yjt9LmNscy0ze2ZpbGw6I2JiNDY0Yjt9LmNscy00e2ZpbGw6I2UwZGVkODt9LmNscy01e2ZpbGw6I2Q1ZDJjYTt9PC9zdHlsZT48L2RlZnM+PHRpdGxlPkJhYnlsb25Mb2dvPC90aXRsZT48ZyBpZD0iTGF5ZXJfMiIgZGF0YS1uYW1lPSJMYXllciAyIj48ZyBpZD0iUGFnZV9FbGVtZW50cyIgZGF0YS1uYW1lPSJQYWdlIEVsZW1lbnRzIj48cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik05MC4wOSwwLDAsNTJWMTU2bDkwLjA5LDUyLDkwLjA4LTUyVjUyWiIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtMiIgcG9pbnRzPSIxODAuMTcgNTIuMDEgMTUxLjk3IDM1LjczIDEyNC44NSA1MS4zOSAxNTMuMDUgNjcuNjcgMTgwLjE3IDUyLjAxIi8+PHBvbHlnb24gY2xhc3M9ImNscy0yIiBwb2ludHM9IjI3LjEyIDY3LjY3IDExNy4yMSAxNS42NiA5MC4wOCAwIDAgNTIuMDEgMjcuMTIgNjcuNjciLz48cG9seWdvbiBjbGFzcz0iY2xzLTIiIHBvaW50cz0iNjEuODkgMTIwLjMgOTAuMDggMTM2LjU4IDExOC4yOCAxMjAuMyA5MC4wOCAxMDQuMDIgNjEuODkgMTIwLjMiLz48cG9seWdvbiBjbGFzcz0iY2xzLTMiIHBvaW50cz0iMTUzLjA1IDY3LjY3IDE1My4wNSAxNDAuMzcgOTAuMDggMTc2LjcyIDI3LjEyIDE0MC4zNyAyNy4xMiA2Ny42NyAwIDUyLjAxIDAgMTU2LjAzIDkwLjA4IDIwOC4wNCAxODAuMTcgMTU2LjAzIDE4MC4xNyA1Mi4wMSAxNTMuMDUgNjcuNjciLz48cG9seWdvbiBjbGFzcz0iY2xzLTMiIHBvaW50cz0iOTAuMDggNzEuNDYgNjEuODkgODcuNzQgNjEuODkgMTIwLjMgOTAuMDggMTA0LjAyIDExOC4yOCAxMjAuMyAxMTguMjggODcuNzQgOTAuMDggNzEuNDYiLz48cG9seWdvbiBjbGFzcz0iY2xzLTQiIHBvaW50cz0iMTUzLjA1IDY3LjY3IDExOC4yOCA4Ny43NCAxMTguMjggMTIwLjMgOTAuMDggMTM2LjU4IDkwLjA4IDE3Ni43MiAxNTMuMDUgMTQwLjM3IDE1My4wNSA2Ny42NyIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtNSIgcG9pbnRzPSIyNy4xMiA2Ny42NyA2MS44OSA4Ny43NCA2MS44OSAxMjAuMyA5MC4wOCAxMzYuNTggOTAuMDggMTc2LjcyIDI3LjEyIDE0MC4zNyAyNy4xMiA2Ny42NyIvPjwvZz48L2c+PC9zdmc+`;\r\n } else {\r\n imgBack.src = DefaultLoadingScreen.DefaultLogoUrl;\r\n }\r\n\r\n imgBack.style.width = \"150px\";\r\n imgBack.style.gridColumn = \"1\";\r\n imgBack.style.gridRow = \"1\";\r\n imgBack.style.top = \"50%\";\r\n imgBack.style.left = \"50%\";\r\n imgBack.style.transform = \"translate(-50%, -50%)\";\r\n imgBack.style.position = \"absolute\";\r\n\r\n const imageSpinnerContainer = document.createElement(\"div\");\r\n imageSpinnerContainer.style.width = \"300px\";\r\n imageSpinnerContainer.style.gridColumn = \"1\";\r\n imageSpinnerContainer.style.gridRow = \"1\";\r\n imageSpinnerContainer.style.top = \"50%\";\r\n imageSpinnerContainer.style.left = \"50%\";\r\n imageSpinnerContainer.style.transform = \"translate(-50%, -50%)\";\r\n imageSpinnerContainer.style.position = \"absolute\";\r\n\r\n // Loading spinner\r\n const imgSpinner = new Image();\r\n\r\n if (!DefaultLoadingScreen.DefaultSpinnerUrl) {\r\n imgSpinner.src = !svgSupport\r\n ? \"https://cdn.babylonjs.com/Assets/loadingIcon.png\"\r\n : `data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzOTIgMzkyIj48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6I2UwNjg0Yjt9LmNscy0ye2ZpbGw6bm9uZTt9PC9zdHlsZT48L2RlZnM+PHRpdGxlPlNwaW5uZXJJY29uPC90aXRsZT48ZyBpZD0iTGF5ZXJfMiIgZGF0YS1uYW1lPSJMYXllciAyIj48ZyBpZD0iU3Bpbm5lciI+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNNDAuMjEsMTI2LjQzYzMuNy03LjMxLDcuNjctMTQuNDQsMTItMjEuMzJsMy4zNi01LjEsMy41Mi01YzEuMjMtMS42MywyLjQxLTMuMjksMy42NS00LjkxczIuNTMtMy4yMSwzLjgyLTQuNzlBMTg1LjIsMTg1LjIsMCwwLDEsODMuNCw2Ny40M2EyMDgsMjA4LDAsMCwxLDE5LTE1LjY2YzMuMzUtMi40MSw2Ljc0LTQuNzgsMTAuMjUtN3M3LjExLTQuMjgsMTAuNzUtNi4zMmM3LjI5LTQsMTQuNzMtOCwyMi41My0xMS40OSwzLjktMS43Miw3Ljg4LTMuMywxMi00LjY0YTEwNC4yMiwxMDQuMjIsMCwwLDEsMTIuNDQtMy4yMyw2Mi40NCw2Mi40NCwwLDAsMSwxMi43OC0xLjM5QTI1LjkyLDI1LjkyLDAsMCwxLDE5NiwyMS40NGE2LjU1LDYuNTUsMCwwLDEsMi4wNSw5LDYuNjYsNi42NiwwLDAsMS0xLjY0LDEuNzhsLS40MS4yOWEyMi4wNywyMi4wNywwLDAsMS01Ljc4LDMsMzAuNDIsMzAuNDIsMCwwLDEtNS42NywxLjYyLDM3LjgyLDM3LjgyLDAsMCwxLTUuNjkuNzFjLTEsMC0xLjkuMTgtMi44NS4yNmwtMi44NS4yNHEtNS43Mi41MS0xMS40OCwxLjFjLTMuODQuNC03LjcxLjgyLTExLjU4LDEuNGExMTIuMzQsMTEyLjM0LDAsMCwwLTIyLjk0LDUuNjFjLTMuNzIsMS4zNS03LjM0LDMtMTAuOTQsNC42NHMtNy4xNCwzLjUxLTEwLjYsNS41MUExNTEuNiwxNTEuNiwwLDAsMCw2OC41Niw4N0M2Ny4yMyw4OC40OCw2Niw5MCw2NC42NCw5MS41NnMtMi41MSwzLjE1LTMuNzUsNC43M2wtMy41NCw0LjljLTEuMTMsMS42Ni0yLjIzLDMuMzUtMy4zMyw1YTEyNywxMjcsMCwwLDAtMTAuOTMsMjEuNDksMS41OCwxLjU4LDAsMSwxLTMtMS4xNVM0MC4xOSwxMjYuNDcsNDAuMjEsMTI2LjQzWiIvPjxyZWN0IGNsYXNzPSJjbHMtMiIgd2lkdGg9IjM5MiIgaGVpZ2h0PSIzOTIiLz48L2c+PC9nPjwvc3ZnPg==`;\r\n } else {\r\n imgSpinner.src = DefaultLoadingScreen.DefaultSpinnerUrl;\r\n }\r\n\r\n imgSpinner.style.animation = \"spin1 0.75s infinite linear\";\r\n imgSpinner.style.transformOrigin = \"50% 50%\";\r\n\r\n if (!svgSupport) {\r\n const logoSize = { w: 16, h: 18.5 };\r\n const loadingSize = { w: 30, h: 30 };\r\n // set styling correctly\r\n imgBack.style.width = `${logoSize.w}vh`;\r\n imgBack.style.height = `${logoSize.h}vh`;\r\n imgBack.style.left = `calc(50% - ${logoSize.w / 2}vh)`;\r\n imgBack.style.top = `calc(50% - ${logoSize.h / 2}vh)`;\r\n\r\n imgSpinner.style.width = `${loadingSize.w}vh`;\r\n imgSpinner.style.height = `${loadingSize.h}vh`;\r\n imgSpinner.style.left = `calc(50% - ${loadingSize.w / 2}vh)`;\r\n imgSpinner.style.top = `calc(50% - ${loadingSize.h / 2}vh)`;\r\n }\r\n\r\n imageSpinnerContainer.appendChild(imgSpinner);\r\n\r\n loadingDiv.appendChild(imgBack);\r\n loadingDiv.appendChild(imageSpinnerContainer);\r\n loadingDiv.style.backgroundColor = this._loadingDivBackgroundColor;\r\n loadingDiv.style.opacity = \"1\";\r\n\r\n const canvases: Array<HTMLCanvasElement> = [];\r\n const views = this._engine.views;\r\n if (views?.length) {\r\n for (const view of views) {\r\n if (view.enabled) {\r\n canvases.push(view.target);\r\n }\r\n }\r\n } else {\r\n canvases.push(this._renderingCanvas);\r\n }\r\n canvases.forEach((canvas, index) => {\r\n const clonedLoadingDiv = loadingDiv!.cloneNode(true) as HTMLDivElement;\r\n clonedLoadingDiv.id += `-${index}`;\r\n this._loadingDivToRenderingCanvasMap.set(clonedLoadingDiv, [canvas, null]);\r\n });\r\n\r\n this._resizeLoadingUI();\r\n\r\n this._resizeObserver = this._engine.onResizeObservable.add(() => {\r\n this._resizeLoadingUI();\r\n });\r\n\r\n this._loadingDivToRenderingCanvasMap.forEach((_, loadingDiv) => {\r\n document.body.appendChild(loadingDiv);\r\n });\r\n }\r\n\r\n /**\r\n * Function called to hide the loading screen\r\n */\r\n public hideLoadingUI(): void {\r\n if (!this._isLoading) {\r\n return;\r\n }\r\n\r\n let completedTransitions = 0;\r\n\r\n const onTransitionEnd = (event: TransitionEvent) => {\r\n const loadingDiv = event.target as HTMLDivElement;\r\n // ensure that ending transition event is generated by one of the current loadingDivs\r\n const isTransitionEndOnLoadingDiv = this._loadingDivToRenderingCanvasMap.has(loadingDiv);\r\n\r\n if (isTransitionEndOnLoadingDiv) {\r\n completedTransitions++;\r\n loadingDiv.remove();\r\n\r\n const allTransitionsCompleted = completedTransitions === this._loadingDivToRenderingCanvasMap.size;\r\n if (allTransitionsCompleted) {\r\n if (this._loadingTextDiv) {\r\n this._loadingTextDiv.remove();\r\n this._loadingTextDiv = null;\r\n }\r\n if (this._style) {\r\n this._style.remove();\r\n this._style = null;\r\n }\r\n\r\n window.removeEventListener(\"transitionend\", onTransitionEnd);\r\n this._engine!.onResizeObservable.remove(this._resizeObserver);\r\n this._loadingDivToRenderingCanvasMap.clear();\r\n this._engine = null;\r\n this._isLoading = false;\r\n }\r\n }\r\n };\r\n\r\n this._loadingDivToRenderingCanvasMap.forEach((_, loadingDiv) => {\r\n loadingDiv.style.opacity = \"0\";\r\n });\r\n\r\n window.addEventListener(\"transitionend\", onTransitionEnd);\r\n }\r\n\r\n /**\r\n * Gets or sets the text to display while loading\r\n */\r\n public set loadingUIText(text: string) {\r\n this._loadingText = text;\r\n\r\n if (this._loadingTextDiv) {\r\n this._loadingDivToRenderingCanvasMap.forEach((_, loadingDiv) => {\r\n // set loadingTextDiv of current loadingDiv\r\n loadingDiv.children[0].innerHTML = this._loadingText;\r\n });\r\n }\r\n }\r\n\r\n public get loadingUIText(): string {\r\n return this._loadingText;\r\n }\r\n\r\n /**\r\n * Gets or sets the color to use for the background\r\n */\r\n public get loadingUIBackgroundColor(): string {\r\n return this._loadingDivBackgroundColor;\r\n }\r\n\r\n public set loadingUIBackgroundColor(color: string) {\r\n this._loadingDivBackgroundColor = color;\r\n\r\n if (!this._isLoading) {\r\n return;\r\n }\r\n\r\n this._loadingDivToRenderingCanvasMap.forEach((_, loadingDiv) => {\r\n loadingDiv.style.backgroundColor = this._loadingDivBackgroundColor;\r\n });\r\n }\r\n\r\n /**\r\n * Checks if the layout of the canvas has changed by comparing the current layout\r\n * rectangle with the previous one.\r\n *\r\n * This function compares of the two `DOMRect` objects to determine if any of the layout dimensions have changed.\r\n * If the layout has changed or if there is no previous layout (i.e., `previousCanvasRect` is `null`),\r\n * it returns `true`. Otherwise, it returns `false`.\r\n *\r\n * @param previousCanvasRect defines the previously recorded `DOMRect` of the canvas, or `null` if no previous state exists.\r\n * @param currentCanvasRect defines the current `DOMRect` of the canvas to compare against the previous layout.\r\n * @returns `true` if the layout has changed, otherwise `false`.\r\n */\r\n private _isCanvasLayoutChanged(previousCanvasRect: DOMRect | null, currentCanvasRect: DOMRect) {\r\n return (\r\n !previousCanvasRect ||\r\n previousCanvasRect.left !== currentCanvasRect.left ||\r\n previousCanvasRect.top !== currentCanvasRect.top ||\r\n previousCanvasRect.right !== currentCanvasRect.right ||\r\n previousCanvasRect.bottom !== currentCanvasRect.bottom ||\r\n previousCanvasRect.width !== currentCanvasRect.width ||\r\n previousCanvasRect.height !== currentCanvasRect.height ||\r\n previousCanvasRect.x !== currentCanvasRect.x ||\r\n previousCanvasRect.y !== currentCanvasRect.y\r\n );\r\n }\r\n\r\n // Resize\r\n private _resizeLoadingUI = () => {\r\n if (!this._isLoading) {\r\n return;\r\n }\r\n\r\n this._loadingDivToRenderingCanvasMap.forEach(([canvas, previousCanvasRect], loadingDiv) => {\r\n const currentCanvasRect = canvas.getBoundingClientRect();\r\n if (this._isCanvasLayoutChanged(previousCanvasRect, currentCanvasRect)) {\r\n const canvasPositioning = window.getComputedStyle(canvas).position;\r\n\r\n loadingDiv.style.position = canvasPositioning === \"fixed\" ? \"fixed\" : \"absolute\";\r\n loadingDiv.style.left = currentCanvasRect.left + window.scrollX + \"px\";\r\n loadingDiv.style.top = currentCanvasRect.top + window.scrollY + \"px\";\r\n loadingDiv.style.width = currentCanvasRect.width + \"px\";\r\n loadingDiv.style.height = currentCanvasRect.height + \"px\";\r\n\r\n this._loadingDivToRenderingCanvasMap.set(loadingDiv, [canvas, currentCanvasRect]);\r\n }\r\n });\r\n };\r\n}\r\n\r\nAbstractEngine.DefaultLoadingScreenFactory = (canvas: HTMLCanvasElement) => {\r\n return new DefaultLoadingScreen(canvas);\r\n};\r\n"]}
1
+ {"version":3,"file":"loadingScreen.js","sourceRoot":"","sources":["../../../../dev/core/src/Loading/loadingScreen.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport { AbstractEngine } from \"../Engines/abstractEngine\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport type { Observer } from \"../Misc/observable\";\r\n/**\r\n * Interface used to present a loading screen while loading a scene\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/scene/customLoadingScreen\r\n */\r\nexport interface ILoadingScreen {\r\n /**\r\n * Function called to display the loading screen\r\n */\r\n displayLoadingUI: () => void;\r\n /**\r\n * Function called to hide the loading screen\r\n */\r\n hideLoadingUI: () => void;\r\n /**\r\n * Gets or sets the color to use for the background\r\n */\r\n loadingUIBackgroundColor: string;\r\n /**\r\n * Gets or sets the text to display while loading\r\n */\r\n loadingUIText: string;\r\n}\r\n\r\n/**\r\n * Class used for the default loading screen\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/scene/customLoadingScreen\r\n */\r\nexport class DefaultLoadingScreen implements ILoadingScreen {\r\n private _engine: Nullable<AbstractEngine>;\r\n private _resizeObserver: Nullable<Observer<AbstractEngine>>;\r\n private _isLoading: boolean;\r\n /**\r\n * Maps a loading `HTMLDivElement` to a tuple containing the associated `HTMLCanvasElement`\r\n * and its `DOMRect` (or `null` if not yet available).\r\n */\r\n private _loadingDivToRenderingCanvasMap: Map<HTMLDivElement, [HTMLCanvasElement, DOMRect | null]> = new Map();\r\n private _loadingTextDiv: Nullable<HTMLDivElement>;\r\n private _style: Nullable<HTMLStyleElement>;\r\n\r\n /** Gets or sets the logo url to use for the default loading screen */\r\n public static DefaultLogoUrl = \"\";\r\n\r\n /** Gets or sets the spinner url to use for the default loading screen */\r\n public static DefaultSpinnerUrl = \"\";\r\n\r\n /**\r\n * Creates a new default loading screen\r\n * @param _renderingCanvas defines the canvas used to render the scene\r\n * @param _loadingText defines the default text to display\r\n * @param _loadingDivBackgroundColor defines the default background color\r\n */\r\n constructor(\r\n private _renderingCanvas: HTMLCanvasElement,\r\n private _loadingText = \"\",\r\n private _loadingDivBackgroundColor = \"black\"\r\n ) {}\r\n\r\n /**\r\n * Function called to display the loading screen\r\n */\r\n public displayLoadingUI(): void {\r\n if (this._isLoading) {\r\n // Do not add a loading screen if it is already loading\r\n return;\r\n }\r\n\r\n this._isLoading = true;\r\n // get current engine by rendering canvas\r\n this._engine = EngineStore.Instances.find((engine) => engine.getRenderingCanvas() === this._renderingCanvas) as AbstractEngine;\r\n\r\n const loadingDiv = document.createElement(\"div\");\r\n\r\n loadingDiv.id = \"babylonjsLoadingDiv\";\r\n loadingDiv.style.opacity = \"0\";\r\n loadingDiv.style.transition = \"opacity 1.5s ease\";\r\n loadingDiv.style.pointerEvents = \"none\";\r\n loadingDiv.style.display = \"grid\";\r\n loadingDiv.style.gridTemplateRows = \"100%\";\r\n loadingDiv.style.gridTemplateColumns = \"100%\";\r\n loadingDiv.style.justifyItems = \"center\";\r\n loadingDiv.style.alignItems = \"center\";\r\n\r\n // Loading text\r\n this._loadingTextDiv = document.createElement(\"div\");\r\n this._loadingTextDiv.style.position = \"absolute\";\r\n this._loadingTextDiv.style.left = \"0\";\r\n this._loadingTextDiv.style.top = \"50%\";\r\n this._loadingTextDiv.style.marginTop = \"80px\";\r\n this._loadingTextDiv.style.width = \"100%\";\r\n this._loadingTextDiv.style.height = \"20px\";\r\n this._loadingTextDiv.style.fontFamily = \"Arial\";\r\n this._loadingTextDiv.style.fontSize = \"14px\";\r\n this._loadingTextDiv.style.color = \"white\";\r\n this._loadingTextDiv.style.textAlign = \"center\";\r\n this._loadingTextDiv.style.zIndex = \"1\";\r\n this._loadingTextDiv.innerHTML = \"Loading\";\r\n\r\n loadingDiv.appendChild(this._loadingTextDiv);\r\n\r\n //set the predefined text\r\n this._loadingTextDiv.innerHTML = this._loadingText;\r\n\r\n // Generating keyframes\r\n this._style = document.createElement(\"style\");\r\n this._style.type = \"text/css\";\r\n const keyFrames = `@-webkit-keyframes spin1 {\\\r\n 0% { -webkit-transform: rotate(0deg);}\r\n 100% { -webkit-transform: rotate(360deg);}\r\n }\\\r\n @keyframes spin1 {\\\r\n 0% { transform: rotate(0deg);}\r\n 100% { transform: rotate(360deg);}\r\n }`;\r\n this._style.innerHTML = keyFrames;\r\n document.getElementsByTagName(\"head\")[0].appendChild(this._style);\r\n\r\n const svgSupport = !!window.SVGSVGElement;\r\n // Loading img\r\n const imgBack = new Image();\r\n if (!DefaultLoadingScreen.DefaultLogoUrl) {\r\n imgBack.src = !svgSupport\r\n ? \"https://cdn.babylonjs.com/Assets/babylonLogo.png\"\r\n : `data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxODAuMTcgMjA4LjA0Ij48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6I2ZmZjt9LmNscy0ye2ZpbGw6I2UwNjg0Yjt9LmNscy0ze2ZpbGw6I2JiNDY0Yjt9LmNscy00e2ZpbGw6I2UwZGVkODt9LmNscy01e2ZpbGw6I2Q1ZDJjYTt9PC9zdHlsZT48L2RlZnM+PHRpdGxlPkJhYnlsb25Mb2dvPC90aXRsZT48ZyBpZD0iTGF5ZXJfMiIgZGF0YS1uYW1lPSJMYXllciAyIj48ZyBpZD0iUGFnZV9FbGVtZW50cyIgZGF0YS1uYW1lPSJQYWdlIEVsZW1lbnRzIj48cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik05MC4wOSwwLDAsNTJWMTU2bDkwLjA5LDUyLDkwLjA4LTUyVjUyWiIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtMiIgcG9pbnRzPSIxODAuMTcgNTIuMDEgMTUxLjk3IDM1LjczIDEyNC44NSA1MS4zOSAxNTMuMDUgNjcuNjcgMTgwLjE3IDUyLjAxIi8+PHBvbHlnb24gY2xhc3M9ImNscy0yIiBwb2ludHM9IjI3LjEyIDY3LjY3IDExNy4yMSAxNS42NiA5MC4wOCAwIDAgNTIuMDEgMjcuMTIgNjcuNjciLz48cG9seWdvbiBjbGFzcz0iY2xzLTIiIHBvaW50cz0iNjEuODkgMTIwLjMgOTAuMDggMTM2LjU4IDExOC4yOCAxMjAuMyA5MC4wOCAxMDQuMDIgNjEuODkgMTIwLjMiLz48cG9seWdvbiBjbGFzcz0iY2xzLTMiIHBvaW50cz0iMTUzLjA1IDY3LjY3IDE1My4wNSAxNDAuMzcgOTAuMDggMTc2LjcyIDI3LjEyIDE0MC4zNyAyNy4xMiA2Ny42NyAwIDUyLjAxIDAgMTU2LjAzIDkwLjA4IDIwOC4wNCAxODAuMTcgMTU2LjAzIDE4MC4xNyA1Mi4wMSAxNTMuMDUgNjcuNjciLz48cG9seWdvbiBjbGFzcz0iY2xzLTMiIHBvaW50cz0iOTAuMDggNzEuNDYgNjEuODkgODcuNzQgNjEuODkgMTIwLjMgOTAuMDggMTA0LjAyIDExOC4yOCAxMjAuMyAxMTguMjggODcuNzQgOTAuMDggNzEuNDYiLz48cG9seWdvbiBjbGFzcz0iY2xzLTQiIHBvaW50cz0iMTUzLjA1IDY3LjY3IDExOC4yOCA4Ny43NCAxMTguMjggMTIwLjMgOTAuMDggMTM2LjU4IDkwLjA4IDE3Ni43MiAxNTMuMDUgMTQwLjM3IDE1My4wNSA2Ny42NyIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtNSIgcG9pbnRzPSIyNy4xMiA2Ny42NyA2MS44OSA4Ny43NCA2MS44OSAxMjAuMyA5MC4wOCAxMzYuNTggOTAuMDggMTc2LjcyIDI3LjEyIDE0MC4zNyAyNy4xMiA2Ny42NyIvPjwvZz48L2c+PC9zdmc+`;\r\n } else {\r\n imgBack.src = DefaultLoadingScreen.DefaultLogoUrl;\r\n }\r\n\r\n imgBack.style.width = \"150px\";\r\n imgBack.style.gridColumn = \"1\";\r\n imgBack.style.gridRow = \"1\";\r\n imgBack.style.top = \"50%\";\r\n imgBack.style.left = \"50%\";\r\n imgBack.style.transform = \"translate(-50%, -50%)\";\r\n imgBack.style.position = \"absolute\";\r\n\r\n const imageSpinnerContainer = document.createElement(\"div\");\r\n imageSpinnerContainer.style.width = \"300px\";\r\n imageSpinnerContainer.style.gridColumn = \"1\";\r\n imageSpinnerContainer.style.gridRow = \"1\";\r\n imageSpinnerContainer.style.top = \"50%\";\r\n imageSpinnerContainer.style.left = \"50%\";\r\n imageSpinnerContainer.style.transform = \"translate(-50%, -50%)\";\r\n imageSpinnerContainer.style.position = \"absolute\";\r\n\r\n // Loading spinner\r\n const imgSpinner = new Image();\r\n\r\n if (!DefaultLoadingScreen.DefaultSpinnerUrl) {\r\n imgSpinner.src = !svgSupport\r\n ? \"https://cdn.babylonjs.com/Assets/loadingIcon.png\"\r\n : `data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzOTIgMzkyIj48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6I2UwNjg0Yjt9LmNscy0ye2ZpbGw6bm9uZTt9PC9zdHlsZT48L2RlZnM+PHRpdGxlPlNwaW5uZXJJY29uPC90aXRsZT48ZyBpZD0iTGF5ZXJfMiIgZGF0YS1uYW1lPSJMYXllciAyIj48ZyBpZD0iU3Bpbm5lciI+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNNDAuMjEsMTI2LjQzYzMuNy03LjMxLDcuNjctMTQuNDQsMTItMjEuMzJsMy4zNi01LjEsMy41Mi01YzEuMjMtMS42MywyLjQxLTMuMjksMy42NS00LjkxczIuNTMtMy4yMSwzLjgyLTQuNzlBMTg1LjIsMTg1LjIsMCwwLDEsODMuNCw2Ny40M2EyMDgsMjA4LDAsMCwxLDE5LTE1LjY2YzMuMzUtMi40MSw2Ljc0LTQuNzgsMTAuMjUtN3M3LjExLTQuMjgsMTAuNzUtNi4zMmM3LjI5LTQsMTQuNzMtOCwyMi41My0xMS40OSwzLjktMS43Miw3Ljg4LTMuMywxMi00LjY0YTEwNC4yMiwxMDQuMjIsMCwwLDEsMTIuNDQtMy4yMyw2Mi40NCw2Mi40NCwwLDAsMSwxMi43OC0xLjM5QTI1LjkyLDI1LjkyLDAsMCwxLDE5NiwyMS40NGE2LjU1LDYuNTUsMCwwLDEsMi4wNSw5LDYuNjYsNi42NiwwLDAsMS0xLjY0LDEuNzhsLS40MS4yOWEyMi4wNywyMi4wNywwLDAsMS01Ljc4LDMsMzAuNDIsMzAuNDIsMCwwLDEtNS42NywxLjYyLDM3LjgyLDM3LjgyLDAsMCwxLTUuNjkuNzFjLTEsMC0xLjkuMTgtMi44NS4yNmwtMi44NS4yNHEtNS43Mi41MS0xMS40OCwxLjFjLTMuODQuNC03LjcxLjgyLTExLjU4LDEuNGExMTIuMzQsMTEyLjM0LDAsMCwwLTIyLjk0LDUuNjFjLTMuNzIsMS4zNS03LjM0LDMtMTAuOTQsNC42NHMtNy4xNCwzLjUxLTEwLjYsNS41MUExNTEuNiwxNTEuNiwwLDAsMCw2OC41Niw4N0M2Ny4yMyw4OC40OCw2Niw5MCw2NC42NCw5MS41NnMtMi41MSwzLjE1LTMuNzUsNC43M2wtMy41NCw0LjljLTEuMTMsMS42Ni0yLjIzLDMuMzUtMy4zMyw1YTEyNywxMjcsMCwwLDAtMTAuOTMsMjEuNDksMS41OCwxLjU4LDAsMSwxLTMtMS4xNVM0MC4xOSwxMjYuNDcsNDAuMjEsMTI2LjQzWiIvPjxyZWN0IGNsYXNzPSJjbHMtMiIgd2lkdGg9IjM5MiIgaGVpZ2h0PSIzOTIiLz48L2c+PC9nPjwvc3ZnPg==`;\r\n } else {\r\n imgSpinner.src = DefaultLoadingScreen.DefaultSpinnerUrl;\r\n }\r\n\r\n imgSpinner.style.animation = \"spin1 0.75s infinite linear\";\r\n imgSpinner.style.transformOrigin = \"50% 50%\";\r\n\r\n if (!svgSupport) {\r\n const logoSize = { w: 16, h: 18.5 };\r\n const loadingSize = { w: 30, h: 30 };\r\n // set styling correctly\r\n imgBack.style.width = `${logoSize.w}vh`;\r\n imgBack.style.height = `${logoSize.h}vh`;\r\n imgBack.style.left = `calc(50% - ${logoSize.w / 2}vh)`;\r\n imgBack.style.top = `calc(50% - ${logoSize.h / 2}vh)`;\r\n\r\n imgSpinner.style.width = `${loadingSize.w}vh`;\r\n imgSpinner.style.height = `${loadingSize.h}vh`;\r\n imgSpinner.style.left = `calc(50% - ${loadingSize.w / 2}vh)`;\r\n imgSpinner.style.top = `calc(50% - ${loadingSize.h / 2}vh)`;\r\n }\r\n\r\n imageSpinnerContainer.appendChild(imgSpinner);\r\n\r\n loadingDiv.appendChild(imgBack);\r\n loadingDiv.appendChild(imageSpinnerContainer);\r\n loadingDiv.style.backgroundColor = this._loadingDivBackgroundColor;\r\n loadingDiv.style.opacity = \"1\";\r\n\r\n const canvases: Array<HTMLCanvasElement> = [];\r\n const views = this._engine.views;\r\n if (views?.length) {\r\n for (const view of views) {\r\n if (view.enabled) {\r\n canvases.push(view.target);\r\n }\r\n }\r\n } else {\r\n canvases.push(this._renderingCanvas);\r\n }\r\n for (let i = 0; i < canvases.length; i++) {\r\n const canvas = canvases[i];\r\n const clonedLoadingDiv = loadingDiv!.cloneNode(true) as HTMLDivElement;\r\n clonedLoadingDiv.id += `-${i}`;\r\n this._loadingDivToRenderingCanvasMap.set(clonedLoadingDiv, [canvas, null]);\r\n }\r\n\r\n this._resizeLoadingUI();\r\n\r\n this._resizeObserver = this._engine.onResizeObservable.add(() => {\r\n this._resizeLoadingUI();\r\n });\r\n\r\n this._loadingDivToRenderingCanvasMap.forEach((_, loadingDiv) => {\r\n document.body.appendChild(loadingDiv);\r\n });\r\n }\r\n\r\n /**\r\n * Function called to hide the loading screen\r\n */\r\n public hideLoadingUI(): void {\r\n if (!this._isLoading) {\r\n return;\r\n }\r\n\r\n let completedTransitions = 0;\r\n\r\n const onTransitionEnd = (event: TransitionEvent) => {\r\n const loadingDiv = event.target as HTMLDivElement;\r\n // ensure that ending transition event is generated by one of the current loadingDivs\r\n const isTransitionEndOnLoadingDiv = this._loadingDivToRenderingCanvasMap.has(loadingDiv);\r\n\r\n if (isTransitionEndOnLoadingDiv) {\r\n completedTransitions++;\r\n loadingDiv.remove();\r\n\r\n const allTransitionsCompleted = completedTransitions === this._loadingDivToRenderingCanvasMap.size;\r\n if (allTransitionsCompleted) {\r\n if (this._loadingTextDiv) {\r\n this._loadingTextDiv.remove();\r\n this._loadingTextDiv = null;\r\n }\r\n if (this._style) {\r\n this._style.remove();\r\n this._style = null;\r\n }\r\n\r\n window.removeEventListener(\"transitionend\", onTransitionEnd);\r\n this._engine!.onResizeObservable.remove(this._resizeObserver);\r\n this._loadingDivToRenderingCanvasMap.clear();\r\n this._engine = null;\r\n this._isLoading = false;\r\n }\r\n }\r\n };\r\n\r\n this._loadingDivToRenderingCanvasMap.forEach((_, loadingDiv) => {\r\n loadingDiv.style.opacity = \"0\";\r\n });\r\n\r\n window.addEventListener(\"transitionend\", onTransitionEnd);\r\n }\r\n\r\n /**\r\n * Gets or sets the text to display while loading\r\n */\r\n public set loadingUIText(text: string) {\r\n this._loadingText = text;\r\n\r\n if (this._loadingTextDiv) {\r\n this._loadingDivToRenderingCanvasMap.forEach((_, loadingDiv) => {\r\n // set loadingTextDiv of current loadingDiv\r\n loadingDiv.children[0].innerHTML = this._loadingText;\r\n });\r\n }\r\n }\r\n\r\n public get loadingUIText(): string {\r\n return this._loadingText;\r\n }\r\n\r\n /**\r\n * Gets or sets the color to use for the background\r\n */\r\n public get loadingUIBackgroundColor(): string {\r\n return this._loadingDivBackgroundColor;\r\n }\r\n\r\n public set loadingUIBackgroundColor(color: string) {\r\n this._loadingDivBackgroundColor = color;\r\n\r\n if (!this._isLoading) {\r\n return;\r\n }\r\n\r\n this._loadingDivToRenderingCanvasMap.forEach((_, loadingDiv) => {\r\n loadingDiv.style.backgroundColor = this._loadingDivBackgroundColor;\r\n });\r\n }\r\n\r\n /**\r\n * Checks if the layout of the canvas has changed by comparing the current layout\r\n * rectangle with the previous one.\r\n *\r\n * This function compares of the two `DOMRect` objects to determine if any of the layout dimensions have changed.\r\n * If the layout has changed or if there is no previous layout (i.e., `previousCanvasRect` is `null`),\r\n * it returns `true`. Otherwise, it returns `false`.\r\n *\r\n * @param previousCanvasRect defines the previously recorded `DOMRect` of the canvas, or `null` if no previous state exists.\r\n * @param currentCanvasRect defines the current `DOMRect` of the canvas to compare against the previous layout.\r\n * @returns `true` if the layout has changed, otherwise `false`.\r\n */\r\n private _isCanvasLayoutChanged(previousCanvasRect: DOMRect | null, currentCanvasRect: DOMRect) {\r\n return (\r\n !previousCanvasRect ||\r\n previousCanvasRect.left !== currentCanvasRect.left ||\r\n previousCanvasRect.top !== currentCanvasRect.top ||\r\n previousCanvasRect.right !== currentCanvasRect.right ||\r\n previousCanvasRect.bottom !== currentCanvasRect.bottom ||\r\n previousCanvasRect.width !== currentCanvasRect.width ||\r\n previousCanvasRect.height !== currentCanvasRect.height ||\r\n previousCanvasRect.x !== currentCanvasRect.x ||\r\n previousCanvasRect.y !== currentCanvasRect.y\r\n );\r\n }\r\n\r\n // Resize\r\n private _resizeLoadingUI = () => {\r\n if (!this._isLoading) {\r\n return;\r\n }\r\n\r\n this._loadingDivToRenderingCanvasMap.forEach(([canvas, previousCanvasRect], loadingDiv) => {\r\n const currentCanvasRect = canvas.getBoundingClientRect();\r\n if (this._isCanvasLayoutChanged(previousCanvasRect, currentCanvasRect)) {\r\n const canvasPositioning = window.getComputedStyle(canvas).position;\r\n\r\n loadingDiv.style.position = canvasPositioning === \"fixed\" ? \"fixed\" : \"absolute\";\r\n loadingDiv.style.left = currentCanvasRect.left + window.scrollX + \"px\";\r\n loadingDiv.style.top = currentCanvasRect.top + window.scrollY + \"px\";\r\n loadingDiv.style.width = currentCanvasRect.width + \"px\";\r\n loadingDiv.style.height = currentCanvasRect.height + \"px\";\r\n\r\n this._loadingDivToRenderingCanvasMap.set(loadingDiv, [canvas, currentCanvasRect]);\r\n }\r\n });\r\n };\r\n}\r\n\r\nAbstractEngine.DefaultLoadingScreenFactory = (canvas: HTMLCanvasElement) => {\r\n return new DefaultLoadingScreen(canvas);\r\n};\r\n"]}
@@ -304,13 +304,14 @@ export function RegisterSceneLoaderPlugin(plugin) {
304
304
  }
305
305
  else {
306
306
  const extensions = plugin.extensions;
307
- Object.keys(extensions).forEach((extension) => {
307
+ const keys = Object.keys(extensions);
308
+ for (const extension of keys) {
308
309
  registeredPlugins[extension.toLowerCase()] = {
309
310
  plugin: plugin,
310
311
  isBinary: extensions[extension].isBinary,
311
312
  mimeType: extensions[extension].mimeType,
312
313
  };
313
- });
314
+ }
314
315
  }
315
316
  }
316
317
  /**
@@ -725,33 +726,35 @@ async function importAnimationsImplAsync(rootUrl, sceneFilename = "", scene = En
725
726
  animatable.reset();
726
727
  }
727
728
  scene.stopAllAnimations();
728
- scene.animationGroups.slice().forEach((animationGroup) => {
729
+ const animationGroups = scene.animationGroups.slice();
730
+ for (const animationGroup of animationGroups) {
729
731
  animationGroup.dispose();
730
- });
732
+ }
731
733
  const nodes = scene.getNodes();
732
- nodes.forEach((node) => {
734
+ for (const node of nodes) {
733
735
  if (node.animations) {
734
736
  node.animations = [];
735
737
  }
736
- });
738
+ }
737
739
  }
738
740
  else {
739
741
  switch (animationGroupLoadingMode) {
740
742
  case 0 /* SceneLoaderAnimationGroupLoadingMode.Clean */:
741
- scene.animationGroups.slice().forEach((animationGroup) => {
743
+ const animationGroups = scene.animationGroups.slice();
744
+ for (const animationGroup of animationGroups) {
742
745
  animationGroup.dispose();
743
- });
746
+ }
744
747
  break;
745
748
  case 1 /* SceneLoaderAnimationGroupLoadingMode.Stop */:
746
- scene.animationGroups.forEach((animationGroup) => {
749
+ for (const animationGroup of scene.animationGroups) {
747
750
  animationGroup.stop();
748
- });
751
+ }
749
752
  break;
750
753
  case 2 /* SceneLoaderAnimationGroupLoadingMode.Sync */:
751
- scene.animationGroups.forEach((animationGroup) => {
754
+ for (const animationGroup of scene.animationGroups) {
752
755
  animationGroup.reset();
753
756
  animationGroup.restart();
754
- });
757
+ }
755
758
  break;
756
759
  case 3 /* SceneLoaderAnimationGroupLoadingMode.NoSync */:
757
760
  // nothing to do