@babylonjs/core 6.29.0 → 6.29.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Actions/abstractActionManager.js +1 -1
- package/Actions/abstractActionManager.js.map +1 -1
- package/Actions/actionManager.js +3 -3
- package/Actions/actionManager.js.map +1 -1
- package/Animations/animatable.js +1 -1
- package/Animations/animatable.js.map +1 -1
- package/Animations/animation.js +2 -2
- package/Animations/animation.js.map +1 -1
- package/Animations/pathCursor.js +1 -1
- package/Animations/pathCursor.js.map +1 -1
- package/Audio/audioSceneComponent.js +2 -2
- package/Audio/audioSceneComponent.js.map +1 -1
- package/Audio/soundTrack.js +1 -1
- package/Audio/soundTrack.js.map +1 -1
- package/Behaviors/Meshes/fadeInOutBehavior.js +1 -2
- package/Behaviors/Meshes/fadeInOutBehavior.js.map +1 -1
- package/Bones/bone.js +2 -2
- package/Bones/bone.js.map +1 -1
- package/Bones/skeleton.js +2 -2
- package/Bones/skeleton.js.map +1 -1
- package/Cameras/arcRotateCamera.js +13 -37
- package/Cameras/arcRotateCamera.js.map +1 -1
- package/Cameras/camera.d.ts +0 -21
- package/Cameras/camera.js +1 -36
- package/Cameras/camera.js.map +1 -1
- package/Cameras/targetCamera.js +30 -51
- package/Cameras/targetCamera.js.map +1 -1
- package/Culling/Octrees/octree.js +1 -1
- package/Culling/Octrees/octree.js.map +1 -1
- package/Culling/Octrees/octreeBlock.js +1 -1
- package/Culling/Octrees/octreeBlock.js.map +1 -1
- package/Culling/ray.js +1 -1
- package/Culling/ray.js.map +1 -1
- package/Debug/axesViewer.d.ts +3 -1
- package/Debug/axesViewer.js +14 -11
- package/Debug/axesViewer.js.map +1 -1
- package/Engines/Extensions/engine.multiRender.js +8 -8
- package/Engines/Extensions/engine.multiRender.js.map +1 -1
- package/Engines/Extensions/engine.textureSelector.js +1 -1
- package/Engines/Extensions/engine.textureSelector.js.map +1 -1
- package/Engines/Processors/shaderCodeInliner.js +1 -1
- package/Engines/Processors/shaderCodeInliner.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.computeShader.js +2 -10
- package/Engines/WebGPU/Extensions/engine.computeShader.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.debugging.js +3 -6
- package/Engines/WebGPU/Extensions/engine.debugging.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.dynamicTexture.js +1 -1
- package/Engines/WebGPU/Extensions/engine.dynamicTexture.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.multiRender.js +9 -14
- package/Engines/WebGPU/Extensions/engine.multiRender.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.query.js +2 -6
- package/Engines/WebGPU/Extensions/engine.query.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.renderTarget.js +6 -10
- package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.storageBuffer.js +1 -1
- package/Engines/WebGPU/Extensions/engine.storageBuffer.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.videoTexture.js +2 -2
- package/Engines/WebGPU/Extensions/engine.videoTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuBundleList.js +2 -1
- package/Engines/WebGPU/webgpuBundleList.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheBindGroups.js +1 -1
- package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.d.ts +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js +4 -7
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipelineTree.d.ts +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js +2 -2
- package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheSampler.d.ts +1 -1
- package/Engines/WebGPU/webgpuCacheSampler.js +5 -5
- package/Engines/WebGPU/webgpuCacheSampler.js.map +1 -1
- package/Engines/WebGPU/webgpuClearQuad.js +2 -2
- package/Engines/WebGPU/webgpuClearQuad.js.map +1 -1
- package/Engines/WebGPU/webgpuHardwareTexture.d.ts +0 -12
- package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuMaterialContext.d.ts +3 -3
- package/Engines/WebGPU/webgpuMaterialContext.js +14 -10
- package/Engines/WebGPU/webgpuMaterialContext.js.map +1 -1
- package/Engines/WebGPU/webgpuOcclusionQuery.js +1 -12
- package/Engines/WebGPU/webgpuOcclusionQuery.js.map +1 -1
- package/Engines/WebGPU/webgpuSnapshotRendering.d.ts +5 -8
- package/Engines/WebGPU/webgpuSnapshotRendering.js +24 -33
- package/Engines/WebGPU/webgpuSnapshotRendering.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureHelper.d.ts +2 -1
- package/Engines/WebGPU/webgpuTextureHelper.js +11 -16
- package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
- package/Engines/constants.d.ts +2 -2
- package/Engines/constants.js +2 -2
- package/Engines/constants.js.map +1 -1
- package/Engines/engine.js +2 -2
- package/Engines/engine.js.map +1 -1
- package/Engines/engineCapabilities.d.ts +2 -0
- package/Engines/engineCapabilities.js.map +1 -1
- package/Engines/engineStore.js +1 -1
- package/Engines/engineStore.js.map +1 -1
- package/Engines/nativeEngine.js +1 -0
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/nullEngine.js +1 -0
- package/Engines/nullEngine.js.map +1 -1
- package/Engines/thinEngine.js +6 -2
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.d.ts +27 -32
- package/Engines/webgpuEngine.js +237 -317
- package/Engines/webgpuEngine.js.map +1 -1
- package/Gizmos/boundingBoxGizmo.js +1 -1
- package/Gizmos/boundingBoxGizmo.js.map +1 -1
- package/Gizmos/cameraGizmo.d.ts +3 -1
- package/Gizmos/cameraGizmo.js +11 -8
- package/Gizmos/cameraGizmo.js.map +1 -1
- package/Layers/effectLayerSceneComponent.js +2 -2
- package/Layers/effectLayerSceneComponent.js.map +1 -1
- package/Layers/layerSceneComponent.js +1 -1
- package/Layers/layerSceneComponent.js.map +1 -1
- package/LensFlares/lensFlareSystem.js +1 -1
- package/LensFlares/lensFlareSystem.js.map +1 -1
- package/LensFlares/lensFlareSystemSceneComponent.js +2 -2
- package/LensFlares/lensFlareSystemSceneComponent.js.map +1 -1
- package/Lights/Shadows/shadowGenerator.js +1 -1
- package/Lights/Shadows/shadowGenerator.js.map +1 -1
- package/Lights/light.js +2 -2
- package/Lights/light.js.map +1 -1
- package/Loading/Plugins/babylonFileLoader.js +1 -1
- package/Loading/Plugins/babylonFileLoader.js.map +1 -1
- package/Loading/sceneLoader.js +3 -3
- package/Loading/sceneLoader.js.map +1 -1
- package/Materials/GreasedLine/greasedLineMaterialDefaults.d.ts +2 -2
- package/Materials/GreasedLine/greasedLineMaterialDefaults.js.map +1 -1
- package/Materials/GreasedLine/greasedLineSimpleMaterial.js +4 -1
- package/Materials/GreasedLine/greasedLineSimpleMaterial.js.map +1 -1
- package/Materials/Node/Blocks/Dual/lightBlock.js +1 -1
- package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +1 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
- package/Materials/Node/nodeMaterial.js +1 -1
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/Node/nodeMaterialBlockConnectionPoint.js +2 -2
- package/Materials/Node/nodeMaterialBlockConnectionPoint.js.map +1 -1
- package/Materials/Node/nodeMaterialBuildState.js +4 -4
- package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
- package/Materials/Node/nodeMaterialBuildStateSharedData.js +12 -12
- package/Materials/Node/nodeMaterialBuildStateSharedData.js.map +1 -1
- package/Materials/Textures/Procedurals/proceduralTextureSceneComponent.js +1 -1
- package/Materials/Textures/Procedurals/proceduralTextureSceneComponent.js.map +1 -1
- package/Materials/Textures/baseTexture.js +1 -1
- package/Materials/Textures/baseTexture.js.map +1 -1
- package/Materials/Textures/dynamicTexture.d.ts +4 -3
- package/Materials/Textures/dynamicTexture.js +10 -6
- package/Materials/Textures/dynamicTexture.js.map +1 -1
- package/Materials/Textures/externalTexture.d.ts +4 -0
- package/Materials/Textures/externalTexture.js +4 -0
- package/Materials/Textures/externalTexture.js.map +1 -1
- package/Materials/Textures/internalTexture.d.ts +0 -4
- package/Materials/Textures/internalTexture.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.js +1 -1
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Materials/Textures/textureSampler.d.ts +4 -0
- package/Materials/Textures/textureSampler.js.map +1 -1
- package/Materials/material.js +1 -1
- package/Materials/material.js.map +1 -1
- package/Materials/multiMaterial.js +1 -1
- package/Materials/multiMaterial.js.map +1 -1
- package/Materials/shaderMaterial.js +1 -1
- package/Materials/shaderMaterial.js.map +1 -1
- package/Maths/math.path.d.ts +9 -1
- package/Maths/math.path.js +23 -7
- package/Maths/math.path.js.map +1 -1
- package/Maths/math.vector.d.ts +93 -0
- package/Maths/math.vector.js +157 -26
- package/Maths/math.vector.js.map +1 -1
- package/Meshes/Builders/cylinderBuilder.js +5 -5
- package/Meshes/Builders/cylinderBuilder.js.map +1 -1
- package/Meshes/Builders/decalBuilder.js +1 -1
- package/Meshes/Builders/decalBuilder.js.map +1 -1
- package/Meshes/Builders/discBuilder.js +4 -4
- package/Meshes/Builders/discBuilder.js.map +1 -1
- package/Meshes/Builders/goldbergBuilder.js +4 -4
- package/Meshes/Builders/goldbergBuilder.js.map +1 -1
- package/Meshes/Builders/groundBuilder.js +4 -4
- package/Meshes/Builders/groundBuilder.js.map +1 -1
- package/Meshes/Builders/icoSphereBuilder.js +4 -4
- package/Meshes/Builders/icoSphereBuilder.js.map +1 -1
- package/Meshes/Builders/latheBuilder.js +1 -1
- package/Meshes/Builders/latheBuilder.js.map +1 -1
- package/Meshes/Builders/linesBuilder.js +2 -2
- package/Meshes/Builders/linesBuilder.js.map +1 -1
- package/Meshes/Builders/polyhedronBuilder.js +6 -6
- package/Meshes/Builders/polyhedronBuilder.js.map +1 -1
- package/Meshes/Builders/shapeBuilder.js +1 -1
- package/Meshes/Builders/shapeBuilder.js.map +1 -1
- package/Meshes/Builders/textBuilder.js +13 -5
- package/Meshes/Builders/textBuilder.js.map +1 -1
- package/Meshes/Builders/torusKnotBuilder.js +4 -4
- package/Meshes/Builders/torusKnotBuilder.js.map +1 -1
- package/Meshes/Node/Blocks/Instances/instantiateOnVerticesBlock.js +1 -1
- package/Meshes/Node/Blocks/Instances/instantiateOnVerticesBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Sources/boxBlock.js +1 -0
- package/Meshes/Node/Blocks/Sources/boxBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Sources/capsuleBlock.js +1 -0
- package/Meshes/Node/Blocks/Sources/capsuleBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Sources/cylinderBlock.js +1 -0
- package/Meshes/Node/Blocks/Sources/cylinderBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Sources/discBlock.js +1 -0
- package/Meshes/Node/Blocks/Sources/discBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Sources/gridBlock.js +1 -0
- package/Meshes/Node/Blocks/Sources/gridBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Sources/icoSphereBlock.js +1 -0
- package/Meshes/Node/Blocks/Sources/icoSphereBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Sources/planeBlock.js +1 -0
- package/Meshes/Node/Blocks/Sources/planeBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Sources/sphereBlock.js +1 -0
- package/Meshes/Node/Blocks/Sources/sphereBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Sources/torusBlock.js +1 -0
- package/Meshes/Node/Blocks/Sources/torusBlock.js.map +1 -1
- package/Meshes/Node/nodeGeometry.js +1 -1
- package/Meshes/Node/nodeGeometry.js.map +1 -1
- package/Meshes/Node/nodeGeometryBlock.js +1 -0
- package/Meshes/Node/nodeGeometryBlock.js.map +1 -1
- package/Meshes/Node/nodeGeometryBlockConnectionPoint.d.ts +14 -0
- package/Meshes/Node/nodeGeometryBlockConnectionPoint.js +32 -5
- package/Meshes/Node/nodeGeometryBlockConnectionPoint.js.map +1 -1
- package/Meshes/abstractMesh.js +5 -5
- package/Meshes/abstractMesh.js.map +1 -1
- package/Meshes/csg.js +5 -5
- package/Meshes/csg.js.map +1 -1
- package/Meshes/geodesicMesh.js +1 -1
- package/Meshes/geodesicMesh.js.map +1 -1
- package/Meshes/mesh.js +14 -10
- package/Meshes/mesh.js.map +1 -1
- package/Meshes/mesh.vertexData.js +1 -1
- package/Meshes/mesh.vertexData.js.map +1 -1
- package/Meshes/meshSimplification.js +2 -2
- package/Meshes/meshSimplification.js.map +1 -1
- package/Meshes/polygonMesh.js +7 -7
- package/Meshes/polygonMesh.js.map +1 -1
- package/Meshes/thinInstanceMesh.js +1 -1
- package/Meshes/thinInstanceMesh.js.map +1 -1
- package/Misc/codeStringParsingTools.d.ts +2 -1
- package/Misc/codeStringParsingTools.js +3 -2
- package/Misc/codeStringParsingTools.js.map +1 -1
- package/Misc/dds.js +1 -1
- package/Misc/dds.js.map +1 -1
- package/Misc/filesInput.js +1 -1
- package/Misc/filesInput.js.map +1 -1
- package/Misc/greasedLineTools.d.ts +2 -1
- package/Misc/greasedLineTools.js +2 -0
- package/Misc/greasedLineTools.js.map +1 -1
- package/Misc/precisionDate.js +4 -2
- package/Misc/precisionDate.js.map +1 -1
- package/Misc/sceneOptimizer.js +2 -2
- package/Misc/sceneOptimizer.js.map +1 -1
- package/Morph/morphTarget.js +1 -1
- package/Morph/morphTarget.js.map +1 -1
- package/Particles/gpuParticleSystem.js +1 -1
- package/Particles/gpuParticleSystem.js.map +1 -1
- package/Particles/particleSystem.js +2 -2
- package/Particles/particleSystem.js.map +1 -1
- package/Particles/particleSystemComponent.js +2 -2
- package/Particles/particleSystemComponent.js.map +1 -1
- package/Particles/particleSystemSet.js +1 -1
- package/Particles/particleSystemSet.js.map +1 -1
- package/Physics/v1/Plugins/cannonJSPlugin.js +2 -2
- package/Physics/v1/Plugins/cannonJSPlugin.js.map +1 -1
- package/Physics/v2/Plugins/havokPlugin.js +3 -1
- package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
- package/PostProcesses/postProcess.d.ts +1 -0
- package/PostProcesses/postProcess.js +30 -23
- package/PostProcesses/postProcess.js.map +1 -1
- package/PostProcesses/volumetricLightScatteringPostProcess.js +2 -2
- package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
- package/Probes/reflectionProbe.js +1 -1
- package/Probes/reflectionProbe.js.map +1 -1
- package/Rendering/edgesRenderer.js +3 -3
- package/Rendering/edgesRenderer.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingDepthTextureCopy.js +2 -1
- package/Rendering/fluidRenderer/fluidRenderingDepthTextureCopy.js.map +1 -1
- package/Rendering/prePassRenderer.js +8 -4
- package/Rendering/prePassRenderer.js.map +1 -1
- package/Shaders/ShadersInclude/hdrFilteringFunctions.js +2 -1
- package/Shaders/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
- package/Sprites/spriteManager.js +1 -1
- package/Sprites/spriteManager.js.map +1 -1
- package/Sprites/spriteMap.js +4 -4
- package/Sprites/spriteMap.js.map +1 -1
- package/Sprites/spriteSceneComponent.js +2 -2
- package/Sprites/spriteSceneComponent.js.map +1 -1
- package/XR/features/WebXRFeaturePointSystem.js +2 -2
- package/XR/features/WebXRFeaturePointSystem.js.map +1 -1
- package/abstractScene.js +16 -16
- package/abstractScene.js.map +1 -1
- package/assetContainer.js +2 -2
- package/assetContainer.js.map +1 -1
- package/node.js +2 -2
- package/node.js.map +1 -1
- package/package.json +1 -1
- package/scene.d.ts +0 -4
- package/scene.js +6 -12
- package/scene.js.map +1 -1
- package/Engines/WebGPU/webgpuRenderPassWrapper.d.ts +0 -13
- package/Engines/WebGPU/webgpuRenderPassWrapper.js +0 -18
- package/Engines/WebGPU/webgpuRenderPassWrapper.js.map +0 -1
package/Sprites/spriteMap.js
CHANGED
|
@@ -195,7 +195,7 @@ export class SpriteMap {
|
|
|
195
195
|
* @returns RawTexture of the frameMap
|
|
196
196
|
*/
|
|
197
197
|
_createFrameBuffer() {
|
|
198
|
-
const data =
|
|
198
|
+
const data = [];
|
|
199
199
|
//Do two Passes
|
|
200
200
|
for (let i = 0; i < this.spriteCount; i++) {
|
|
201
201
|
data.push(0, 0, 0, 0); //frame
|
|
@@ -236,7 +236,7 @@ export class SpriteMap {
|
|
|
236
236
|
* @returns RawTexture of the tileMap
|
|
237
237
|
*/
|
|
238
238
|
_createTileBuffer(buffer, _layer = 0) {
|
|
239
|
-
let data =
|
|
239
|
+
let data = [];
|
|
240
240
|
const _ty = this.options.stageSize.y || 0;
|
|
241
241
|
const _tx = this.options.stageSize.x || 0;
|
|
242
242
|
if (!buffer) {
|
|
@@ -268,7 +268,7 @@ export class SpriteMap {
|
|
|
268
268
|
if (buffer === null) {
|
|
269
269
|
return;
|
|
270
270
|
}
|
|
271
|
-
let p =
|
|
271
|
+
let p = [];
|
|
272
272
|
if (pos instanceof Vector2) {
|
|
273
273
|
p.push(pos);
|
|
274
274
|
}
|
|
@@ -294,7 +294,7 @@ export class SpriteMap {
|
|
|
294
294
|
* @returns RawTexture of the animationMap
|
|
295
295
|
*/
|
|
296
296
|
_createTileAnimationBuffer(buffer) {
|
|
297
|
-
const data =
|
|
297
|
+
const data = [];
|
|
298
298
|
let floatArray;
|
|
299
299
|
if (!buffer) {
|
|
300
300
|
for (let i = 0; i < this.spriteCount; i++) {
|
package/Sprites/spriteMap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spriteMap.js","sourceRoot":"","sources":["../../../../dev/core/src/Sprites/spriteMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAG3C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAI7D,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,+BAA+B,CAAC;AACvC,OAAO,6BAA6B,CAAC;AA6ErC;;GAEG;AACH,MAAM,OAAO,SAAS;IAgBlB,kDAAkD;IAClD,IAAW,WAAW;QAClB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC/B,CAAC;IAED,0CAA0C;IAC1C,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;IACjC,CAAC;IAED,0CAA0C;IAC1C,IAAW,QAAQ,CAAC,CAAU;QAC1B,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,0CAA0C;IAC1C,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;IACjC,CAAC;IAED,0CAA0C;IAC1C,IAAW,QAAQ,CAAC,CAAU;QAC1B,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,2BAA2B;IAC3B,IAAW,YAAY;QACnB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC;IAED,2BAA2B;IAC3B,IAAW,YAAY,CAAC,CAAa;QACjC,MAAM,MAAM,GAAG,CAAE,CAAC,QAAS,CAAC,WAAW,CAAC;QACxC,MAAM,EAAE,GAAG,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;QACnD,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,cAAc,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAClE,CAAC;IAuBD;;;;;;;OAOG;IACH,YAAY,IAAY,EAAE,SAA2B,EAAE,WAAoB,EAAE,OAA0B,EAAE,KAAY;QACjH,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAE/B;;WAEG;QACH,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3D,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,SAAS,CAAC;QAC7D,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QAClE,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QAClE,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC;QAC7C,OAAO,CAAC,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,IAAI,CAAC,CAAC;QAC7D,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC;QACzC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC;QACvC,OAAO,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAEtE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QAEpB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE3C,IAAI,CAAC,SAAS,GAAG,IAAI,KAAK,EAAE,CAAC;QAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE;YACzC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;SACxD;QAED,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;QAE3D,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;QAErD,IAAI,OAAO,CAAC,KAAK,EAAE;YACf,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;SACjC;QAED,OAAO,CAAC,IAAI,CAAC,gCAAgC,OAAO,CAAC,kBAAkB,IAAI,CAAC,CAAC;QAE7E,MAAM,YAAY,GAAW,MAAM,CAAC,YAAY,CAAC,sBAAsB,CAAC,CAAC;QAEzE,IAAI,iBAAyB,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,yBAAyB,EAAE;YACxD,iBAAiB,GAAG,EAAE,CAAC;YACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE;gBACzC,iBAAiB,IAAI,OAAO,CAAC,yCAAyC,CAAC,yCAAyC,CAAC;aACpH;SACJ;aAAM;YACH,iBAAiB,GAAG,aAAa,CAAC;YAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE;gBACzC,iBAAiB,IAAI,OAAO,GAAG,CAAC,GAAG,gCAAgC,GAAG,CAAC,GAAG,uCAAuC,CAAC;gBAClH,iBAAiB,IAAI,QAAQ,CAAC;aACjC;YACD,iBAAiB,IAAI,GAAG,CAAC;SAC5B;QAED,MAAM,CAAC,YAAY,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,yBAAyB,EAAE,iBAAiB,CAAC,CAAC;QAElI,IAAI,CAAC,SAAS,GAAG,IAAI,cAAc,CAC/B,YAAY,GAAG,IAAI,CAAC,IAAI,EACxB,IAAI,CAAC,MAAM,EACX;YACI,MAAM,EAAE,WAAW;YACnB,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAC,IAAI;SACpC,EACD;YACI,OAAO;YACP,UAAU,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC;YACxC,QAAQ,EAAE,CAAC,qBAAqB,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,CAAC;YAC7J,QAAQ,EAAE,CAAC,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,CAAC;YACjE,iBAAiB,EAAE,IAAI;SAC1B,CACJ,CAAC;QAEF,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QAEf,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACzD,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QAC1D,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,YAAY,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;QAC5D,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAC3D,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,eAAe,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;QAE7D,IAAI,QAAQ,GAAG,CAAC,CAAC;QAEjB,MAAM,iBAAiB,GAAG,GAAG,EAAE;YAC3B,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE;gBAChD,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;oBAC3B,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,eAAe,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,IAAI,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC;oBAC7I,OAAO;iBACV;aACJ;YACD,IAAI,QAAQ,GAAG,GAAG,EAAE;gBAChB,UAAU,CAAC,GAAG,EAAE;oBACZ,QAAQ,EAAE,CAAC;oBACX,iBAAiB,EAAE,CAAC;gBACxB,CAAC,EAAE,GAAG,CAAC,CAAC;aACX;QACL,CAAC,CAAC;QAEF,iBAAiB,EAAE,CAAC;QAEpB,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;QAC7D,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACtD,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3D,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,cAAc,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAC9D,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAE5C,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC,IAAI,GAAG,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;QAClF,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;QAC9C,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;QAC9C,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC;QACvC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC;QAEvC,MAAM,UAAU,GAAG,GAAG,EAAE;YACpB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,YAAY,EAAE,CAAC;YACrD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAChD,CAAC,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,wBAAwB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACrD,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;IAC3C,CAAC;IAED;;;OAGG;IACI,SAAS;QACZ,MAAM,CAAC,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAClC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtB,OAAO,CAAC,CAAC;IACb,CAAC;IAED;;;OAGG;IACI,gBAAgB;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;QACzB,MAAM,QAAQ,GAA0B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE;YAC1G,IAAI,IAAI,KAAK,GAAG,EAAE;gBACd,OAAO,KAAK,CAAC;aAChB;YACD,OAAO,IAAI,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,qBAAqB,EAAE;YAC/D,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;SAC9B;QAED,MAAM,MAAM,GAAG,QAAQ,CAAC,qBAAqB,EAAE,CAAC;QAChD,IAAI,MAAM,EAAE;YACR,OAAO,MAAM,CAAC;SACjB;QAED,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC;IAED;;;;;;;;;;;OAWG;IACK,kBAAkB;QACtB,MAAM,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;QACzB,eAAe;QACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE;YACvC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO;YAC9B,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,kBAAkB;YACzC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,8BAA8B;YACrD,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,0IAA0I;SACpK;QACD,aAAa;QACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE;YACvC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YACnC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC;YAChD,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;YACzC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7C,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAE7C,OAAO;YACP,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAClB,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACtB,kBAAkB;YAClB,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YAC3C,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YAC/C,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YAC/C,8BAA8B;YAC9B,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAC1C,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAC9C,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAC3C,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;SAC9C;QAED,MAAM,UAAU,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;QAE1C,MAAM,CAAC,GAAG,UAAU,CAAC,iBAAiB,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAEtJ,OAAO,CAAC,CAAC;IACb,CAAC;IAED;;;;;OAKG;IACK,iBAAiB,CAAC,MAAW,EAAE,SAAiB,CAAC;QACrD,IAAI,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,SAAU,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,SAAU,CAAC,CAAC,IAAI,CAAC,CAAC;QAE3C,IAAI,CAAC,MAAM,EAAE;YACT,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;YAC/B,IAAI,MAAM,IAAI,CAAC,EAAE;gBACb,EAAE,GAAG,CAAC,CAAC;aACV;YAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;gBAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;oBACjC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;iBAC1B;aACJ;SACJ;aAAM;YACH,IAAI,GAAG,MAAM,CAAC;SACjB;QAED,MAAM,UAAU,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,GAAG,UAAU,CAAC,iBAAiB,CAAC,UAAU,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAE3I,OAAO,CAAC,CAAC;IACb,CAAC;IAED;;;;;OAKG;IACI,WAAW,CAAC,SAAiB,CAAC,EAAE,GAAwB,EAAE,OAAe,CAAC;QAC7E,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAE,CAAC,QAAS,CAAC,WAAW,CAAC;QAC7D,IAAI,MAAM,KAAK,IAAI,EAAE;YACjB,OAAO;SACV;QAED,IAAI,CAAC,GAAG,IAAI,KAAK,EAAE,CAAC;QACpB,IAAI,GAAG,YAAY,OAAO,EAAE;YACxB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SACf;aAAM;YACH,CAAC,GAAG,GAAG,CAAC;SACX;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,SAAU,CAAC,CAAC,IAAI,CAAC,CAAC;QAE3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC/B,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAChB,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACxB,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACxB,MAAM,EAAE,GAAW,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YAC9C,MAAc,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;SAC9B;QAED,MAAM,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;QACjC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC9D,CAAC;IAED;;;;OAIG;IACK,0BAA0B,CAAC,MAAiC;QAChE,MAAM,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,UAAU,CAAC;QACf,IAAI,CAAC,MAAM,EAAE;YACT,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE;gBACvC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBACtB,IAAI,KAAK,GAAG,CAAC,CAAC;gBACd,OAAO,KAAK,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,IAAI,CAAC,CAAC,EAAE;oBACnD,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBACtB,KAAK,EAAE,CAAC;iBACX;aACJ;YACD,UAAU,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;SACvC;aAAM;YACH,UAAU,GAAG,MAAM,CAAC;SACvB;QAED,MAAM,CAAC,GAAG,UAAU,CAAC,iBAAiB,CAClC,UAAU,EACV,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,OAAO,CAAC,kBAAkB,IAAI,CAAC,EACpC,IAAI,CAAC,MAAM,EACX,KAAK,EACL,KAAK,EACL,OAAO,CAAC,eAAe,EACvB,MAAM,CAAC,iBAAiB,CAC3B,CAAC;QAEF,OAAO,CAAC,CAAC;IACb,CAAC;IAED;;;;;;;OAOG;IACI,kBAAkB,CAAC,SAAiB,CAAC,EAAE,SAAiB,CAAC,EAAE,SAAiB,CAAC,EAAE,OAAe,CAAC,EAAE,QAAgB,CAAC;QACrH,MAAM,MAAM,GAAQ,IAAI,CAAC,aAAc,CAAC,QAAS,CAAC,WAAW,CAAC;QAC9D,MAAM,EAAE,GAAW,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,GAAG,MAAM,CAAC;QAC9D,IAAI,CAAC,MAAM,EAAE;YACT,OAAO;SACV;QACD,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;QACpB,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;QACtB,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;QACvB,MAAM,CAAC,GAAG,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;QAClD,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,cAAc,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAClE,CAAC;IAED;;OAEG;IACI,YAAY;QACf,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC5C,IAAI,CAAC,GAAG,CAAC,EAAE;gBACP,IAAI,IAAI,MAAM,CAAC;aAClB;YAED,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,QAAS,CAAC,WAAY,CAAC,QAAQ,EAAE,CAAC;SAChE;QACD,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QAClD,aAAa,CAAC,IAAI,GAAG,kCAAkC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC1E,aAAa,CAAC,MAAM,GAAG,QAAQ,CAAC;QAChC,aAAa,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;QACjD,aAAa,CAAC,KAAK,EAAE,CAAC;QACtB,aAAa,CAAC,MAAM,EAAE,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACI,YAAY,CAAC,GAAW;QAC3B,MAAM,GAAG,GAAG,IAAI,cAAc,EAAE,CAAC;QACjC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAErB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAQ,CAAC,UAAU,IAAI,CAAC,CAAC;QAE1C,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE;YACd,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;gBAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBACzC,MAAM,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;gBACpC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;gBAC5B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;aACzB;YACD,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC9D,CAAC,CAAC;QACF,GAAG,CAAC,IAAI,EAAE,CAAC;IACf,CAAC;IAED;;OAEG;IACI,OAAO;QACV,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACvB,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QACzB,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;YAC1B,EAAE,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;CACJ","sourcesContent":["import { Engine } from \"../Engines/engine\";\r\nimport type { IDisposable, Scene } from \"../scene\";\r\nimport type { Nullable } from \"../types\";\r\nimport { Vector2, Vector3 } from \"../Maths/math.vector\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport { RawTexture } from \"../Materials/Textures/rawTexture\";\r\nimport { ShaderMaterial } from \"../Materials/shaderMaterial\";\r\nimport type { Mesh } from \"../Meshes/mesh\";\r\nimport type { PickingInfo } from \"../Collisions/pickingInfo\";\r\nimport type { ISpriteJSONSprite, ISpriteJSONAtlas } from \"./ISprites\";\r\nimport { Effect } from \"../Materials/effect\";\r\n\r\nimport { CreatePlane } from \"../Meshes/Builders/planeBuilder\";\r\nimport \"../Shaders/spriteMap.fragment\";\r\nimport \"../Shaders/spriteMap.vertex\";\r\n\r\n/**\r\n * Defines the basic options interface of a SpriteMap\r\n */\r\nexport interface ISpriteMapOptions {\r\n /**\r\n * Vector2 of the number of cells in the grid.\r\n */\r\n stageSize?: Vector2;\r\n\r\n /**\r\n * Vector2 of the size of the output plane in World Units.\r\n */\r\n outputSize?: Vector2;\r\n\r\n /**\r\n * Vector3 of the position of the output plane in World Units.\r\n */\r\n outputPosition?: Vector3;\r\n\r\n /**\r\n * Vector3 of the rotation of the output plane.\r\n */\r\n outputRotation?: Vector3;\r\n\r\n /**\r\n * number of layers that the system will reserve in resources.\r\n */\r\n layerCount?: number;\r\n\r\n /**\r\n * number of max animation frames a single cell will reserve in resources.\r\n */\r\n maxAnimationFrames?: number;\r\n\r\n /**\r\n * number cell index of the base tile when the system compiles.\r\n */\r\n baseTile?: number;\r\n\r\n /**\r\n * boolean flip the sprite after its been repositioned by the framing data.\r\n */\r\n flipU?: boolean;\r\n\r\n /**\r\n * Vector3 scalar of the global RGB values of the SpriteMap.\r\n */\r\n colorMultiply?: Vector3;\r\n}\r\n\r\n/**\r\n * Defines the IDisposable interface in order to be cleanable from resources.\r\n */\r\nexport interface ISpriteMap extends IDisposable {\r\n /**\r\n * String name of the SpriteMap.\r\n */\r\n name: string;\r\n\r\n /**\r\n * The JSON Array file from a https://www.codeandweb.com/texturepacker export. Or similar structure.\r\n */\r\n atlasJSON: ISpriteJSONAtlas;\r\n\r\n /**\r\n * Texture of the SpriteMap.\r\n */\r\n spriteSheet: Texture;\r\n\r\n /**\r\n * The parameters to initialize the SpriteMap with.\r\n */\r\n options: ISpriteMapOptions;\r\n}\r\n\r\n/**\r\n * Class used to manage a grid restricted sprite deployment on an Output plane.\r\n */\r\nexport class SpriteMap implements ISpriteMap {\r\n /** The Name of the spriteMap */\r\n public name: string;\r\n\r\n /** The JSON file with the frame and meta data */\r\n public atlasJSON: ISpriteJSONAtlas;\r\n\r\n /** The systems Sprite Sheet Texture */\r\n public spriteSheet: Texture;\r\n\r\n /** Arguments passed with the Constructor */\r\n public options: ISpriteMapOptions;\r\n\r\n /** Public Sprite Storage array, parsed from atlasJSON */\r\n public sprites: Array<ISpriteJSONSprite>;\r\n\r\n /** Returns the Number of Sprites in the System */\r\n public get spriteCount(): number {\r\n return this.sprites.length;\r\n }\r\n\r\n /** Returns the Position of Output Plane*/\r\n public get position(): Vector3 {\r\n return this._output.position;\r\n }\r\n\r\n /** Returns the Position of Output Plane*/\r\n public set position(v: Vector3) {\r\n this._output.position = v;\r\n }\r\n\r\n /** Returns the Rotation of Output Plane*/\r\n public get rotation(): Vector3 {\r\n return this._output.rotation;\r\n }\r\n\r\n /** Returns the Rotation of Output Plane*/\r\n public set rotation(v: Vector3) {\r\n this._output.rotation = v;\r\n }\r\n\r\n /** Sets the AnimationMap*/\r\n public get animationMap() {\r\n return this._animationMap;\r\n }\r\n\r\n /** Sets the AnimationMap*/\r\n public set animationMap(v: RawTexture) {\r\n const buffer = v!._texture!._bufferView;\r\n const am = this._createTileAnimationBuffer(buffer);\r\n this._animationMap.dispose();\r\n this._animationMap = am;\r\n this._material.setTexture(\"animationMap\", this._animationMap);\r\n }\r\n\r\n /** Scene that the SpriteMap was created in */\r\n private _scene: Scene;\r\n\r\n /** Texture Buffer of Float32 that holds tile frame data*/\r\n private _frameMap: RawTexture;\r\n\r\n /** Texture Buffers of Float32 that holds tileMap data*/\r\n private _tileMaps: RawTexture[];\r\n\r\n /** Texture Buffer of Float32 that holds Animation Data*/\r\n private _animationMap: RawTexture;\r\n\r\n /** Custom ShaderMaterial Central to the System*/\r\n private _material: ShaderMaterial;\r\n\r\n /** Custom ShaderMaterial Central to the System*/\r\n private _output: Mesh;\r\n\r\n /** Systems Time Ticker*/\r\n private _time: number;\r\n\r\n /**\r\n * Creates a new SpriteMap\r\n * @param name defines the SpriteMaps Name\r\n * @param atlasJSON is the JSON file that controls the Sprites Frames and Meta\r\n * @param spriteSheet is the Texture that the Sprites are on.\r\n * @param options a basic deployment configuration\r\n * @param scene The Scene that the map is deployed on\r\n */\r\n constructor(name: string, atlasJSON: ISpriteJSONAtlas, spriteSheet: Texture, options: ISpriteMapOptions, scene: Scene) {\r\n this.name = name;\r\n this.sprites = [];\r\n this.atlasJSON = atlasJSON;\r\n this.sprites = this.atlasJSON[\"frames\"];\r\n this.spriteSheet = spriteSheet;\r\n\r\n /**\r\n * Run through the options and set what ever defaults are needed that where not declared.\r\n */\r\n this.options = options;\r\n options.stageSize = options.stageSize || new Vector2(1, 1);\r\n options.outputSize = options.outputSize || options.stageSize;\r\n options.outputPosition = options.outputPosition || Vector3.Zero();\r\n options.outputRotation = options.outputRotation || Vector3.Zero();\r\n options.layerCount = options.layerCount || 1;\r\n options.maxAnimationFrames = options.maxAnimationFrames || 0;\r\n options.baseTile = options.baseTile || 0;\r\n options.flipU = options.flipU || false;\r\n options.colorMultiply = options.colorMultiply || new Vector3(1, 1, 1);\r\n\r\n this._scene = scene;\r\n\r\n this._frameMap = this._createFrameBuffer();\r\n\r\n this._tileMaps = new Array();\r\n for (let i = 0; i < options.layerCount; i++) {\r\n this._tileMaps.push(this._createTileBuffer(null, i));\r\n }\r\n\r\n this._animationMap = this._createTileAnimationBuffer(null);\r\n\r\n const defines = [];\r\n defines.push(\"#define LAYERS \" + options.layerCount);\r\n\r\n if (options.flipU) {\r\n defines.push(\"#define FLIPU\");\r\n }\r\n\r\n defines.push(`#define MAX_ANIMATION_FRAMES ${options.maxAnimationFrames}.0`);\r\n\r\n const shaderString: string = Effect.ShadersStore[\"spriteMapPixelShader\"];\r\n\r\n let layerSampleString: string;\r\n if (!scene.getEngine()._features.supportSwitchCaseInShader) {\r\n layerSampleString = \"\";\r\n for (let i = 0; i < options.layerCount; i++) {\r\n layerSampleString += `if (${i} == i) { frameID = texture2D(tileMaps[${i}], (tileID + 0.5) / stageSize, 0.).x; }`;\r\n }\r\n } else {\r\n layerSampleString = \"switch(i) {\";\r\n for (let i = 0; i < options.layerCount; i++) {\r\n layerSampleString += \"case \" + i + \" : frameID = texture(tileMaps[\" + i + \"], (tileID + 0.5) / stageSize, 0.).x;\";\r\n layerSampleString += \"break;\";\r\n }\r\n layerSampleString += \"}\";\r\n }\r\n\r\n Effect.ShadersStore[\"spriteMap\" + this.name + \"PixelShader\"] = shaderString.replace(\"#define LAYER_ID_SWITCH\", layerSampleString);\r\n\r\n this._material = new ShaderMaterial(\r\n \"spriteMap:\" + this.name,\r\n this._scene,\r\n {\r\n vertex: \"spriteMap\",\r\n fragment: \"spriteMap\" + this.name,\r\n },\r\n {\r\n defines,\r\n attributes: [\"position\", \"normal\", \"uv\"],\r\n uniforms: [\"worldViewProjection\", \"time\", \"stageSize\", \"outputSize\", \"spriteMapSize\", \"spriteCount\", \"time\", \"colorMul\", \"mousePosition\", \"curTile\", \"flipU\"],\r\n samplers: [\"spriteSheet\", \"frameMap\", \"tileMaps\", \"animationMap\"],\r\n needAlphaBlending: true,\r\n }\r\n );\r\n\r\n this._time = 0;\r\n\r\n this._material.setFloat(\"spriteCount\", this.spriteCount);\r\n this._material.setVector2(\"stageSize\", options.stageSize);\r\n this._material.setVector2(\"outputSize\", options.outputSize);\r\n this._material.setTexture(\"spriteSheet\", this.spriteSheet);\r\n this._material.setVector2(\"spriteMapSize\", new Vector2(1, 1));\r\n this._material.setVector3(\"colorMul\", options.colorMultiply);\r\n\r\n let tickSave = 0;\r\n\r\n const bindSpriteTexture = () => {\r\n if (this.spriteSheet && this.spriteSheet.isReady()) {\r\n if (this.spriteSheet._texture) {\r\n this._material.setVector2(\"spriteMapSize\", new Vector2(this.spriteSheet._texture.baseWidth || 1, this.spriteSheet._texture.baseHeight || 1));\r\n return;\r\n }\r\n }\r\n if (tickSave < 100) {\r\n setTimeout(() => {\r\n tickSave++;\r\n bindSpriteTexture();\r\n }, 100);\r\n }\r\n };\r\n\r\n bindSpriteTexture();\r\n\r\n this._material.setVector3(\"colorMul\", options.colorMultiply);\r\n this._material.setTexture(\"frameMap\", this._frameMap);\r\n this._material.setTextureArray(\"tileMaps\", this._tileMaps);\r\n this._material.setTexture(\"animationMap\", this._animationMap);\r\n this._material.setFloat(\"time\", this._time);\r\n\r\n this._output = CreatePlane(name + \":output\", { size: 1, updatable: true }, scene);\r\n this._output.scaling.x = options.outputSize.x;\r\n this._output.scaling.y = options.outputSize.y;\r\n this.position = options.outputPosition;\r\n this.rotation = options.outputRotation;\r\n\r\n const obfunction = () => {\r\n this._time += this._scene.getEngine().getDeltaTime();\r\n this._material.setFloat(\"time\", this._time);\r\n };\r\n\r\n this._scene.onBeforeRenderObservable.add(obfunction);\r\n this._output.material = this._material;\r\n }\r\n\r\n /**\r\n * Returns tileID location\r\n * @returns Vector2 the cell position ID\r\n */\r\n public getTileID(): Vector2 {\r\n const p = this.getMousePosition();\r\n p.multiplyInPlace(this.options.stageSize || Vector2.Zero());\r\n p.x = Math.floor(p.x);\r\n p.y = Math.floor(p.y);\r\n return p;\r\n }\r\n\r\n /**\r\n * Gets the UV location of the mouse over the SpriteMap.\r\n * @returns Vector2 the UV position of the mouse interaction\r\n */\r\n public getMousePosition(): Vector2 {\r\n const out = this._output;\r\n const pickinfo: Nullable<PickingInfo> = this._scene.pick(this._scene.pointerX, this._scene.pointerY, (mesh) => {\r\n if (mesh !== out) {\r\n return false;\r\n }\r\n return true;\r\n });\r\n\r\n if (!pickinfo || !pickinfo.hit || !pickinfo.getTextureCoordinates) {\r\n return new Vector2(-1, -1);\r\n }\r\n\r\n const coords = pickinfo.getTextureCoordinates();\r\n if (coords) {\r\n return coords;\r\n }\r\n\r\n return new Vector2(-1, -1);\r\n }\r\n\r\n /**\r\n * Creates the \"frame\" texture Buffer\r\n * -------------------------------------\r\n * Structure of frames\r\n * \"filename\": \"Falling-Water-2.png\",\r\n * \"frame\": {\"x\":69,\"y\":103,\"w\":24,\"h\":32},\r\n * \"rotated\": true,\r\n * \"trimmed\": true,\r\n * \"spriteSourceSize\": {\"x\":4,\"y\":0,\"w\":24,\"h\":32},\r\n * \"sourceSize\": {\"w\":32,\"h\":32}\r\n * @returns RawTexture of the frameMap\r\n */\r\n private _createFrameBuffer(): RawTexture {\r\n const data = new Array();\r\n //Do two Passes\r\n for (let i = 0; i < this.spriteCount; i++) {\r\n data.push(0, 0, 0, 0); //frame\r\n data.push(0, 0, 0, 0); //spriteSourceSize\r\n data.push(0, 0, 0, 0); //sourceSize, rotated, trimmed\r\n data.push(0, 0, 0, 0); //Keep it pow2 cause I\"m cool like that... it helps with sampling accuracy as well. Plus then we have 4 other parameters for future stuff.\r\n }\r\n //Second Pass\r\n for (let i = 0; i < this.spriteCount; i++) {\r\n const f = this.sprites[i][\"frame\"];\r\n const sss = this.sprites[i][\"spriteSourceSize\"];\r\n const ss = this.sprites[i][\"sourceSize\"];\r\n const r = this.sprites[i][\"rotated\"] ? 1 : 0;\r\n const t = this.sprites[i][\"trimmed\"] ? 1 : 0;\r\n\r\n //frame\r\n data[i * 4] = f.x;\r\n data[i * 4 + 1] = f.y;\r\n data[i * 4 + 2] = f.w;\r\n data[i * 4 + 3] = f.h;\r\n //spriteSourceSize\r\n data[i * 4 + this.spriteCount * 4] = sss.x;\r\n data[i * 4 + 1 + this.spriteCount * 4] = sss.y;\r\n data[i * 4 + 3 + this.spriteCount * 4] = sss.h;\r\n //sourceSize, rotated, trimmed\r\n data[i * 4 + this.spriteCount * 8] = ss.w;\r\n data[i * 4 + 1 + this.spriteCount * 8] = ss.h;\r\n data[i * 4 + 2 + this.spriteCount * 8] = r;\r\n data[i * 4 + 3 + this.spriteCount * 8] = t;\r\n }\r\n\r\n const floatArray = new Float32Array(data);\r\n\r\n const t = RawTexture.CreateRGBATexture(floatArray, this.spriteCount, 4, this._scene, false, false, Texture.NEAREST_NEAREST, Engine.TEXTURETYPE_FLOAT);\r\n\r\n return t;\r\n }\r\n\r\n /**\r\n * Creates the tileMap texture Buffer\r\n * @param buffer normally and array of numbers, or a false to generate from scratch\r\n * @param _layer indicates what layer for a logic trigger dealing with the baseTile. The system uses this\r\n * @returns RawTexture of the tileMap\r\n */\r\n private _createTileBuffer(buffer: any, _layer: number = 0): RawTexture {\r\n let data = new Array();\r\n const _ty = this.options.stageSize!.y || 0;\r\n const _tx = this.options.stageSize!.x || 0;\r\n\r\n if (!buffer) {\r\n let bt = this.options.baseTile;\r\n if (_layer != 0) {\r\n bt = 0;\r\n }\r\n\r\n for (let y = 0; y < _ty; y++) {\r\n for (let x = 0; x < _tx * 4; x += 4) {\r\n data.push(bt, 0, 0, 0);\r\n }\r\n }\r\n } else {\r\n data = buffer;\r\n }\r\n\r\n const floatArray = new Float32Array(data);\r\n const t = RawTexture.CreateRGBATexture(floatArray, _tx, _ty, this._scene, false, false, Texture.NEAREST_NEAREST, Engine.TEXTURETYPE_FLOAT);\r\n\r\n return t;\r\n }\r\n\r\n /**\r\n * Modifies the data of the tileMaps\r\n * @param _layer is the ID of the layer you want to edit on the SpriteMap\r\n * @param pos is the iVector2 Coordinates of the Tile\r\n * @param tile The SpriteIndex of the new Tile\r\n */\r\n public changeTiles(_layer: number = 0, pos: Vector2 | Vector2[], tile: number = 0): void {\r\n const buffer = this._tileMaps[_layer]!._texture!._bufferView;\r\n if (buffer === null) {\r\n return;\r\n }\r\n\r\n let p = new Array();\r\n if (pos instanceof Vector2) {\r\n p.push(pos);\r\n } else {\r\n p = pos;\r\n }\r\n\r\n const _tx = this.options.stageSize!.x || 0;\r\n\r\n for (let i = 0; i < p.length; i++) {\r\n const _p = p[i];\r\n _p.x = Math.floor(_p.x);\r\n _p.y = Math.floor(_p.y);\r\n const id: number = _p.x * 4 + _p.y * (_tx * 4);\r\n (buffer as any)[id] = tile;\r\n }\r\n\r\n const t = this._createTileBuffer(buffer);\r\n this._tileMaps[_layer].dispose();\r\n this._tileMaps[_layer] = t;\r\n this._material.setTextureArray(\"tileMap\", this._tileMaps);\r\n }\r\n\r\n /**\r\n * Creates the animationMap texture Buffer\r\n * @param buffer normally and array of numbers, or a false to generate from scratch\r\n * @returns RawTexture of the animationMap\r\n */\r\n private _createTileAnimationBuffer(buffer: Nullable<ArrayBufferView>): RawTexture {\r\n const data = new Array();\r\n let floatArray;\r\n if (!buffer) {\r\n for (let i = 0; i < this.spriteCount; i++) {\r\n data.push(0, 0, 0, 0);\r\n let count = 1;\r\n while (count < (this.options.maxAnimationFrames || 4)) {\r\n data.push(0, 0, 0, 0);\r\n count++;\r\n }\r\n }\r\n floatArray = new Float32Array(data);\r\n } else {\r\n floatArray = buffer;\r\n }\r\n\r\n const t = RawTexture.CreateRGBATexture(\r\n floatArray,\r\n this.spriteCount,\r\n this.options.maxAnimationFrames || 4,\r\n this._scene,\r\n false,\r\n false,\r\n Texture.NEAREST_NEAREST,\r\n Engine.TEXTURETYPE_FLOAT\r\n );\r\n\r\n return t;\r\n }\r\n\r\n /**\r\n * Modifies the data of the animationMap\r\n * @param cellID is the Index of the Sprite\r\n * @param _frame is the target Animation frame\r\n * @param toCell is the Target Index of the next frame of the animation\r\n * @param time is a value between 0-1 that is the trigger for when the frame should change tiles\r\n * @param speed is a global scalar of the time variable on the map.\r\n */\r\n public addAnimationToTile(cellID: number = 0, _frame: number = 0, toCell: number = 0, time: number = 0, speed: number = 1): void {\r\n const buffer: any = this._animationMap!._texture!._bufferView;\r\n const id: number = cellID * 4 + this.spriteCount * 4 * _frame;\r\n if (!buffer) {\r\n return;\r\n }\r\n buffer[id] = toCell;\r\n buffer[id + 1] = time;\r\n buffer[id + 2] = speed;\r\n const t = this._createTileAnimationBuffer(buffer);\r\n this._animationMap.dispose();\r\n this._animationMap = t;\r\n this._material.setTexture(\"animationMap\", this._animationMap);\r\n }\r\n\r\n /**\r\n * Exports the .tilemaps file\r\n */\r\n public saveTileMaps(): void {\r\n let maps = \"\";\r\n for (let i = 0; i < this._tileMaps.length; i++) {\r\n if (i > 0) {\r\n maps += \"\\n\\r\";\r\n }\r\n\r\n maps += this._tileMaps[i]!._texture!._bufferView!.toString();\r\n }\r\n const hiddenElement = document.createElement(\"a\");\r\n hiddenElement.href = \"data:octet/stream;charset=utf-8,\" + encodeURI(maps);\r\n hiddenElement.target = \"_blank\";\r\n hiddenElement.download = this.name + \".tilemaps\";\r\n hiddenElement.click();\r\n hiddenElement.remove();\r\n }\r\n\r\n /**\r\n * Imports the .tilemaps file\r\n * @param url of the .tilemaps file\r\n */\r\n public loadTileMaps(url: string): void {\r\n const xhr = new XMLHttpRequest();\r\n xhr.open(\"GET\", url);\r\n\r\n const _lc = this.options!.layerCount || 0;\r\n\r\n xhr.onload = () => {\r\n const data = xhr.response.split(\"\\n\\r\");\r\n for (let i = 0; i < _lc; i++) {\r\n const d = data[i].split(\",\").map(Number);\r\n const t = this._createTileBuffer(d);\r\n this._tileMaps[i].dispose();\r\n this._tileMaps[i] = t;\r\n }\r\n this._material.setTextureArray(\"tileMap\", this._tileMaps);\r\n };\r\n xhr.send();\r\n }\r\n\r\n /**\r\n * Release associated resources\r\n */\r\n public dispose(): void {\r\n this._output.dispose();\r\n this._material.dispose();\r\n this._animationMap.dispose();\r\n this._tileMaps.forEach((tm) => {\r\n tm.dispose();\r\n });\r\n this._frameMap.dispose();\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"spriteMap.js","sourceRoot":"","sources":["../../../../dev/core/src/Sprites/spriteMap.ts"],"names":[],"mappings":"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","sourcesContent":["import { Engine } from \"../Engines/engine\";\r\nimport type { IDisposable, Scene } from \"../scene\";\r\nimport type { Nullable } from \"../types\";\r\nimport { Vector2, Vector3 } from \"../Maths/math.vector\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport { RawTexture } from \"../Materials/Textures/rawTexture\";\r\nimport { ShaderMaterial } from \"../Materials/shaderMaterial\";\r\nimport type { Mesh } from \"../Meshes/mesh\";\r\nimport type { PickingInfo } from \"../Collisions/pickingInfo\";\r\nimport type { ISpriteJSONSprite, ISpriteJSONAtlas } from \"./ISprites\";\r\nimport { Effect } from \"../Materials/effect\";\r\n\r\nimport { CreatePlane } from \"../Meshes/Builders/planeBuilder\";\r\nimport \"../Shaders/spriteMap.fragment\";\r\nimport \"../Shaders/spriteMap.vertex\";\r\n\r\n/**\r\n * Defines the basic options interface of a SpriteMap\r\n */\r\nexport interface ISpriteMapOptions {\r\n /**\r\n * Vector2 of the number of cells in the grid.\r\n */\r\n stageSize?: Vector2;\r\n\r\n /**\r\n * Vector2 of the size of the output plane in World Units.\r\n */\r\n outputSize?: Vector2;\r\n\r\n /**\r\n * Vector3 of the position of the output plane in World Units.\r\n */\r\n outputPosition?: Vector3;\r\n\r\n /**\r\n * Vector3 of the rotation of the output plane.\r\n */\r\n outputRotation?: Vector3;\r\n\r\n /**\r\n * number of layers that the system will reserve in resources.\r\n */\r\n layerCount?: number;\r\n\r\n /**\r\n * number of max animation frames a single cell will reserve in resources.\r\n */\r\n maxAnimationFrames?: number;\r\n\r\n /**\r\n * number cell index of the base tile when the system compiles.\r\n */\r\n baseTile?: number;\r\n\r\n /**\r\n * boolean flip the sprite after its been repositioned by the framing data.\r\n */\r\n flipU?: boolean;\r\n\r\n /**\r\n * Vector3 scalar of the global RGB values of the SpriteMap.\r\n */\r\n colorMultiply?: Vector3;\r\n}\r\n\r\n/**\r\n * Defines the IDisposable interface in order to be cleanable from resources.\r\n */\r\nexport interface ISpriteMap extends IDisposable {\r\n /**\r\n * String name of the SpriteMap.\r\n */\r\n name: string;\r\n\r\n /**\r\n * The JSON Array file from a https://www.codeandweb.com/texturepacker export. Or similar structure.\r\n */\r\n atlasJSON: ISpriteJSONAtlas;\r\n\r\n /**\r\n * Texture of the SpriteMap.\r\n */\r\n spriteSheet: Texture;\r\n\r\n /**\r\n * The parameters to initialize the SpriteMap with.\r\n */\r\n options: ISpriteMapOptions;\r\n}\r\n\r\n/**\r\n * Class used to manage a grid restricted sprite deployment on an Output plane.\r\n */\r\nexport class SpriteMap implements ISpriteMap {\r\n /** The Name of the spriteMap */\r\n public name: string;\r\n\r\n /** The JSON file with the frame and meta data */\r\n public atlasJSON: ISpriteJSONAtlas;\r\n\r\n /** The systems Sprite Sheet Texture */\r\n public spriteSheet: Texture;\r\n\r\n /** Arguments passed with the Constructor */\r\n public options: ISpriteMapOptions;\r\n\r\n /** Public Sprite Storage array, parsed from atlasJSON */\r\n public sprites: Array<ISpriteJSONSprite>;\r\n\r\n /** Returns the Number of Sprites in the System */\r\n public get spriteCount(): number {\r\n return this.sprites.length;\r\n }\r\n\r\n /** Returns the Position of Output Plane*/\r\n public get position(): Vector3 {\r\n return this._output.position;\r\n }\r\n\r\n /** Returns the Position of Output Plane*/\r\n public set position(v: Vector3) {\r\n this._output.position = v;\r\n }\r\n\r\n /** Returns the Rotation of Output Plane*/\r\n public get rotation(): Vector3 {\r\n return this._output.rotation;\r\n }\r\n\r\n /** Returns the Rotation of Output Plane*/\r\n public set rotation(v: Vector3) {\r\n this._output.rotation = v;\r\n }\r\n\r\n /** Sets the AnimationMap*/\r\n public get animationMap() {\r\n return this._animationMap;\r\n }\r\n\r\n /** Sets the AnimationMap*/\r\n public set animationMap(v: RawTexture) {\r\n const buffer = v!._texture!._bufferView;\r\n const am = this._createTileAnimationBuffer(buffer);\r\n this._animationMap.dispose();\r\n this._animationMap = am;\r\n this._material.setTexture(\"animationMap\", this._animationMap);\r\n }\r\n\r\n /** Scene that the SpriteMap was created in */\r\n private _scene: Scene;\r\n\r\n /** Texture Buffer of Float32 that holds tile frame data*/\r\n private _frameMap: RawTexture;\r\n\r\n /** Texture Buffers of Float32 that holds tileMap data*/\r\n private _tileMaps: RawTexture[];\r\n\r\n /** Texture Buffer of Float32 that holds Animation Data*/\r\n private _animationMap: RawTexture;\r\n\r\n /** Custom ShaderMaterial Central to the System*/\r\n private _material: ShaderMaterial;\r\n\r\n /** Custom ShaderMaterial Central to the System*/\r\n private _output: Mesh;\r\n\r\n /** Systems Time Ticker*/\r\n private _time: number;\r\n\r\n /**\r\n * Creates a new SpriteMap\r\n * @param name defines the SpriteMaps Name\r\n * @param atlasJSON is the JSON file that controls the Sprites Frames and Meta\r\n * @param spriteSheet is the Texture that the Sprites are on.\r\n * @param options a basic deployment configuration\r\n * @param scene The Scene that the map is deployed on\r\n */\r\n constructor(name: string, atlasJSON: ISpriteJSONAtlas, spriteSheet: Texture, options: ISpriteMapOptions, scene: Scene) {\r\n this.name = name;\r\n this.sprites = [];\r\n this.atlasJSON = atlasJSON;\r\n this.sprites = this.atlasJSON[\"frames\"];\r\n this.spriteSheet = spriteSheet;\r\n\r\n /**\r\n * Run through the options and set what ever defaults are needed that where not declared.\r\n */\r\n this.options = options;\r\n options.stageSize = options.stageSize || new Vector2(1, 1);\r\n options.outputSize = options.outputSize || options.stageSize;\r\n options.outputPosition = options.outputPosition || Vector3.Zero();\r\n options.outputRotation = options.outputRotation || Vector3.Zero();\r\n options.layerCount = options.layerCount || 1;\r\n options.maxAnimationFrames = options.maxAnimationFrames || 0;\r\n options.baseTile = options.baseTile || 0;\r\n options.flipU = options.flipU || false;\r\n options.colorMultiply = options.colorMultiply || new Vector3(1, 1, 1);\r\n\r\n this._scene = scene;\r\n\r\n this._frameMap = this._createFrameBuffer();\r\n\r\n this._tileMaps = new Array();\r\n for (let i = 0; i < options.layerCount; i++) {\r\n this._tileMaps.push(this._createTileBuffer(null, i));\r\n }\r\n\r\n this._animationMap = this._createTileAnimationBuffer(null);\r\n\r\n const defines = [];\r\n defines.push(\"#define LAYERS \" + options.layerCount);\r\n\r\n if (options.flipU) {\r\n defines.push(\"#define FLIPU\");\r\n }\r\n\r\n defines.push(`#define MAX_ANIMATION_FRAMES ${options.maxAnimationFrames}.0`);\r\n\r\n const shaderString: string = Effect.ShadersStore[\"spriteMapPixelShader\"];\r\n\r\n let layerSampleString: string;\r\n if (!scene.getEngine()._features.supportSwitchCaseInShader) {\r\n layerSampleString = \"\";\r\n for (let i = 0; i < options.layerCount; i++) {\r\n layerSampleString += `if (${i} == i) { frameID = texture2D(tileMaps[${i}], (tileID + 0.5) / stageSize, 0.).x; }`;\r\n }\r\n } else {\r\n layerSampleString = \"switch(i) {\";\r\n for (let i = 0; i < options.layerCount; i++) {\r\n layerSampleString += \"case \" + i + \" : frameID = texture(tileMaps[\" + i + \"], (tileID + 0.5) / stageSize, 0.).x;\";\r\n layerSampleString += \"break;\";\r\n }\r\n layerSampleString += \"}\";\r\n }\r\n\r\n Effect.ShadersStore[\"spriteMap\" + this.name + \"PixelShader\"] = shaderString.replace(\"#define LAYER_ID_SWITCH\", layerSampleString);\r\n\r\n this._material = new ShaderMaterial(\r\n \"spriteMap:\" + this.name,\r\n this._scene,\r\n {\r\n vertex: \"spriteMap\",\r\n fragment: \"spriteMap\" + this.name,\r\n },\r\n {\r\n defines,\r\n attributes: [\"position\", \"normal\", \"uv\"],\r\n uniforms: [\"worldViewProjection\", \"time\", \"stageSize\", \"outputSize\", \"spriteMapSize\", \"spriteCount\", \"time\", \"colorMul\", \"mousePosition\", \"curTile\", \"flipU\"],\r\n samplers: [\"spriteSheet\", \"frameMap\", \"tileMaps\", \"animationMap\"],\r\n needAlphaBlending: true,\r\n }\r\n );\r\n\r\n this._time = 0;\r\n\r\n this._material.setFloat(\"spriteCount\", this.spriteCount);\r\n this._material.setVector2(\"stageSize\", options.stageSize);\r\n this._material.setVector2(\"outputSize\", options.outputSize);\r\n this._material.setTexture(\"spriteSheet\", this.spriteSheet);\r\n this._material.setVector2(\"spriteMapSize\", new Vector2(1, 1));\r\n this._material.setVector3(\"colorMul\", options.colorMultiply);\r\n\r\n let tickSave = 0;\r\n\r\n const bindSpriteTexture = () => {\r\n if (this.spriteSheet && this.spriteSheet.isReady()) {\r\n if (this.spriteSheet._texture) {\r\n this._material.setVector2(\"spriteMapSize\", new Vector2(this.spriteSheet._texture.baseWidth || 1, this.spriteSheet._texture.baseHeight || 1));\r\n return;\r\n }\r\n }\r\n if (tickSave < 100) {\r\n setTimeout(() => {\r\n tickSave++;\r\n bindSpriteTexture();\r\n }, 100);\r\n }\r\n };\r\n\r\n bindSpriteTexture();\r\n\r\n this._material.setVector3(\"colorMul\", options.colorMultiply);\r\n this._material.setTexture(\"frameMap\", this._frameMap);\r\n this._material.setTextureArray(\"tileMaps\", this._tileMaps);\r\n this._material.setTexture(\"animationMap\", this._animationMap);\r\n this._material.setFloat(\"time\", this._time);\r\n\r\n this._output = CreatePlane(name + \":output\", { size: 1, updatable: true }, scene);\r\n this._output.scaling.x = options.outputSize.x;\r\n this._output.scaling.y = options.outputSize.y;\r\n this.position = options.outputPosition;\r\n this.rotation = options.outputRotation;\r\n\r\n const obfunction = () => {\r\n this._time += this._scene.getEngine().getDeltaTime();\r\n this._material.setFloat(\"time\", this._time);\r\n };\r\n\r\n this._scene.onBeforeRenderObservable.add(obfunction);\r\n this._output.material = this._material;\r\n }\r\n\r\n /**\r\n * Returns tileID location\r\n * @returns Vector2 the cell position ID\r\n */\r\n public getTileID(): Vector2 {\r\n const p = this.getMousePosition();\r\n p.multiplyInPlace(this.options.stageSize || Vector2.Zero());\r\n p.x = Math.floor(p.x);\r\n p.y = Math.floor(p.y);\r\n return p;\r\n }\r\n\r\n /**\r\n * Gets the UV location of the mouse over the SpriteMap.\r\n * @returns Vector2 the UV position of the mouse interaction\r\n */\r\n public getMousePosition(): Vector2 {\r\n const out = this._output;\r\n const pickinfo: Nullable<PickingInfo> = this._scene.pick(this._scene.pointerX, this._scene.pointerY, (mesh) => {\r\n if (mesh !== out) {\r\n return false;\r\n }\r\n return true;\r\n });\r\n\r\n if (!pickinfo || !pickinfo.hit || !pickinfo.getTextureCoordinates) {\r\n return new Vector2(-1, -1);\r\n }\r\n\r\n const coords = pickinfo.getTextureCoordinates();\r\n if (coords) {\r\n return coords;\r\n }\r\n\r\n return new Vector2(-1, -1);\r\n }\r\n\r\n /**\r\n * Creates the \"frame\" texture Buffer\r\n * -------------------------------------\r\n * Structure of frames\r\n * \"filename\": \"Falling-Water-2.png\",\r\n * \"frame\": {\"x\":69,\"y\":103,\"w\":24,\"h\":32},\r\n * \"rotated\": true,\r\n * \"trimmed\": true,\r\n * \"spriteSourceSize\": {\"x\":4,\"y\":0,\"w\":24,\"h\":32},\r\n * \"sourceSize\": {\"w\":32,\"h\":32}\r\n * @returns RawTexture of the frameMap\r\n */\r\n private _createFrameBuffer(): RawTexture {\r\n const data = [];\r\n //Do two Passes\r\n for (let i = 0; i < this.spriteCount; i++) {\r\n data.push(0, 0, 0, 0); //frame\r\n data.push(0, 0, 0, 0); //spriteSourceSize\r\n data.push(0, 0, 0, 0); //sourceSize, rotated, trimmed\r\n data.push(0, 0, 0, 0); //Keep it pow2 cause I\"m cool like that... it helps with sampling accuracy as well. Plus then we have 4 other parameters for future stuff.\r\n }\r\n //Second Pass\r\n for (let i = 0; i < this.spriteCount; i++) {\r\n const f = this.sprites[i][\"frame\"];\r\n const sss = this.sprites[i][\"spriteSourceSize\"];\r\n const ss = this.sprites[i][\"sourceSize\"];\r\n const r = this.sprites[i][\"rotated\"] ? 1 : 0;\r\n const t = this.sprites[i][\"trimmed\"] ? 1 : 0;\r\n\r\n //frame\r\n data[i * 4] = f.x;\r\n data[i * 4 + 1] = f.y;\r\n data[i * 4 + 2] = f.w;\r\n data[i * 4 + 3] = f.h;\r\n //spriteSourceSize\r\n data[i * 4 + this.spriteCount * 4] = sss.x;\r\n data[i * 4 + 1 + this.spriteCount * 4] = sss.y;\r\n data[i * 4 + 3 + this.spriteCount * 4] = sss.h;\r\n //sourceSize, rotated, trimmed\r\n data[i * 4 + this.spriteCount * 8] = ss.w;\r\n data[i * 4 + 1 + this.spriteCount * 8] = ss.h;\r\n data[i * 4 + 2 + this.spriteCount * 8] = r;\r\n data[i * 4 + 3 + this.spriteCount * 8] = t;\r\n }\r\n\r\n const floatArray = new Float32Array(data);\r\n\r\n const t = RawTexture.CreateRGBATexture(floatArray, this.spriteCount, 4, this._scene, false, false, Texture.NEAREST_NEAREST, Engine.TEXTURETYPE_FLOAT);\r\n\r\n return t;\r\n }\r\n\r\n /**\r\n * Creates the tileMap texture Buffer\r\n * @param buffer normally and array of numbers, or a false to generate from scratch\r\n * @param _layer indicates what layer for a logic trigger dealing with the baseTile. The system uses this\r\n * @returns RawTexture of the tileMap\r\n */\r\n private _createTileBuffer(buffer: any, _layer: number = 0): RawTexture {\r\n let data = [];\r\n const _ty = this.options.stageSize!.y || 0;\r\n const _tx = this.options.stageSize!.x || 0;\r\n\r\n if (!buffer) {\r\n let bt = this.options.baseTile;\r\n if (_layer != 0) {\r\n bt = 0;\r\n }\r\n\r\n for (let y = 0; y < _ty; y++) {\r\n for (let x = 0; x < _tx * 4; x += 4) {\r\n data.push(bt, 0, 0, 0);\r\n }\r\n }\r\n } else {\r\n data = buffer;\r\n }\r\n\r\n const floatArray = new Float32Array(data);\r\n const t = RawTexture.CreateRGBATexture(floatArray, _tx, _ty, this._scene, false, false, Texture.NEAREST_NEAREST, Engine.TEXTURETYPE_FLOAT);\r\n\r\n return t;\r\n }\r\n\r\n /**\r\n * Modifies the data of the tileMaps\r\n * @param _layer is the ID of the layer you want to edit on the SpriteMap\r\n * @param pos is the iVector2 Coordinates of the Tile\r\n * @param tile The SpriteIndex of the new Tile\r\n */\r\n public changeTiles(_layer: number = 0, pos: Vector2 | Vector2[], tile: number = 0): void {\r\n const buffer = this._tileMaps[_layer]!._texture!._bufferView;\r\n if (buffer === null) {\r\n return;\r\n }\r\n\r\n let p = [];\r\n if (pos instanceof Vector2) {\r\n p.push(pos);\r\n } else {\r\n p = pos;\r\n }\r\n\r\n const _tx = this.options.stageSize!.x || 0;\r\n\r\n for (let i = 0; i < p.length; i++) {\r\n const _p = p[i];\r\n _p.x = Math.floor(_p.x);\r\n _p.y = Math.floor(_p.y);\r\n const id: number = _p.x * 4 + _p.y * (_tx * 4);\r\n (buffer as any)[id] = tile;\r\n }\r\n\r\n const t = this._createTileBuffer(buffer);\r\n this._tileMaps[_layer].dispose();\r\n this._tileMaps[_layer] = t;\r\n this._material.setTextureArray(\"tileMap\", this._tileMaps);\r\n }\r\n\r\n /**\r\n * Creates the animationMap texture Buffer\r\n * @param buffer normally and array of numbers, or a false to generate from scratch\r\n * @returns RawTexture of the animationMap\r\n */\r\n private _createTileAnimationBuffer(buffer: Nullable<ArrayBufferView>): RawTexture {\r\n const data = [];\r\n let floatArray;\r\n if (!buffer) {\r\n for (let i = 0; i < this.spriteCount; i++) {\r\n data.push(0, 0, 0, 0);\r\n let count = 1;\r\n while (count < (this.options.maxAnimationFrames || 4)) {\r\n data.push(0, 0, 0, 0);\r\n count++;\r\n }\r\n }\r\n floatArray = new Float32Array(data);\r\n } else {\r\n floatArray = buffer;\r\n }\r\n\r\n const t = RawTexture.CreateRGBATexture(\r\n floatArray,\r\n this.spriteCount,\r\n this.options.maxAnimationFrames || 4,\r\n this._scene,\r\n false,\r\n false,\r\n Texture.NEAREST_NEAREST,\r\n Engine.TEXTURETYPE_FLOAT\r\n );\r\n\r\n return t;\r\n }\r\n\r\n /**\r\n * Modifies the data of the animationMap\r\n * @param cellID is the Index of the Sprite\r\n * @param _frame is the target Animation frame\r\n * @param toCell is the Target Index of the next frame of the animation\r\n * @param time is a value between 0-1 that is the trigger for when the frame should change tiles\r\n * @param speed is a global scalar of the time variable on the map.\r\n */\r\n public addAnimationToTile(cellID: number = 0, _frame: number = 0, toCell: number = 0, time: number = 0, speed: number = 1): void {\r\n const buffer: any = this._animationMap!._texture!._bufferView;\r\n const id: number = cellID * 4 + this.spriteCount * 4 * _frame;\r\n if (!buffer) {\r\n return;\r\n }\r\n buffer[id] = toCell;\r\n buffer[id + 1] = time;\r\n buffer[id + 2] = speed;\r\n const t = this._createTileAnimationBuffer(buffer);\r\n this._animationMap.dispose();\r\n this._animationMap = t;\r\n this._material.setTexture(\"animationMap\", this._animationMap);\r\n }\r\n\r\n /**\r\n * Exports the .tilemaps file\r\n */\r\n public saveTileMaps(): void {\r\n let maps = \"\";\r\n for (let i = 0; i < this._tileMaps.length; i++) {\r\n if (i > 0) {\r\n maps += \"\\n\\r\";\r\n }\r\n\r\n maps += this._tileMaps[i]!._texture!._bufferView!.toString();\r\n }\r\n const hiddenElement = document.createElement(\"a\");\r\n hiddenElement.href = \"data:octet/stream;charset=utf-8,\" + encodeURI(maps);\r\n hiddenElement.target = \"_blank\";\r\n hiddenElement.download = this.name + \".tilemaps\";\r\n hiddenElement.click();\r\n hiddenElement.remove();\r\n }\r\n\r\n /**\r\n * Imports the .tilemaps file\r\n * @param url of the .tilemaps file\r\n */\r\n public loadTileMaps(url: string): void {\r\n const xhr = new XMLHttpRequest();\r\n xhr.open(\"GET\", url);\r\n\r\n const _lc = this.options!.layerCount || 0;\r\n\r\n xhr.onload = () => {\r\n const data = xhr.response.split(\"\\n\\r\");\r\n for (let i = 0; i < _lc; i++) {\r\n const d = data[i].split(\",\").map(Number);\r\n const t = this._createTileBuffer(d);\r\n this._tileMaps[i].dispose();\r\n this._tileMaps[i] = t;\r\n }\r\n this._material.setTextureArray(\"tileMap\", this._tileMaps);\r\n };\r\n xhr.send();\r\n }\r\n\r\n /**\r\n * Release associated resources\r\n */\r\n public dispose(): void {\r\n this._output.dispose();\r\n this._material.dispose();\r\n this._animationMap.dispose();\r\n this._tileMaps.forEach((tm) => {\r\n tm.dispose();\r\n });\r\n this._frameMap.dispose();\r\n }\r\n}\r\n"]}
|
|
@@ -41,7 +41,7 @@ Scene.prototype._internalMultiPickSprites = function (ray, predicate, camera) {
|
|
|
41
41
|
if (!PickingInfo) {
|
|
42
42
|
return null;
|
|
43
43
|
}
|
|
44
|
-
let pickingInfos =
|
|
44
|
+
let pickingInfos = [];
|
|
45
45
|
if (!camera) {
|
|
46
46
|
if (!this.activeCamera) {
|
|
47
47
|
return null;
|
|
@@ -137,7 +137,7 @@ export class SpriteSceneComponent {
|
|
|
137
137
|
*/
|
|
138
138
|
this.name = SceneComponentConstants.NAME_SPRITE;
|
|
139
139
|
this.scene = scene;
|
|
140
|
-
this.scene.spriteManagers =
|
|
140
|
+
this.scene.spriteManagers = [];
|
|
141
141
|
this.scene._tempSpritePickingRay = Ray ? Ray.Zero() : null;
|
|
142
142
|
this.scene.onBeforeSpritesRenderingObservable = new Observable();
|
|
143
143
|
this.scene.onAfterSpritesRenderingObservable = new Observable();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spriteSceneComponent.js","sourceRoot":"","sources":["../../../../dev/core/src/Sprites/spriteSceneComponent.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport { Scene } from \"../scene\";\r\nimport type { Sprite } from \"./sprite\";\r\nimport type { ISpriteManager } from \"./spriteManager\";\r\nimport { Ray } from \"../Culling/ray\";\r\nimport type { Camera } from \"../Cameras/camera\";\r\nimport { PickingInfo } from \"../Collisions/pickingInfo\";\r\nimport type { ISceneComponent } from \"../sceneComponent\";\r\nimport { SceneComponentConstants } from \"../sceneComponent\";\r\nimport { ActionEvent } from \"../Actions/actionEvent\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport type { IPointerEvent } from \"../Events/deviceInputEvents\";\r\n\r\ndeclare module \"../scene\" {\r\n export interface Scene {\r\n /** @internal */\r\n _pointerOverSprite: Nullable<Sprite>;\r\n\r\n /** @internal */\r\n _pickedDownSprite: Nullable<Sprite>;\r\n\r\n /** @internal */\r\n _tempSpritePickingRay: Nullable<Ray>;\r\n\r\n /**\r\n * All of the sprite managers added to this scene\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/sprites\r\n */\r\n spriteManagers?: Array<ISpriteManager>;\r\n\r\n /**\r\n * An event triggered when sprites rendering is about to start\r\n * Note: This event can be trigger more than once per frame (because sprites can be rendered by render target textures as well)\r\n */\r\n onBeforeSpritesRenderingObservable: Observable<Scene>;\r\n\r\n /**\r\n * An event triggered when sprites rendering is done\r\n * Note: This event can be trigger more than once per frame (because sprites can be rendered by render target textures as well)\r\n */\r\n onAfterSpritesRenderingObservable: Observable<Scene>;\r\n\r\n /** @internal */\r\n _internalPickSprites(ray: Ray, predicate?: (sprite: Sprite) => boolean, fastCheck?: boolean, camera?: Camera): Nullable<PickingInfo>;\r\n\r\n /** Launch a ray to try to pick a sprite in the scene\r\n * @param x position on screen\r\n * @param y position on screen\r\n * @param predicate Predicate function used to determine eligible sprites. Can be set to null. In this case, a sprite must have isPickable set to true\r\n * @param fastCheck defines if the first intersection will be used (and not the closest)\r\n * @param camera camera to use for computing the picking ray. Can be set to null. In this case, the scene.activeCamera will be used\r\n * @returns a PickingInfo\r\n */\r\n pickSprite(x: number, y: number, predicate?: (sprite: Sprite) => boolean, fastCheck?: boolean, camera?: Camera): Nullable<PickingInfo>;\r\n\r\n /** Use the given ray to pick a sprite in the scene\r\n * @param ray The ray (in world space) to use to pick meshes\r\n * @param predicate Predicate function used to determine eligible sprites. Can be set to null. In this case, a sprite must have isPickable set to true\r\n * @param fastCheck defines if the first intersection will be used (and not the closest)\r\n * @param camera camera to use. Can be set to null. In this case, the scene.activeCamera will be used\r\n * @returns a PickingInfo\r\n */\r\n pickSpriteWithRay(ray: Ray, predicate?: (sprite: Sprite) => boolean, fastCheck?: boolean, camera?: Camera): Nullable<PickingInfo>;\r\n\r\n /** @internal */\r\n _internalMultiPickSprites(ray: Ray, predicate?: (sprite: Sprite) => boolean, camera?: Camera): Nullable<PickingInfo[]>;\r\n\r\n /** Launch a ray to try to pick sprites in the scene\r\n * @param x position on screen\r\n * @param y position on screen\r\n * @param predicate Predicate function used to determine eligible sprites. Can be set to null. In this case, a sprite must have isPickable set to true\r\n * @param camera camera to use for computing the picking ray. Can be set to null. In this case, the scene.activeCamera will be used\r\n * @returns a PickingInfo array\r\n */\r\n multiPickSprite(x: number, y: number, predicate?: (sprite: Sprite) => boolean, camera?: Camera): Nullable<PickingInfo[]>;\r\n\r\n /** Use the given ray to pick sprites in the scene\r\n * @param ray The ray (in world space) to use to pick meshes\r\n * @param predicate Predicate function used to determine eligible sprites. Can be set to null. In this case, a sprite must have isPickable set to true\r\n * @param camera camera to use. Can be set to null. In this case, the scene.activeCamera will be used\r\n * @returns a PickingInfo array\r\n */\r\n multiPickSpriteWithRay(ray: Ray, predicate?: (sprite: Sprite) => boolean, camera?: Camera): Nullable<PickingInfo[]>;\r\n\r\n /**\r\n * Force the sprite under the pointer\r\n * @param sprite defines the sprite to use\r\n */\r\n setPointerOverSprite(sprite: Nullable<Sprite>): void;\r\n\r\n /**\r\n * Gets the sprite under the pointer\r\n * @returns a Sprite or null if no sprite is under the pointer\r\n */\r\n getPointerOverSprite(): Nullable<Sprite>;\r\n }\r\n}\r\n\r\nScene.prototype._internalPickSprites = function (ray: Ray, predicate?: (sprite: Sprite) => boolean, fastCheck?: boolean, camera?: Camera): Nullable<PickingInfo> {\r\n if (!PickingInfo) {\r\n return null;\r\n }\r\n\r\n let pickingInfo = null;\r\n\r\n if (!camera) {\r\n if (!this.activeCamera) {\r\n return null;\r\n }\r\n camera = this.activeCamera;\r\n }\r\n\r\n if (this.spriteManagers && this.spriteManagers.length > 0) {\r\n for (let spriteIndex = 0; spriteIndex < this.spriteManagers.length; spriteIndex++) {\r\n const spriteManager = this.spriteManagers[spriteIndex];\r\n\r\n if (!spriteManager.isPickable) {\r\n continue;\r\n }\r\n\r\n const result = spriteManager.intersects(ray, camera, predicate, fastCheck);\r\n if (!result || !result.hit) {\r\n continue;\r\n }\r\n\r\n if (!fastCheck && pickingInfo != null && result.distance >= pickingInfo.distance) {\r\n continue;\r\n }\r\n\r\n pickingInfo = result;\r\n\r\n if (fastCheck) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return pickingInfo || new PickingInfo();\r\n};\r\n\r\nScene.prototype._internalMultiPickSprites = function (ray: Ray, predicate?: (sprite: Sprite) => boolean, camera?: Camera): Nullable<PickingInfo[]> {\r\n if (!PickingInfo) {\r\n return null;\r\n }\r\n\r\n let pickingInfos = new Array<PickingInfo>();\r\n\r\n if (!camera) {\r\n if (!this.activeCamera) {\r\n return null;\r\n }\r\n camera = this.activeCamera;\r\n }\r\n\r\n if (this.spriteManagers && this.spriteManagers.length > 0) {\r\n for (let spriteIndex = 0; spriteIndex < this.spriteManagers.length; spriteIndex++) {\r\n const spriteManager = this.spriteManagers[spriteIndex];\r\n\r\n if (!spriteManager.isPickable) {\r\n continue;\r\n }\r\n\r\n const results = spriteManager.multiIntersects(ray, camera, predicate);\r\n\r\n if (results !== null) {\r\n pickingInfos = pickingInfos.concat(results);\r\n }\r\n }\r\n }\r\n\r\n return pickingInfos;\r\n};\r\n\r\nScene.prototype.pickSprite = function (x: number, y: number, predicate?: (sprite: Sprite) => boolean, fastCheck?: boolean, camera?: Camera): Nullable<PickingInfo> {\r\n if (!this._tempSpritePickingRay) {\r\n return null;\r\n }\r\n\r\n this.createPickingRayInCameraSpaceToRef(x, y, this._tempSpritePickingRay, camera);\r\n\r\n const result = this._internalPickSprites(this._tempSpritePickingRay, predicate, fastCheck, camera);\r\n if (result) {\r\n result.ray = this.createPickingRayInCameraSpace(x, y, camera);\r\n }\r\n\r\n return result;\r\n};\r\n\r\nScene.prototype.pickSpriteWithRay = function (ray: Ray, predicate?: (sprite: Sprite) => boolean, fastCheck?: boolean, camera?: Camera): Nullable<PickingInfo> {\r\n if (!this._tempSpritePickingRay) {\r\n return null;\r\n }\r\n\r\n if (!camera) {\r\n if (!this.activeCamera) {\r\n return null;\r\n }\r\n camera = this.activeCamera;\r\n }\r\n\r\n Ray.TransformToRef(ray, camera.getViewMatrix(), this._tempSpritePickingRay);\r\n\r\n const result = this._internalPickSprites(this._tempSpritePickingRay, predicate, fastCheck, camera);\r\n if (result) {\r\n result.ray = ray;\r\n }\r\n\r\n return result;\r\n};\r\n\r\nScene.prototype.multiPickSprite = function (x: number, y: number, predicate?: (sprite: Sprite) => boolean, camera?: Camera): Nullable<PickingInfo[]> {\r\n this.createPickingRayInCameraSpaceToRef(x, y, this._tempSpritePickingRay!, camera);\r\n\r\n return this._internalMultiPickSprites(this._tempSpritePickingRay!, predicate, camera);\r\n};\r\n\r\nScene.prototype.multiPickSpriteWithRay = function (ray: Ray, predicate?: (sprite: Sprite) => boolean, camera?: Camera): Nullable<PickingInfo[]> {\r\n if (!this._tempSpritePickingRay) {\r\n return null;\r\n }\r\n\r\n if (!camera) {\r\n if (!this.activeCamera) {\r\n return null;\r\n }\r\n camera = this.activeCamera;\r\n }\r\n\r\n Ray.TransformToRef(ray, camera.getViewMatrix(), this._tempSpritePickingRay);\r\n\r\n return this._internalMultiPickSprites(this._tempSpritePickingRay, predicate, camera);\r\n};\r\n\r\nScene.prototype.setPointerOverSprite = function (sprite: Nullable<Sprite>): void {\r\n if (this._pointerOverSprite === sprite) {\r\n return;\r\n }\r\n\r\n if (this._pointerOverSprite && this._pointerOverSprite.actionManager) {\r\n this._pointerOverSprite.actionManager.processTrigger(Constants.ACTION_OnPointerOutTrigger, ActionEvent.CreateNewFromSprite(this._pointerOverSprite, this));\r\n }\r\n\r\n this._pointerOverSprite = sprite;\r\n if (this._pointerOverSprite && this._pointerOverSprite.actionManager) {\r\n this._pointerOverSprite.actionManager.processTrigger(Constants.ACTION_OnPointerOverTrigger, ActionEvent.CreateNewFromSprite(this._pointerOverSprite, this));\r\n }\r\n};\r\n\r\nScene.prototype.getPointerOverSprite = function (): Nullable<Sprite> {\r\n return this._pointerOverSprite;\r\n};\r\n\r\n/**\r\n * Defines the sprite scene component responsible to manage sprites\r\n * in a given scene.\r\n */\r\nexport class SpriteSceneComponent implements ISceneComponent {\r\n /**\r\n * The component name helpfull to identify the component in the list of scene components.\r\n */\r\n public readonly name = SceneComponentConstants.NAME_SPRITE;\r\n\r\n /**\r\n * The scene the component belongs to.\r\n */\r\n public scene: Scene;\r\n\r\n /** @internal */\r\n private _spritePredicate: (sprite: Sprite) => boolean;\r\n\r\n /**\r\n * Creates a new instance of the component for the given scene\r\n * @param scene Defines the scene to register the component in\r\n */\r\n constructor(scene: Scene) {\r\n this.scene = scene;\r\n this.scene.spriteManagers = new Array<ISpriteManager>();\r\n this.scene._tempSpritePickingRay = Ray ? Ray.Zero() : null;\r\n this.scene.onBeforeSpritesRenderingObservable = new Observable<Scene>();\r\n this.scene.onAfterSpritesRenderingObservable = new Observable<Scene>();\r\n this._spritePredicate = (sprite: Sprite): boolean => {\r\n if (!sprite.actionManager) {\r\n return false;\r\n }\r\n return sprite.isPickable && sprite.actionManager.hasPointerTriggers;\r\n };\r\n }\r\n\r\n /**\r\n * Registers the component in a given scene\r\n */\r\n public register(): void {\r\n this.scene._pointerMoveStage.registerStep(SceneComponentConstants.STEP_POINTERMOVE_SPRITE, this, this._pointerMove);\r\n this.scene._pointerDownStage.registerStep(SceneComponentConstants.STEP_POINTERDOWN_SPRITE, this, this._pointerDown);\r\n this.scene._pointerUpStage.registerStep(SceneComponentConstants.STEP_POINTERUP_SPRITE, this, this._pointerUp);\r\n }\r\n\r\n /**\r\n * Rebuilds the elements related to this component in case of\r\n * context lost for instance.\r\n */\r\n public rebuild(): void {\r\n /** Nothing to do for sprites */\r\n }\r\n\r\n /**\r\n * Disposes the component and the associated resources.\r\n */\r\n public dispose(): void {\r\n this.scene.onBeforeSpritesRenderingObservable.clear();\r\n this.scene.onAfterSpritesRenderingObservable.clear();\r\n\r\n const spriteManagers = this.scene.spriteManagers;\r\n if (!spriteManagers) {\r\n return;\r\n }\r\n while (spriteManagers.length) {\r\n spriteManagers[0].dispose();\r\n }\r\n }\r\n\r\n private _pickSpriteButKeepRay(originalPointerInfo: Nullable<PickingInfo>, x: number, y: number, fastCheck?: boolean, camera?: Camera): Nullable<PickingInfo> {\r\n const result = this.scene.pickSprite(x, y, this._spritePredicate, fastCheck, camera);\r\n if (result) {\r\n result.ray = originalPointerInfo ? originalPointerInfo.ray : null;\r\n }\r\n return result;\r\n }\r\n\r\n private _pointerMove(\r\n unTranslatedPointerX: number,\r\n unTranslatedPointerY: number,\r\n pickResult: Nullable<PickingInfo>,\r\n isMeshPicked: boolean,\r\n element: Nullable<HTMLElement>\r\n ): Nullable<PickingInfo> {\r\n const scene = this.scene;\r\n if (isMeshPicked) {\r\n scene.setPointerOverSprite(null);\r\n } else {\r\n pickResult = this._pickSpriteButKeepRay(pickResult, unTranslatedPointerX, unTranslatedPointerY, false, scene.cameraToUseForPointers || undefined);\r\n\r\n if (pickResult && pickResult.hit && pickResult.pickedSprite) {\r\n scene.setPointerOverSprite(pickResult.pickedSprite);\r\n if (!scene.doNotHandleCursors && element) {\r\n if (scene._pointerOverSprite && scene._pointerOverSprite.actionManager && scene._pointerOverSprite.actionManager.hoverCursor) {\r\n element.style.cursor = scene._pointerOverSprite.actionManager.hoverCursor;\r\n } else {\r\n element.style.cursor = scene.hoverCursor;\r\n }\r\n }\r\n } else {\r\n scene.setPointerOverSprite(null);\r\n }\r\n }\r\n\r\n return pickResult;\r\n }\r\n\r\n private _pointerDown(unTranslatedPointerX: number, unTranslatedPointerY: number, pickResult: Nullable<PickingInfo>, evt: IPointerEvent): Nullable<PickingInfo> {\r\n const scene = this.scene;\r\n scene._pickedDownSprite = null;\r\n if (scene.spriteManagers && scene.spriteManagers.length > 0) {\r\n pickResult = scene.pickSprite(unTranslatedPointerX, unTranslatedPointerY, this._spritePredicate, false, scene.cameraToUseForPointers || undefined);\r\n\r\n if (pickResult && pickResult.hit && pickResult.pickedSprite) {\r\n if (pickResult.pickedSprite.actionManager) {\r\n scene._pickedDownSprite = pickResult.pickedSprite;\r\n switch (evt.button) {\r\n case 0:\r\n pickResult.pickedSprite.actionManager.processTrigger(\r\n Constants.ACTION_OnLeftPickTrigger,\r\n ActionEvent.CreateNewFromSprite(pickResult.pickedSprite, scene, evt)\r\n );\r\n break;\r\n case 1:\r\n pickResult.pickedSprite.actionManager.processTrigger(\r\n Constants.ACTION_OnCenterPickTrigger,\r\n ActionEvent.CreateNewFromSprite(pickResult.pickedSprite, scene, evt)\r\n );\r\n break;\r\n case 2:\r\n pickResult.pickedSprite.actionManager.processTrigger(\r\n Constants.ACTION_OnRightPickTrigger,\r\n ActionEvent.CreateNewFromSprite(pickResult.pickedSprite, scene, evt)\r\n );\r\n break;\r\n }\r\n if (pickResult.pickedSprite.actionManager) {\r\n pickResult.pickedSprite.actionManager.processTrigger(\r\n Constants.ACTION_OnPickDownTrigger,\r\n ActionEvent.CreateNewFromSprite(pickResult.pickedSprite, scene, evt)\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n return pickResult;\r\n }\r\n\r\n private _pointerUp(\r\n unTranslatedPointerX: number,\r\n unTranslatedPointerY: number,\r\n pickResult: Nullable<PickingInfo>,\r\n evt: IPointerEvent,\r\n doubleClick: boolean\r\n ): Nullable<PickingInfo> {\r\n const scene = this.scene;\r\n if (scene.spriteManagers && scene.spriteManagers.length > 0) {\r\n const spritePickResult = scene.pickSprite(unTranslatedPointerX, unTranslatedPointerY, this._spritePredicate, false, scene.cameraToUseForPointers || undefined);\r\n\r\n if (spritePickResult) {\r\n if (spritePickResult.hit && spritePickResult.pickedSprite) {\r\n if (spritePickResult.pickedSprite.actionManager) {\r\n spritePickResult.pickedSprite.actionManager.processTrigger(\r\n Constants.ACTION_OnPickUpTrigger,\r\n ActionEvent.CreateNewFromSprite(spritePickResult.pickedSprite, scene, evt)\r\n );\r\n\r\n if (spritePickResult.pickedSprite.actionManager) {\r\n if (!this.scene._inputManager._isPointerSwiping()) {\r\n spritePickResult.pickedSprite.actionManager.processTrigger(\r\n Constants.ACTION_OnPickTrigger,\r\n ActionEvent.CreateNewFromSprite(spritePickResult.pickedSprite, scene, evt)\r\n );\r\n }\r\n\r\n if (doubleClick) {\r\n spritePickResult.pickedSprite.actionManager.processTrigger(\r\n Constants.ACTION_OnDoublePickTrigger,\r\n ActionEvent.CreateNewFromSprite(spritePickResult.pickedSprite, scene, evt)\r\n );\r\n }\r\n }\r\n }\r\n }\r\n if (scene._pickedDownSprite && scene._pickedDownSprite.actionManager && scene._pickedDownSprite !== spritePickResult.pickedSprite) {\r\n scene._pickedDownSprite.actionManager.processTrigger(Constants.ACTION_OnPickOutTrigger, ActionEvent.CreateNewFromSprite(scene._pickedDownSprite, scene, evt));\r\n }\r\n }\r\n }\r\n\r\n return pickResult;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"spriteSceneComponent.js","sourceRoot":"","sources":["../../../../dev/core/src/Sprites/spriteSceneComponent.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport { Scene } from \"../scene\";\r\nimport type { Sprite } from \"./sprite\";\r\nimport type { ISpriteManager } from \"./spriteManager\";\r\nimport { Ray } from \"../Culling/ray\";\r\nimport type { Camera } from \"../Cameras/camera\";\r\nimport { PickingInfo } from \"../Collisions/pickingInfo\";\r\nimport type { ISceneComponent } from \"../sceneComponent\";\r\nimport { SceneComponentConstants } from \"../sceneComponent\";\r\nimport { ActionEvent } from \"../Actions/actionEvent\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport type { IPointerEvent } from \"../Events/deviceInputEvents\";\r\n\r\ndeclare module \"../scene\" {\r\n export interface Scene {\r\n /** @internal */\r\n _pointerOverSprite: Nullable<Sprite>;\r\n\r\n /** @internal */\r\n _pickedDownSprite: Nullable<Sprite>;\r\n\r\n /** @internal */\r\n _tempSpritePickingRay: Nullable<Ray>;\r\n\r\n /**\r\n * All of the sprite managers added to this scene\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/sprites\r\n */\r\n spriteManagers?: Array<ISpriteManager>;\r\n\r\n /**\r\n * An event triggered when sprites rendering is about to start\r\n * Note: This event can be trigger more than once per frame (because sprites can be rendered by render target textures as well)\r\n */\r\n onBeforeSpritesRenderingObservable: Observable<Scene>;\r\n\r\n /**\r\n * An event triggered when sprites rendering is done\r\n * Note: This event can be trigger more than once per frame (because sprites can be rendered by render target textures as well)\r\n */\r\n onAfterSpritesRenderingObservable: Observable<Scene>;\r\n\r\n /** @internal */\r\n _internalPickSprites(ray: Ray, predicate?: (sprite: Sprite) => boolean, fastCheck?: boolean, camera?: Camera): Nullable<PickingInfo>;\r\n\r\n /** Launch a ray to try to pick a sprite in the scene\r\n * @param x position on screen\r\n * @param y position on screen\r\n * @param predicate Predicate function used to determine eligible sprites. Can be set to null. In this case, a sprite must have isPickable set to true\r\n * @param fastCheck defines if the first intersection will be used (and not the closest)\r\n * @param camera camera to use for computing the picking ray. Can be set to null. In this case, the scene.activeCamera will be used\r\n * @returns a PickingInfo\r\n */\r\n pickSprite(x: number, y: number, predicate?: (sprite: Sprite) => boolean, fastCheck?: boolean, camera?: Camera): Nullable<PickingInfo>;\r\n\r\n /** Use the given ray to pick a sprite in the scene\r\n * @param ray The ray (in world space) to use to pick meshes\r\n * @param predicate Predicate function used to determine eligible sprites. Can be set to null. In this case, a sprite must have isPickable set to true\r\n * @param fastCheck defines if the first intersection will be used (and not the closest)\r\n * @param camera camera to use. Can be set to null. In this case, the scene.activeCamera will be used\r\n * @returns a PickingInfo\r\n */\r\n pickSpriteWithRay(ray: Ray, predicate?: (sprite: Sprite) => boolean, fastCheck?: boolean, camera?: Camera): Nullable<PickingInfo>;\r\n\r\n /** @internal */\r\n _internalMultiPickSprites(ray: Ray, predicate?: (sprite: Sprite) => boolean, camera?: Camera): Nullable<PickingInfo[]>;\r\n\r\n /** Launch a ray to try to pick sprites in the scene\r\n * @param x position on screen\r\n * @param y position on screen\r\n * @param predicate Predicate function used to determine eligible sprites. Can be set to null. In this case, a sprite must have isPickable set to true\r\n * @param camera camera to use for computing the picking ray. Can be set to null. In this case, the scene.activeCamera will be used\r\n * @returns a PickingInfo array\r\n */\r\n multiPickSprite(x: number, y: number, predicate?: (sprite: Sprite) => boolean, camera?: Camera): Nullable<PickingInfo[]>;\r\n\r\n /** Use the given ray to pick sprites in the scene\r\n * @param ray The ray (in world space) to use to pick meshes\r\n * @param predicate Predicate function used to determine eligible sprites. Can be set to null. In this case, a sprite must have isPickable set to true\r\n * @param camera camera to use. Can be set to null. In this case, the scene.activeCamera will be used\r\n * @returns a PickingInfo array\r\n */\r\n multiPickSpriteWithRay(ray: Ray, predicate?: (sprite: Sprite) => boolean, camera?: Camera): Nullable<PickingInfo[]>;\r\n\r\n /**\r\n * Force the sprite under the pointer\r\n * @param sprite defines the sprite to use\r\n */\r\n setPointerOverSprite(sprite: Nullable<Sprite>): void;\r\n\r\n /**\r\n * Gets the sprite under the pointer\r\n * @returns a Sprite or null if no sprite is under the pointer\r\n */\r\n getPointerOverSprite(): Nullable<Sprite>;\r\n }\r\n}\r\n\r\nScene.prototype._internalPickSprites = function (ray: Ray, predicate?: (sprite: Sprite) => boolean, fastCheck?: boolean, camera?: Camera): Nullable<PickingInfo> {\r\n if (!PickingInfo) {\r\n return null;\r\n }\r\n\r\n let pickingInfo = null;\r\n\r\n if (!camera) {\r\n if (!this.activeCamera) {\r\n return null;\r\n }\r\n camera = this.activeCamera;\r\n }\r\n\r\n if (this.spriteManagers && this.spriteManagers.length > 0) {\r\n for (let spriteIndex = 0; spriteIndex < this.spriteManagers.length; spriteIndex++) {\r\n const spriteManager = this.spriteManagers[spriteIndex];\r\n\r\n if (!spriteManager.isPickable) {\r\n continue;\r\n }\r\n\r\n const result = spriteManager.intersects(ray, camera, predicate, fastCheck);\r\n if (!result || !result.hit) {\r\n continue;\r\n }\r\n\r\n if (!fastCheck && pickingInfo != null && result.distance >= pickingInfo.distance) {\r\n continue;\r\n }\r\n\r\n pickingInfo = result;\r\n\r\n if (fastCheck) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return pickingInfo || new PickingInfo();\r\n};\r\n\r\nScene.prototype._internalMultiPickSprites = function (ray: Ray, predicate?: (sprite: Sprite) => boolean, camera?: Camera): Nullable<PickingInfo[]> {\r\n if (!PickingInfo) {\r\n return null;\r\n }\r\n\r\n let pickingInfos: PickingInfo[] = [];\r\n\r\n if (!camera) {\r\n if (!this.activeCamera) {\r\n return null;\r\n }\r\n camera = this.activeCamera;\r\n }\r\n\r\n if (this.spriteManagers && this.spriteManagers.length > 0) {\r\n for (let spriteIndex = 0; spriteIndex < this.spriteManagers.length; spriteIndex++) {\r\n const spriteManager = this.spriteManagers[spriteIndex];\r\n\r\n if (!spriteManager.isPickable) {\r\n continue;\r\n }\r\n\r\n const results = spriteManager.multiIntersects(ray, camera, predicate);\r\n\r\n if (results !== null) {\r\n pickingInfos = pickingInfos.concat(results);\r\n }\r\n }\r\n }\r\n\r\n return pickingInfos;\r\n};\r\n\r\nScene.prototype.pickSprite = function (x: number, y: number, predicate?: (sprite: Sprite) => boolean, fastCheck?: boolean, camera?: Camera): Nullable<PickingInfo> {\r\n if (!this._tempSpritePickingRay) {\r\n return null;\r\n }\r\n\r\n this.createPickingRayInCameraSpaceToRef(x, y, this._tempSpritePickingRay, camera);\r\n\r\n const result = this._internalPickSprites(this._tempSpritePickingRay, predicate, fastCheck, camera);\r\n if (result) {\r\n result.ray = this.createPickingRayInCameraSpace(x, y, camera);\r\n }\r\n\r\n return result;\r\n};\r\n\r\nScene.prototype.pickSpriteWithRay = function (ray: Ray, predicate?: (sprite: Sprite) => boolean, fastCheck?: boolean, camera?: Camera): Nullable<PickingInfo> {\r\n if (!this._tempSpritePickingRay) {\r\n return null;\r\n }\r\n\r\n if (!camera) {\r\n if (!this.activeCamera) {\r\n return null;\r\n }\r\n camera = this.activeCamera;\r\n }\r\n\r\n Ray.TransformToRef(ray, camera.getViewMatrix(), this._tempSpritePickingRay);\r\n\r\n const result = this._internalPickSprites(this._tempSpritePickingRay, predicate, fastCheck, camera);\r\n if (result) {\r\n result.ray = ray;\r\n }\r\n\r\n return result;\r\n};\r\n\r\nScene.prototype.multiPickSprite = function (x: number, y: number, predicate?: (sprite: Sprite) => boolean, camera?: Camera): Nullable<PickingInfo[]> {\r\n this.createPickingRayInCameraSpaceToRef(x, y, this._tempSpritePickingRay!, camera);\r\n\r\n return this._internalMultiPickSprites(this._tempSpritePickingRay!, predicate, camera);\r\n};\r\n\r\nScene.prototype.multiPickSpriteWithRay = function (ray: Ray, predicate?: (sprite: Sprite) => boolean, camera?: Camera): Nullable<PickingInfo[]> {\r\n if (!this._tempSpritePickingRay) {\r\n return null;\r\n }\r\n\r\n if (!camera) {\r\n if (!this.activeCamera) {\r\n return null;\r\n }\r\n camera = this.activeCamera;\r\n }\r\n\r\n Ray.TransformToRef(ray, camera.getViewMatrix(), this._tempSpritePickingRay);\r\n\r\n return this._internalMultiPickSprites(this._tempSpritePickingRay, predicate, camera);\r\n};\r\n\r\nScene.prototype.setPointerOverSprite = function (sprite: Nullable<Sprite>): void {\r\n if (this._pointerOverSprite === sprite) {\r\n return;\r\n }\r\n\r\n if (this._pointerOverSprite && this._pointerOverSprite.actionManager) {\r\n this._pointerOverSprite.actionManager.processTrigger(Constants.ACTION_OnPointerOutTrigger, ActionEvent.CreateNewFromSprite(this._pointerOverSprite, this));\r\n }\r\n\r\n this._pointerOverSprite = sprite;\r\n if (this._pointerOverSprite && this._pointerOverSprite.actionManager) {\r\n this._pointerOverSprite.actionManager.processTrigger(Constants.ACTION_OnPointerOverTrigger, ActionEvent.CreateNewFromSprite(this._pointerOverSprite, this));\r\n }\r\n};\r\n\r\nScene.prototype.getPointerOverSprite = function (): Nullable<Sprite> {\r\n return this._pointerOverSprite;\r\n};\r\n\r\n/**\r\n * Defines the sprite scene component responsible to manage sprites\r\n * in a given scene.\r\n */\r\nexport class SpriteSceneComponent implements ISceneComponent {\r\n /**\r\n * The component name helpfull to identify the component in the list of scene components.\r\n */\r\n public readonly name = SceneComponentConstants.NAME_SPRITE;\r\n\r\n /**\r\n * The scene the component belongs to.\r\n */\r\n public scene: Scene;\r\n\r\n /** @internal */\r\n private _spritePredicate: (sprite: Sprite) => boolean;\r\n\r\n /**\r\n * Creates a new instance of the component for the given scene\r\n * @param scene Defines the scene to register the component in\r\n */\r\n constructor(scene: Scene) {\r\n this.scene = scene;\r\n this.scene.spriteManagers = [] as ISpriteManager[];\r\n this.scene._tempSpritePickingRay = Ray ? Ray.Zero() : null;\r\n this.scene.onBeforeSpritesRenderingObservable = new Observable<Scene>();\r\n this.scene.onAfterSpritesRenderingObservable = new Observable<Scene>();\r\n this._spritePredicate = (sprite: Sprite): boolean => {\r\n if (!sprite.actionManager) {\r\n return false;\r\n }\r\n return sprite.isPickable && sprite.actionManager.hasPointerTriggers;\r\n };\r\n }\r\n\r\n /**\r\n * Registers the component in a given scene\r\n */\r\n public register(): void {\r\n this.scene._pointerMoveStage.registerStep(SceneComponentConstants.STEP_POINTERMOVE_SPRITE, this, this._pointerMove);\r\n this.scene._pointerDownStage.registerStep(SceneComponentConstants.STEP_POINTERDOWN_SPRITE, this, this._pointerDown);\r\n this.scene._pointerUpStage.registerStep(SceneComponentConstants.STEP_POINTERUP_SPRITE, this, this._pointerUp);\r\n }\r\n\r\n /**\r\n * Rebuilds the elements related to this component in case of\r\n * context lost for instance.\r\n */\r\n public rebuild(): void {\r\n /** Nothing to do for sprites */\r\n }\r\n\r\n /**\r\n * Disposes the component and the associated resources.\r\n */\r\n public dispose(): void {\r\n this.scene.onBeforeSpritesRenderingObservable.clear();\r\n this.scene.onAfterSpritesRenderingObservable.clear();\r\n\r\n const spriteManagers = this.scene.spriteManagers;\r\n if (!spriteManagers) {\r\n return;\r\n }\r\n while (spriteManagers.length) {\r\n spriteManagers[0].dispose();\r\n }\r\n }\r\n\r\n private _pickSpriteButKeepRay(originalPointerInfo: Nullable<PickingInfo>, x: number, y: number, fastCheck?: boolean, camera?: Camera): Nullable<PickingInfo> {\r\n const result = this.scene.pickSprite(x, y, this._spritePredicate, fastCheck, camera);\r\n if (result) {\r\n result.ray = originalPointerInfo ? originalPointerInfo.ray : null;\r\n }\r\n return result;\r\n }\r\n\r\n private _pointerMove(\r\n unTranslatedPointerX: number,\r\n unTranslatedPointerY: number,\r\n pickResult: Nullable<PickingInfo>,\r\n isMeshPicked: boolean,\r\n element: Nullable<HTMLElement>\r\n ): Nullable<PickingInfo> {\r\n const scene = this.scene;\r\n if (isMeshPicked) {\r\n scene.setPointerOverSprite(null);\r\n } else {\r\n pickResult = this._pickSpriteButKeepRay(pickResult, unTranslatedPointerX, unTranslatedPointerY, false, scene.cameraToUseForPointers || undefined);\r\n\r\n if (pickResult && pickResult.hit && pickResult.pickedSprite) {\r\n scene.setPointerOverSprite(pickResult.pickedSprite);\r\n if (!scene.doNotHandleCursors && element) {\r\n if (scene._pointerOverSprite && scene._pointerOverSprite.actionManager && scene._pointerOverSprite.actionManager.hoverCursor) {\r\n element.style.cursor = scene._pointerOverSprite.actionManager.hoverCursor;\r\n } else {\r\n element.style.cursor = scene.hoverCursor;\r\n }\r\n }\r\n } else {\r\n scene.setPointerOverSprite(null);\r\n }\r\n }\r\n\r\n return pickResult;\r\n }\r\n\r\n private _pointerDown(unTranslatedPointerX: number, unTranslatedPointerY: number, pickResult: Nullable<PickingInfo>, evt: IPointerEvent): Nullable<PickingInfo> {\r\n const scene = this.scene;\r\n scene._pickedDownSprite = null;\r\n if (scene.spriteManagers && scene.spriteManagers.length > 0) {\r\n pickResult = scene.pickSprite(unTranslatedPointerX, unTranslatedPointerY, this._spritePredicate, false, scene.cameraToUseForPointers || undefined);\r\n\r\n if (pickResult && pickResult.hit && pickResult.pickedSprite) {\r\n if (pickResult.pickedSprite.actionManager) {\r\n scene._pickedDownSprite = pickResult.pickedSprite;\r\n switch (evt.button) {\r\n case 0:\r\n pickResult.pickedSprite.actionManager.processTrigger(\r\n Constants.ACTION_OnLeftPickTrigger,\r\n ActionEvent.CreateNewFromSprite(pickResult.pickedSprite, scene, evt)\r\n );\r\n break;\r\n case 1:\r\n pickResult.pickedSprite.actionManager.processTrigger(\r\n Constants.ACTION_OnCenterPickTrigger,\r\n ActionEvent.CreateNewFromSprite(pickResult.pickedSprite, scene, evt)\r\n );\r\n break;\r\n case 2:\r\n pickResult.pickedSprite.actionManager.processTrigger(\r\n Constants.ACTION_OnRightPickTrigger,\r\n ActionEvent.CreateNewFromSprite(pickResult.pickedSprite, scene, evt)\r\n );\r\n break;\r\n }\r\n if (pickResult.pickedSprite.actionManager) {\r\n pickResult.pickedSprite.actionManager.processTrigger(\r\n Constants.ACTION_OnPickDownTrigger,\r\n ActionEvent.CreateNewFromSprite(pickResult.pickedSprite, scene, evt)\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n return pickResult;\r\n }\r\n\r\n private _pointerUp(\r\n unTranslatedPointerX: number,\r\n unTranslatedPointerY: number,\r\n pickResult: Nullable<PickingInfo>,\r\n evt: IPointerEvent,\r\n doubleClick: boolean\r\n ): Nullable<PickingInfo> {\r\n const scene = this.scene;\r\n if (scene.spriteManagers && scene.spriteManagers.length > 0) {\r\n const spritePickResult = scene.pickSprite(unTranslatedPointerX, unTranslatedPointerY, this._spritePredicate, false, scene.cameraToUseForPointers || undefined);\r\n\r\n if (spritePickResult) {\r\n if (spritePickResult.hit && spritePickResult.pickedSprite) {\r\n if (spritePickResult.pickedSprite.actionManager) {\r\n spritePickResult.pickedSprite.actionManager.processTrigger(\r\n Constants.ACTION_OnPickUpTrigger,\r\n ActionEvent.CreateNewFromSprite(spritePickResult.pickedSprite, scene, evt)\r\n );\r\n\r\n if (spritePickResult.pickedSprite.actionManager) {\r\n if (!this.scene._inputManager._isPointerSwiping()) {\r\n spritePickResult.pickedSprite.actionManager.processTrigger(\r\n Constants.ACTION_OnPickTrigger,\r\n ActionEvent.CreateNewFromSprite(spritePickResult.pickedSprite, scene, evt)\r\n );\r\n }\r\n\r\n if (doubleClick) {\r\n spritePickResult.pickedSprite.actionManager.processTrigger(\r\n Constants.ACTION_OnDoublePickTrigger,\r\n ActionEvent.CreateNewFromSprite(spritePickResult.pickedSprite, scene, evt)\r\n );\r\n }\r\n }\r\n }\r\n }\r\n if (scene._pickedDownSprite && scene._pickedDownSprite.actionManager && scene._pickedDownSprite !== spritePickResult.pickedSprite) {\r\n scene._pickedDownSprite.actionManager.processTrigger(Constants.ACTION_OnPickOutTrigger, ActionEvent.CreateNewFromSprite(scene._pickedDownSprite, scene, evt));\r\n }\r\n }\r\n }\r\n\r\n return pickResult;\r\n }\r\n}\r\n"]}
|
|
@@ -81,8 +81,8 @@ export class WebXRFeaturePointSystem extends WebXRAbstractFeature {
|
|
|
81
81
|
throw new Error("Received malformed feature point cloud of length: " + featurePointRawData.length);
|
|
82
82
|
}
|
|
83
83
|
const numberOfFeaturePoints = featurePointRawData.length / 5;
|
|
84
|
-
const updatedFeaturePoints =
|
|
85
|
-
const addedFeaturePoints =
|
|
84
|
+
const updatedFeaturePoints = [];
|
|
85
|
+
const addedFeaturePoints = [];
|
|
86
86
|
for (let i = 0; i < numberOfFeaturePoints; i++) {
|
|
87
87
|
const rawIndex = i * 5;
|
|
88
88
|
const id = featurePointRawData[rawIndex + 4];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebXRFeaturePointSystem.js","sourceRoot":"","sources":["../../../../../dev/core/src/XR/features/WebXRFeaturePointSystem.ts"],"names":[],"mappings":"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","sourcesContent":["import { WebXRFeaturesManager, WebXRFeatureName } from \"../webXRFeaturesManager\";\r\nimport type { WebXRSessionManager } from \"../webXRSessionManager\";\r\nimport { Observable } from \"../../Misc/observable\";\r\nimport { Vector3 } from \"../../Maths/math.vector\";\r\nimport { WebXRAbstractFeature } from \"./WebXRAbstractFeature\";\r\n\r\n/**\r\n * A babylon interface for a \"WebXR\" feature point.\r\n * Represents the position and confidence value of a given feature point.\r\n */\r\nexport interface IWebXRFeaturePoint {\r\n /**\r\n * Represents the position of the feature point in world space.\r\n */\r\n position: Vector3;\r\n /**\r\n * Represents the confidence value of the feature point in world space. 0 being least confident, and 1 being most confident.\r\n */\r\n confidenceValue: number;\r\n}\r\n\r\n/**\r\n * The feature point system is used to detect feature points from real world geometry.\r\n * This feature is currently experimental and only supported on BabylonNative, and should not be used in the browser.\r\n * The newly introduced API can be seen in webxr.nativeextensions.d.ts and described in FeaturePoints.md.\r\n */\r\nexport class WebXRFeaturePointSystem extends WebXRAbstractFeature {\r\n private _enabled: boolean = false;\r\n private _featurePointCloud: Array<IWebXRFeaturePoint> = [];\r\n\r\n /**\r\n * The module's name\r\n */\r\n public static readonly Name = WebXRFeatureName.FEATURE_POINTS;\r\n /**\r\n * The (Babylon) version of this module.\r\n * This is an integer representing the implementation version.\r\n * This number does not correspond to the WebXR specs version\r\n */\r\n public static readonly Version = 1;\r\n /**\r\n * Observers registered here will be executed whenever new feature points are added (on XRFrame while the session is tracking).\r\n * Will notify the observers about which feature points have been added.\r\n */\r\n public readonly onFeaturePointsAddedObservable: Observable<number[]> = new Observable();\r\n /**\r\n * Observers registered here will be executed whenever a feature point has been updated (on XRFrame while the session is tracking).\r\n * Will notify the observers about which feature points have been updated.\r\n */\r\n public readonly onFeaturePointsUpdatedObservable: Observable<number[]> = new Observable();\r\n /**\r\n * The current feature point cloud maintained across frames.\r\n */\r\n public get featurePointCloud(): Array<IWebXRFeaturePoint> {\r\n return this._featurePointCloud;\r\n }\r\n\r\n /**\r\n * construct the feature point system\r\n * @param _xrSessionManager an instance of xr Session manager\r\n */\r\n constructor(_xrSessionManager: WebXRSessionManager) {\r\n super(_xrSessionManager);\r\n this.xrNativeFeatureName = \"bjsfeature-points\";\r\n if (this._xrSessionManager.session) {\r\n this._init();\r\n } else {\r\n this._xrSessionManager.onXRSessionInit.addOnce(() => {\r\n this._init();\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Detach this feature.\r\n * Will usually be called by the features manager\r\n *\r\n * @returns true if successful.\r\n */\r\n public detach(): boolean {\r\n if (!super.detach()) {\r\n return false;\r\n }\r\n\r\n this.featurePointCloud.length = 0;\r\n return true;\r\n }\r\n\r\n /**\r\n * Dispose this feature and all of the resources attached\r\n */\r\n public dispose(): void {\r\n super.dispose();\r\n\r\n this._featurePointCloud.length = 0;\r\n this.onFeaturePointsUpdatedObservable.clear();\r\n this.onFeaturePointsAddedObservable.clear();\r\n }\r\n\r\n /**\r\n * On receiving a new XR frame if this feature is attached notify observers new feature point data is available.\r\n * @param frame\r\n */\r\n protected _onXRFrame(frame: XRFrame) {\r\n if (!this.attached || !this._enabled || !frame) {\r\n return;\r\n }\r\n\r\n const featurePointRawData: number[] | undefined = frame.featurePointCloud;\r\n if (!featurePointRawData || featurePointRawData.length === 0) {\r\n return;\r\n } else {\r\n if (featurePointRawData.length % 5 !== 0) {\r\n throw new Error(\"Received malformed feature point cloud of length: \" + featurePointRawData.length);\r\n }\r\n\r\n const numberOfFeaturePoints: number = featurePointRawData.length / 5;\r\n const updatedFeaturePoints = new Array();\r\n const addedFeaturePoints = new Array();\r\n for (let i = 0; i < numberOfFeaturePoints; i++) {\r\n const rawIndex: number = i * 5;\r\n const id = featurePointRawData[rawIndex + 4];\r\n\r\n // IDs should be durable across frames and strictly increasing from 0 up, so use them as indexing into the feature point array.\r\n if (!this._featurePointCloud[id]) {\r\n this._featurePointCloud[id] = { position: new Vector3(), confidenceValue: 0 };\r\n addedFeaturePoints.push(id);\r\n } else {\r\n updatedFeaturePoints.push(id);\r\n }\r\n\r\n // Set the feature point values.\r\n this._featurePointCloud[id].position.x = featurePointRawData[rawIndex];\r\n this._featurePointCloud[id].position.y = featurePointRawData[rawIndex + 1];\r\n this._featurePointCloud[id].position.z = featurePointRawData[rawIndex + 2];\r\n this._featurePointCloud[id].confidenceValue = featurePointRawData[rawIndex + 3];\r\n }\r\n\r\n // Signal observers that feature points have been added if necessary.\r\n if (addedFeaturePoints.length > 0) {\r\n this.onFeaturePointsAddedObservable.notifyObservers(addedFeaturePoints);\r\n }\r\n\r\n // Signal observers that feature points have been updated if necessary.\r\n if (updatedFeaturePoints.length > 0) {\r\n this.onFeaturePointsUpdatedObservable.notifyObservers(updatedFeaturePoints);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Initializes the feature. If the feature point feature is not available for this environment do not mark the feature as enabled.\r\n */\r\n private _init() {\r\n if (!this._xrSessionManager.session.trySetFeaturePointCloudEnabled || !this._xrSessionManager.session.trySetFeaturePointCloudEnabled(true)) {\r\n // fail silently\r\n return;\r\n }\r\n\r\n this._enabled = true;\r\n }\r\n}\r\n\r\n// register the plugin\r\nWebXRFeaturesManager.AddWebXRFeature(\r\n WebXRFeaturePointSystem.Name,\r\n (xrSessionManager) => {\r\n return () => new WebXRFeaturePointSystem(xrSessionManager);\r\n },\r\n WebXRFeaturePointSystem.Version\r\n);\r\n"]}
|
|
1
|
+
{"version":3,"file":"WebXRFeaturePointSystem.js","sourceRoot":"","sources":["../../../../../dev/core/src/XR/features/WebXRFeaturePointSystem.ts"],"names":[],"mappings":"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","sourcesContent":["import { WebXRFeaturesManager, WebXRFeatureName } from \"../webXRFeaturesManager\";\r\nimport type { WebXRSessionManager } from \"../webXRSessionManager\";\r\nimport { Observable } from \"../../Misc/observable\";\r\nimport { Vector3 } from \"../../Maths/math.vector\";\r\nimport { WebXRAbstractFeature } from \"./WebXRAbstractFeature\";\r\n\r\n/**\r\n * A babylon interface for a \"WebXR\" feature point.\r\n * Represents the position and confidence value of a given feature point.\r\n */\r\nexport interface IWebXRFeaturePoint {\r\n /**\r\n * Represents the position of the feature point in world space.\r\n */\r\n position: Vector3;\r\n /**\r\n * Represents the confidence value of the feature point in world space. 0 being least confident, and 1 being most confident.\r\n */\r\n confidenceValue: number;\r\n}\r\n\r\n/**\r\n * The feature point system is used to detect feature points from real world geometry.\r\n * This feature is currently experimental and only supported on BabylonNative, and should not be used in the browser.\r\n * The newly introduced API can be seen in webxr.nativeextensions.d.ts and described in FeaturePoints.md.\r\n */\r\nexport class WebXRFeaturePointSystem extends WebXRAbstractFeature {\r\n private _enabled: boolean = false;\r\n private _featurePointCloud: Array<IWebXRFeaturePoint> = [];\r\n\r\n /**\r\n * The module's name\r\n */\r\n public static readonly Name = WebXRFeatureName.FEATURE_POINTS;\r\n /**\r\n * The (Babylon) version of this module.\r\n * This is an integer representing the implementation version.\r\n * This number does not correspond to the WebXR specs version\r\n */\r\n public static readonly Version = 1;\r\n /**\r\n * Observers registered here will be executed whenever new feature points are added (on XRFrame while the session is tracking).\r\n * Will notify the observers about which feature points have been added.\r\n */\r\n public readonly onFeaturePointsAddedObservable: Observable<number[]> = new Observable();\r\n /**\r\n * Observers registered here will be executed whenever a feature point has been updated (on XRFrame while the session is tracking).\r\n * Will notify the observers about which feature points have been updated.\r\n */\r\n public readonly onFeaturePointsUpdatedObservable: Observable<number[]> = new Observable();\r\n /**\r\n * The current feature point cloud maintained across frames.\r\n */\r\n public get featurePointCloud(): Array<IWebXRFeaturePoint> {\r\n return this._featurePointCloud;\r\n }\r\n\r\n /**\r\n * construct the feature point system\r\n * @param _xrSessionManager an instance of xr Session manager\r\n */\r\n constructor(_xrSessionManager: WebXRSessionManager) {\r\n super(_xrSessionManager);\r\n this.xrNativeFeatureName = \"bjsfeature-points\";\r\n if (this._xrSessionManager.session) {\r\n this._init();\r\n } else {\r\n this._xrSessionManager.onXRSessionInit.addOnce(() => {\r\n this._init();\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Detach this feature.\r\n * Will usually be called by the features manager\r\n *\r\n * @returns true if successful.\r\n */\r\n public detach(): boolean {\r\n if (!super.detach()) {\r\n return false;\r\n }\r\n\r\n this.featurePointCloud.length = 0;\r\n return true;\r\n }\r\n\r\n /**\r\n * Dispose this feature and all of the resources attached\r\n */\r\n public dispose(): void {\r\n super.dispose();\r\n\r\n this._featurePointCloud.length = 0;\r\n this.onFeaturePointsUpdatedObservable.clear();\r\n this.onFeaturePointsAddedObservable.clear();\r\n }\r\n\r\n /**\r\n * On receiving a new XR frame if this feature is attached notify observers new feature point data is available.\r\n * @param frame\r\n */\r\n protected _onXRFrame(frame: XRFrame) {\r\n if (!this.attached || !this._enabled || !frame) {\r\n return;\r\n }\r\n\r\n const featurePointRawData: number[] | undefined = frame.featurePointCloud;\r\n if (!featurePointRawData || featurePointRawData.length === 0) {\r\n return;\r\n } else {\r\n if (featurePointRawData.length % 5 !== 0) {\r\n throw new Error(\"Received malformed feature point cloud of length: \" + featurePointRawData.length);\r\n }\r\n\r\n const numberOfFeaturePoints: number = featurePointRawData.length / 5;\r\n const updatedFeaturePoints = [];\r\n const addedFeaturePoints = [];\r\n for (let i = 0; i < numberOfFeaturePoints; i++) {\r\n const rawIndex: number = i * 5;\r\n const id = featurePointRawData[rawIndex + 4];\r\n\r\n // IDs should be durable across frames and strictly increasing from 0 up, so use them as indexing into the feature point array.\r\n if (!this._featurePointCloud[id]) {\r\n this._featurePointCloud[id] = { position: new Vector3(), confidenceValue: 0 };\r\n addedFeaturePoints.push(id);\r\n } else {\r\n updatedFeaturePoints.push(id);\r\n }\r\n\r\n // Set the feature point values.\r\n this._featurePointCloud[id].position.x = featurePointRawData[rawIndex];\r\n this._featurePointCloud[id].position.y = featurePointRawData[rawIndex + 1];\r\n this._featurePointCloud[id].position.z = featurePointRawData[rawIndex + 2];\r\n this._featurePointCloud[id].confidenceValue = featurePointRawData[rawIndex + 3];\r\n }\r\n\r\n // Signal observers that feature points have been added if necessary.\r\n if (addedFeaturePoints.length > 0) {\r\n this.onFeaturePointsAddedObservable.notifyObservers(addedFeaturePoints);\r\n }\r\n\r\n // Signal observers that feature points have been updated if necessary.\r\n if (updatedFeaturePoints.length > 0) {\r\n this.onFeaturePointsUpdatedObservable.notifyObservers(updatedFeaturePoints);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Initializes the feature. If the feature point feature is not available for this environment do not mark the feature as enabled.\r\n */\r\n private _init() {\r\n if (!this._xrSessionManager.session.trySetFeaturePointCloudEnabled || !this._xrSessionManager.session.trySetFeaturePointCloudEnabled(true)) {\r\n // fail silently\r\n return;\r\n }\r\n\r\n this._enabled = true;\r\n }\r\n}\r\n\r\n// register the plugin\r\nWebXRFeaturesManager.AddWebXRFeature(\r\n WebXRFeaturePointSystem.Name,\r\n (xrSessionManager) => {\r\n return () => new WebXRFeaturePointSystem(xrSessionManager);\r\n },\r\n WebXRFeaturePointSystem.Version\r\n);\r\n"]}
|
package/abstractScene.js
CHANGED
|
@@ -8,30 +8,30 @@ export class AbstractScene {
|
|
|
8
8
|
/**
|
|
9
9
|
* Gets the list of root nodes (ie. nodes with no parent)
|
|
10
10
|
*/
|
|
11
|
-
this.rootNodes =
|
|
11
|
+
this.rootNodes = [];
|
|
12
12
|
/** All of the cameras added to this scene
|
|
13
13
|
* @see https://doc.babylonjs.com/features/featuresDeepDive/cameras
|
|
14
14
|
*/
|
|
15
|
-
this.cameras =
|
|
15
|
+
this.cameras = [];
|
|
16
16
|
/**
|
|
17
17
|
* All of the lights added to this scene
|
|
18
18
|
* @see https://doc.babylonjs.com/features/featuresDeepDive/lights/lights_introduction
|
|
19
19
|
*/
|
|
20
|
-
this.lights =
|
|
20
|
+
this.lights = [];
|
|
21
21
|
/**
|
|
22
22
|
* All of the (abstract) meshes added to this scene
|
|
23
23
|
*/
|
|
24
|
-
this.meshes =
|
|
24
|
+
this.meshes = [];
|
|
25
25
|
/**
|
|
26
26
|
* The list of skeletons added to the scene
|
|
27
27
|
* @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/bonesSkeletons
|
|
28
28
|
*/
|
|
29
|
-
this.skeletons =
|
|
29
|
+
this.skeletons = [];
|
|
30
30
|
/**
|
|
31
31
|
* All of the particle systems added to this scene
|
|
32
32
|
* @see https://doc.babylonjs.com/features/featuresDeepDive/particles/particle_system/particle_system_intro
|
|
33
33
|
*/
|
|
34
|
-
this.particleSystems =
|
|
34
|
+
this.particleSystems = [];
|
|
35
35
|
/**
|
|
36
36
|
* Gets a list of Animations associated with the scene
|
|
37
37
|
*/
|
|
@@ -40,12 +40,12 @@ export class AbstractScene {
|
|
|
40
40
|
* All of the animation groups added to this scene
|
|
41
41
|
* @see https://doc.babylonjs.com/features/featuresDeepDive/animation/groupAnimations
|
|
42
42
|
*/
|
|
43
|
-
this.animationGroups =
|
|
43
|
+
this.animationGroups = [];
|
|
44
44
|
/**
|
|
45
45
|
* All of the multi-materials added to this scene
|
|
46
46
|
* @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/multiMaterials
|
|
47
47
|
*/
|
|
48
|
-
this.multiMaterials =
|
|
48
|
+
this.multiMaterials = [];
|
|
49
49
|
/**
|
|
50
50
|
* All of the materials added to this scene
|
|
51
51
|
* In the context of a Scene, it is not supposed to be modified manually.
|
|
@@ -53,16 +53,16 @@ export class AbstractScene {
|
|
|
53
53
|
* Note also that the order of the Material within the array is not significant and might change.
|
|
54
54
|
* @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/materials_introduction
|
|
55
55
|
*/
|
|
56
|
-
this.materials =
|
|
56
|
+
this.materials = [];
|
|
57
57
|
/**
|
|
58
58
|
* The list of morph target managers added to the scene
|
|
59
59
|
* @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/dynamicMeshMorph
|
|
60
60
|
*/
|
|
61
|
-
this.morphTargetManagers =
|
|
61
|
+
this.morphTargetManagers = [];
|
|
62
62
|
/**
|
|
63
63
|
* The list of geometries used in the scene.
|
|
64
64
|
*/
|
|
65
|
-
this.geometries =
|
|
65
|
+
this.geometries = [];
|
|
66
66
|
/**
|
|
67
67
|
* All of the transform nodes added to this scene
|
|
68
68
|
* In the context of a Scene, it is not supposed to be modified manually.
|
|
@@ -70,22 +70,22 @@ export class AbstractScene {
|
|
|
70
70
|
* Note also that the order of the TransformNode within the array is not significant and might change.
|
|
71
71
|
* @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/transforms/parent_pivot/transform_node
|
|
72
72
|
*/
|
|
73
|
-
this.transformNodes =
|
|
73
|
+
this.transformNodes = [];
|
|
74
74
|
/**
|
|
75
75
|
* ActionManagers available on the scene.
|
|
76
76
|
* @deprecated
|
|
77
77
|
*/
|
|
78
|
-
this.actionManagers =
|
|
78
|
+
this.actionManagers = [];
|
|
79
79
|
/**
|
|
80
80
|
* Textures to keep.
|
|
81
81
|
*/
|
|
82
|
-
this.textures =
|
|
82
|
+
this.textures = [];
|
|
83
83
|
/** @internal */
|
|
84
84
|
this._environmentTexture = null;
|
|
85
85
|
/**
|
|
86
86
|
* The list of postprocesses added to the scene
|
|
87
87
|
*/
|
|
88
|
-
this.postProcesses =
|
|
88
|
+
this.postProcesses = [];
|
|
89
89
|
}
|
|
90
90
|
/**
|
|
91
91
|
* Adds a parser in the list of available ones
|
|
@@ -154,7 +154,7 @@ export class AbstractScene {
|
|
|
154
154
|
* @returns all meshes, lights, cameras, transformNodes and bones
|
|
155
155
|
*/
|
|
156
156
|
getNodes() {
|
|
157
|
-
let nodes =
|
|
157
|
+
let nodes = [];
|
|
158
158
|
nodes = nodes.concat(this.meshes);
|
|
159
159
|
nodes = nodes.concat(this.lights);
|
|
160
160
|
nodes = nodes.concat(this.cameras);
|
package/abstractScene.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abstractScene.js","sourceRoot":"","sources":["../../../dev/core/src/abstractScene.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Scene } from \"./scene\";\r\nimport type { Nullable } from \"./types\";\r\nimport type { AbstractMesh } from \"./Meshes/abstractMesh\";\r\nimport type { TransformNode } from \"./Meshes/transformNode\";\r\nimport type { Geometry } from \"./Meshes/geometry\";\r\nimport type { Skeleton } from \"./Bones/skeleton\";\r\nimport type { MorphTargetManager } from \"./Morph/morphTargetManager\";\r\nimport type { AssetContainer } from \"./assetContainer\";\r\nimport type { IParticleSystem } from \"./Particles/IParticleSystem\";\r\nimport type { AnimationGroup } from \"./Animations/animationGroup\";\r\nimport type { BaseTexture } from \"./Materials/Textures/baseTexture\";\r\nimport type { Material } from \"./Materials/material\";\r\nimport type { MultiMaterial } from \"./Materials/multiMaterial\";\r\nimport type { AbstractActionManager } from \"./Actions/abstractActionManager\";\r\nimport type { Camera } from \"./Cameras/camera\";\r\nimport type { Light } from \"./Lights/light\";\r\nimport type { Node } from \"./node\";\r\nimport type { PostProcess } from \"./PostProcesses/postProcess\";\r\nimport type { Animation } from \"./Animations/animation\";\r\n\r\n/**\r\n * Defines how the parser contract is defined.\r\n * These parsers are used to parse a list of specific assets (like particle systems, etc..)\r\n */\r\nexport type BabylonFileParser = (parsedData: any, scene: Scene, container: AssetContainer, rootUrl: string) => void;\r\n\r\n/**\r\n * Defines how the individual parser contract is defined.\r\n * These parser can parse an individual asset\r\n */\r\nexport type IndividualBabylonFileParser = (parsedData: any, scene: Scene, rootUrl: string) => any;\r\n\r\n/**\r\n * Base class of the scene acting as a container for the different elements composing a scene.\r\n * This class is dynamically extended by the different components of the scene increasing\r\n * flexibility and reducing coupling\r\n */\r\nexport abstract class AbstractScene {\r\n /**\r\n * Stores the list of available parsers in the application.\r\n */\r\n private static _BabylonFileParsers: { [key: string]: BabylonFileParser } = {};\r\n\r\n /**\r\n * Stores the list of available individual parsers in the application.\r\n */\r\n private static _IndividualBabylonFileParsers: { [key: string]: IndividualBabylonFileParser } = {};\r\n\r\n /**\r\n * Adds a parser in the list of available ones\r\n * @param name Defines the name of the parser\r\n * @param parser Defines the parser to add\r\n */\r\n public static AddParser(name: string, parser: BabylonFileParser): void {\r\n this._BabylonFileParsers[name] = parser;\r\n }\r\n\r\n /**\r\n * Gets a general parser from the list of available ones\r\n * @param name Defines the name of the parser\r\n * @returns the requested parser or null\r\n */\r\n public static GetParser(name: string): Nullable<BabylonFileParser> {\r\n if (this._BabylonFileParsers[name]) {\r\n return this._BabylonFileParsers[name];\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Adds n individual parser in the list of available ones\r\n * @param name Defines the name of the parser\r\n * @param parser Defines the parser to add\r\n */\r\n public static AddIndividualParser(name: string, parser: IndividualBabylonFileParser): void {\r\n this._IndividualBabylonFileParsers[name] = parser;\r\n }\r\n\r\n /**\r\n * Gets an individual parser from the list of available ones\r\n * @param name Defines the name of the parser\r\n * @returns the requested parser or null\r\n */\r\n public static GetIndividualParser(name: string): Nullable<IndividualBabylonFileParser> {\r\n if (this._IndividualBabylonFileParsers[name]) {\r\n return this._IndividualBabylonFileParsers[name];\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Parser json data and populate both a scene and its associated container object\r\n * @param jsonData Defines the data to parse\r\n * @param scene Defines the scene to parse the data for\r\n * @param container Defines the container attached to the parsing sequence\r\n * @param rootUrl Defines the root url of the data\r\n */\r\n public static Parse(jsonData: any, scene: Scene, container: AssetContainer, rootUrl: string): void {\r\n for (const parserName in this._BabylonFileParsers) {\r\n if (Object.prototype.hasOwnProperty.call(this._BabylonFileParsers, parserName)) {\r\n this._BabylonFileParsers[parserName](jsonData, scene, container, rootUrl);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Gets the list of root nodes (ie. nodes with no parent)\r\n */\r\n public rootNodes = new Array<Node>();\r\n\r\n /** All of the cameras added to this scene\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/cameras\r\n */\r\n public cameras = new Array<Camera>();\r\n\r\n /**\r\n * All of the lights added to this scene\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/lights/lights_introduction\r\n */\r\n public lights = new Array<Light>();\r\n\r\n /**\r\n * All of the (abstract) meshes added to this scene\r\n */\r\n public meshes = new Array<AbstractMesh>();\r\n\r\n /**\r\n * The list of skeletons added to the scene\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/bonesSkeletons\r\n */\r\n public skeletons = new Array<Skeleton>();\r\n\r\n /**\r\n * All of the particle systems added to this scene\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/particles/particle_system/particle_system_intro\r\n */\r\n public particleSystems = new Array<IParticleSystem>();\r\n\r\n /**\r\n * Gets a list of Animations associated with the scene\r\n */\r\n public animations: Animation[] = [];\r\n\r\n /**\r\n * All of the animation groups added to this scene\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/animation/groupAnimations\r\n */\r\n public animationGroups = new Array<AnimationGroup>();\r\n\r\n /**\r\n * All of the multi-materials added to this scene\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/multiMaterials\r\n */\r\n public multiMaterials = new Array<MultiMaterial>();\r\n\r\n /**\r\n * All of the materials added to this scene\r\n * In the context of a Scene, it is not supposed to be modified manually.\r\n * Any addition or removal should be done using the addMaterial and removeMaterial Scene methods.\r\n * Note also that the order of the Material within the array is not significant and might change.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/materials_introduction\r\n */\r\n public materials = new Array<Material>();\r\n\r\n /**\r\n * The list of morph target managers added to the scene\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/dynamicMeshMorph\r\n */\r\n public morphTargetManagers = new Array<MorphTargetManager>();\r\n\r\n /**\r\n * The list of geometries used in the scene.\r\n */\r\n public geometries = new Array<Geometry>();\r\n\r\n /**\r\n * All of the transform nodes added to this scene\r\n * In the context of a Scene, it is not supposed to be modified manually.\r\n * Any addition or removal should be done using the addTransformNode and removeTransformNode Scene methods.\r\n * Note also that the order of the TransformNode within the array is not significant and might change.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/transforms/parent_pivot/transform_node\r\n */\r\n public transformNodes = new Array<TransformNode>();\r\n\r\n /**\r\n * ActionManagers available on the scene.\r\n * @deprecated\r\n */\r\n public actionManagers = new Array<AbstractActionManager>();\r\n\r\n /**\r\n * Textures to keep.\r\n */\r\n public textures = new Array<BaseTexture>();\r\n\r\n /** @internal */\r\n protected _environmentTexture: Nullable<BaseTexture> = null;\r\n /**\r\n * Texture used in all pbr material as the reflection texture.\r\n * As in the majority of the scene they are the same (exception for multi room and so on),\r\n * this is easier to reference from here than from all the materials.\r\n */\r\n public get environmentTexture(): Nullable<BaseTexture> {\r\n return this._environmentTexture;\r\n }\r\n\r\n public set environmentTexture(value: Nullable<BaseTexture>) {\r\n this._environmentTexture = value;\r\n }\r\n\r\n /**\r\n * The list of postprocesses added to the scene\r\n */\r\n public postProcesses = new Array<PostProcess>();\r\n\r\n /**\r\n * @returns all meshes, lights, cameras, transformNodes and bones\r\n */\r\n public getNodes(): Array<Node> {\r\n let nodes = new Array<Node>();\r\n nodes = nodes.concat(this.meshes);\r\n nodes = nodes.concat(this.lights);\r\n nodes = nodes.concat(this.cameras);\r\n nodes = nodes.concat(this.transformNodes); // dummies\r\n this.skeletons.forEach((skeleton) => (nodes = nodes.concat(skeleton.bones)));\r\n return nodes;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"abstractScene.js","sourceRoot":"","sources":["../../../dev/core/src/abstractScene.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Scene } from \"./scene\";\r\nimport type { Nullable } from \"./types\";\r\nimport type { AbstractMesh } from \"./Meshes/abstractMesh\";\r\nimport type { TransformNode } from \"./Meshes/transformNode\";\r\nimport type { Geometry } from \"./Meshes/geometry\";\r\nimport type { Skeleton } from \"./Bones/skeleton\";\r\nimport type { MorphTargetManager } from \"./Morph/morphTargetManager\";\r\nimport type { AssetContainer } from \"./assetContainer\";\r\nimport type { IParticleSystem } from \"./Particles/IParticleSystem\";\r\nimport type { AnimationGroup } from \"./Animations/animationGroup\";\r\nimport type { BaseTexture } from \"./Materials/Textures/baseTexture\";\r\nimport type { Material } from \"./Materials/material\";\r\nimport type { MultiMaterial } from \"./Materials/multiMaterial\";\r\nimport type { AbstractActionManager } from \"./Actions/abstractActionManager\";\r\nimport type { Camera } from \"./Cameras/camera\";\r\nimport type { Light } from \"./Lights/light\";\r\nimport type { Node } from \"./node\";\r\nimport type { PostProcess } from \"./PostProcesses/postProcess\";\r\nimport type { Animation } from \"./Animations/animation\";\r\n\r\n/**\r\n * Defines how the parser contract is defined.\r\n * These parsers are used to parse a list of specific assets (like particle systems, etc..)\r\n */\r\nexport type BabylonFileParser = (parsedData: any, scene: Scene, container: AssetContainer, rootUrl: string) => void;\r\n\r\n/**\r\n * Defines how the individual parser contract is defined.\r\n * These parser can parse an individual asset\r\n */\r\nexport type IndividualBabylonFileParser = (parsedData: any, scene: Scene, rootUrl: string) => any;\r\n\r\n/**\r\n * Base class of the scene acting as a container for the different elements composing a scene.\r\n * This class is dynamically extended by the different components of the scene increasing\r\n * flexibility and reducing coupling\r\n */\r\nexport abstract class AbstractScene {\r\n /**\r\n * Stores the list of available parsers in the application.\r\n */\r\n private static _BabylonFileParsers: { [key: string]: BabylonFileParser } = {};\r\n\r\n /**\r\n * Stores the list of available individual parsers in the application.\r\n */\r\n private static _IndividualBabylonFileParsers: { [key: string]: IndividualBabylonFileParser } = {};\r\n\r\n /**\r\n * Adds a parser in the list of available ones\r\n * @param name Defines the name of the parser\r\n * @param parser Defines the parser to add\r\n */\r\n public static AddParser(name: string, parser: BabylonFileParser): void {\r\n this._BabylonFileParsers[name] = parser;\r\n }\r\n\r\n /**\r\n * Gets a general parser from the list of available ones\r\n * @param name Defines the name of the parser\r\n * @returns the requested parser or null\r\n */\r\n public static GetParser(name: string): Nullable<BabylonFileParser> {\r\n if (this._BabylonFileParsers[name]) {\r\n return this._BabylonFileParsers[name];\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Adds n individual parser in the list of available ones\r\n * @param name Defines the name of the parser\r\n * @param parser Defines the parser to add\r\n */\r\n public static AddIndividualParser(name: string, parser: IndividualBabylonFileParser): void {\r\n this._IndividualBabylonFileParsers[name] = parser;\r\n }\r\n\r\n /**\r\n * Gets an individual parser from the list of available ones\r\n * @param name Defines the name of the parser\r\n * @returns the requested parser or null\r\n */\r\n public static GetIndividualParser(name: string): Nullable<IndividualBabylonFileParser> {\r\n if (this._IndividualBabylonFileParsers[name]) {\r\n return this._IndividualBabylonFileParsers[name];\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Parser json data and populate both a scene and its associated container object\r\n * @param jsonData Defines the data to parse\r\n * @param scene Defines the scene to parse the data for\r\n * @param container Defines the container attached to the parsing sequence\r\n * @param rootUrl Defines the root url of the data\r\n */\r\n public static Parse(jsonData: any, scene: Scene, container: AssetContainer, rootUrl: string): void {\r\n for (const parserName in this._BabylonFileParsers) {\r\n if (Object.prototype.hasOwnProperty.call(this._BabylonFileParsers, parserName)) {\r\n this._BabylonFileParsers[parserName](jsonData, scene, container, rootUrl);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Gets the list of root nodes (ie. nodes with no parent)\r\n */\r\n public rootNodes: Node[] = [];\r\n\r\n /** All of the cameras added to this scene\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/cameras\r\n */\r\n public cameras: Camera[] = [];\r\n\r\n /**\r\n * All of the lights added to this scene\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/lights/lights_introduction\r\n */\r\n public lights: Light[] = [];\r\n\r\n /**\r\n * All of the (abstract) meshes added to this scene\r\n */\r\n public meshes: AbstractMesh[] = [];\r\n\r\n /**\r\n * The list of skeletons added to the scene\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/bonesSkeletons\r\n */\r\n public skeletons: Skeleton[] = [];\r\n\r\n /**\r\n * All of the particle systems added to this scene\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/particles/particle_system/particle_system_intro\r\n */\r\n public particleSystems: IParticleSystem[] = [];\r\n\r\n /**\r\n * Gets a list of Animations associated with the scene\r\n */\r\n public animations: Animation[] = [];\r\n\r\n /**\r\n * All of the animation groups added to this scene\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/animation/groupAnimations\r\n */\r\n public animationGroups: AnimationGroup[] = [];\r\n\r\n /**\r\n * All of the multi-materials added to this scene\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/multiMaterials\r\n */\r\n public multiMaterials: MultiMaterial[] = [];\r\n\r\n /**\r\n * All of the materials added to this scene\r\n * In the context of a Scene, it is not supposed to be modified manually.\r\n * Any addition or removal should be done using the addMaterial and removeMaterial Scene methods.\r\n * Note also that the order of the Material within the array is not significant and might change.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/materials_introduction\r\n */\r\n public materials: Material[] = [];\r\n\r\n /**\r\n * The list of morph target managers added to the scene\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/dynamicMeshMorph\r\n */\r\n public morphTargetManagers: MorphTargetManager[] = [];\r\n\r\n /**\r\n * The list of geometries used in the scene.\r\n */\r\n public geometries: Geometry[] = [];\r\n\r\n /**\r\n * All of the transform nodes added to this scene\r\n * In the context of a Scene, it is not supposed to be modified manually.\r\n * Any addition or removal should be done using the addTransformNode and removeTransformNode Scene methods.\r\n * Note also that the order of the TransformNode within the array is not significant and might change.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/transforms/parent_pivot/transform_node\r\n */\r\n public transformNodes: TransformNode[] = [];\r\n\r\n /**\r\n * ActionManagers available on the scene.\r\n * @deprecated\r\n */\r\n public actionManagers: AbstractActionManager[] = [];\r\n\r\n /**\r\n * Textures to keep.\r\n */\r\n public textures: BaseTexture[] = [];\r\n\r\n /** @internal */\r\n protected _environmentTexture: Nullable<BaseTexture> = null;\r\n /**\r\n * Texture used in all pbr material as the reflection texture.\r\n * As in the majority of the scene they are the same (exception for multi room and so on),\r\n * this is easier to reference from here than from all the materials.\r\n */\r\n public get environmentTexture(): Nullable<BaseTexture> {\r\n return this._environmentTexture;\r\n }\r\n\r\n public set environmentTexture(value: Nullable<BaseTexture>) {\r\n this._environmentTexture = value;\r\n }\r\n\r\n /**\r\n * The list of postprocesses added to the scene\r\n */\r\n public postProcesses: PostProcess[] = [];\r\n\r\n /**\r\n * @returns all meshes, lights, cameras, transformNodes and bones\r\n */\r\n public getNodes(): Array<Node> {\r\n let nodes: Node[] = [];\r\n nodes = nodes.concat(this.meshes);\r\n nodes = nodes.concat(this.lights);\r\n nodes = nodes.concat(this.cameras);\r\n nodes = nodes.concat(this.transformNodes); // dummies\r\n this.skeletons.forEach((skeleton) => (nodes = nodes.concat(skeleton.bones)));\r\n return nodes;\r\n }\r\n}\r\n"]}
|