@babylonjs/core 8.13.1 → 8.14.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (215) hide show
  1. package/AudioV2/abstractAudio/index.js +1 -1
  2. package/AudioV2/abstractAudio/index.js.map +1 -1
  3. package/AudioV2/audioUtils.js +12 -3
  4. package/AudioV2/audioUtils.js.map +1 -1
  5. package/AudioV2/index.js +1 -1
  6. package/AudioV2/index.js.map +1 -1
  7. package/Behaviors/index.js +1 -1
  8. package/Behaviors/index.js.map +1 -1
  9. package/Cameras/index.js +1 -1
  10. package/Cameras/index.js.map +1 -1
  11. package/Culling/index.js +1 -1
  12. package/Culling/index.js.map +1 -1
  13. package/Debug/skeletonViewer.d.ts +1 -1
  14. package/Debug/skeletonViewer.js.map +1 -1
  15. package/Engines/Processors/Expressions/index.js +1 -1
  16. package/Engines/Processors/Expressions/index.js.map +1 -1
  17. package/Engines/Processors/index.js +1 -1
  18. package/Engines/Processors/index.js.map +1 -1
  19. package/Engines/abstractEngine.js +2 -2
  20. package/Engines/abstractEngine.js.map +1 -1
  21. package/Engines/engine.d.ts +1 -1
  22. package/Engines/index.js +1 -1
  23. package/Engines/index.js.map +1 -1
  24. package/FlowGraph/Blocks/Data/index.js +3 -3
  25. package/FlowGraph/Blocks/Data/index.js.map +1 -1
  26. package/FlowGraph/Blocks/Execution/index.js +2 -2
  27. package/FlowGraph/Blocks/Execution/index.js.map +1 -1
  28. package/FlowGraph/Blocks/index.js +1 -1
  29. package/FlowGraph/Blocks/index.js.map +1 -1
  30. package/FlowGraph/index.js +2 -2
  31. package/FlowGraph/index.js.map +1 -1
  32. package/FrameGraph/Node/Blocks/Layers/glowLayerBlock.js.map +1 -1
  33. package/FrameGraph/Node/Blocks/Layers/highlightLayerBlock.js.map +1 -1
  34. package/FrameGraph/Node/Blocks/PostProcesses/anaglyphPostProcessBlock.js.map +1 -1
  35. package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.js.map +1 -1
  36. package/FrameGraph/Node/Blocks/PostProcesses/blackAndWhitePostProcessBlock.js.map +1 -1
  37. package/FrameGraph/Node/Blocks/PostProcesses/bloomPostProcessBlock.js.map +1 -1
  38. package/FrameGraph/Node/Blocks/PostProcesses/blurPostProcessBlock.js.map +1 -1
  39. package/FrameGraph/Node/Blocks/PostProcesses/chromaticAberrationPostProcessBlock.js.map +1 -1
  40. package/FrameGraph/Node/Blocks/PostProcesses/circleOfConfusionPostProcessBlock.js.map +1 -1
  41. package/FrameGraph/Node/Blocks/PostProcesses/depthOfFieldPostProcessBlock.js.map +1 -1
  42. package/FrameGraph/Node/Blocks/PostProcesses/extractHighlightsPostProcessBlock.js.map +1 -1
  43. package/FrameGraph/Node/Blocks/PostProcesses/fxaaPostProcessBlock.js.map +1 -1
  44. package/FrameGraph/Node/Blocks/PostProcesses/grainPostProcessBlock.js.map +1 -1
  45. package/FrameGraph/Node/Blocks/PostProcesses/imageProcessingPostProcessBlock.js.map +1 -1
  46. package/FrameGraph/Node/Blocks/PostProcesses/motionBlurPostProcessBlock.js.map +1 -1
  47. package/FrameGraph/Node/Blocks/PostProcesses/passPostProcessBlock.js.map +1 -1
  48. package/FrameGraph/Node/Blocks/PostProcesses/ssrPostProcessBlock.js.map +1 -1
  49. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
  50. package/FrameGraph/Node/Blocks/Rendering/baseShadowGeneratorBlock.js.map +1 -1
  51. package/FrameGraph/Node/Blocks/Rendering/csmShadowGeneratorBlock.js.map +1 -1
  52. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.js.map +1 -1
  53. package/FrameGraph/Node/Blocks/Rendering/objectRendererBlock.js.map +1 -1
  54. package/FrameGraph/Node/Blocks/Rendering/shadowGeneratorBlock.js.map +1 -1
  55. package/FrameGraph/Node/Blocks/Rendering/taaObjectRendererBlock.js.map +1 -1
  56. package/FrameGraph/Node/Blocks/Rendering/utilityLayerRendererBlock.js.map +1 -1
  57. package/FrameGraph/Node/Blocks/Teleport/teleportInBlock.js.map +1 -1
  58. package/FrameGraph/Node/Blocks/Teleport/teleportOutBlock.js.map +1 -1
  59. package/FrameGraph/Node/Blocks/Textures/clearBlock.js.map +1 -1
  60. package/FrameGraph/Node/Blocks/Textures/copyTextureBlock.js.map +1 -1
  61. package/FrameGraph/Node/Blocks/Textures/generateMipmapsBlock.js.map +1 -1
  62. package/FrameGraph/Node/Blocks/cullObjectsBlock.js.map +1 -1
  63. package/FrameGraph/Node/Blocks/elbowBlock.js.map +1 -1
  64. package/FrameGraph/Node/Blocks/executeBlock.js.map +1 -1
  65. package/FrameGraph/Node/Blocks/inputBlock.js.map +1 -1
  66. package/FrameGraph/Node/Blocks/outputBlock.js.map +1 -1
  67. package/FrameGraph/Node/Blocks/resourceContainerBlock.js.map +1 -1
  68. package/FrameGraph/Node/Types/nodeRenderGraphTypes.js.map +1 -1
  69. package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
  70. package/FrameGraph/Node/nodeRenderGraphBlock.js.map +1 -1
  71. package/FrameGraph/Node/nodeRenderGraphBlockConnectionPoint.js.map +1 -1
  72. package/FrameGraph/Node/nodeRenderGraphBuildState.js.map +1 -1
  73. package/FrameGraph/Node/nodeRenderGraphConnectionPointCustomObject.js.map +1 -1
  74. package/FrameGraph/Passes/cullPass.js.map +1 -1
  75. package/FrameGraph/Passes/pass.js.map +1 -1
  76. package/FrameGraph/Passes/renderPass.js.map +1 -1
  77. package/FrameGraph/Tasks/Layers/baseLayerTask.js.map +1 -1
  78. package/FrameGraph/Tasks/Layers/glowLayerTask.js.map +1 -1
  79. package/FrameGraph/Tasks/Layers/highlightLayerTask.js.map +1 -1
  80. package/FrameGraph/Tasks/Misc/cullObjectsTask.js.map +1 -1
  81. package/FrameGraph/Tasks/Misc/executeTask.js.map +1 -1
  82. package/FrameGraph/Tasks/PostProcesses/anaglyphTask.js.map +1 -1
  83. package/FrameGraph/Tasks/PostProcesses/bloomMergeTask.js.map +1 -1
  84. package/FrameGraph/Tasks/PostProcesses/bloomTask.js.map +1 -1
  85. package/FrameGraph/Tasks/PostProcesses/blurTask.js.map +1 -1
  86. package/FrameGraph/Tasks/PostProcesses/chromaticAberrationTask.js.map +1 -1
  87. package/FrameGraph/Tasks/PostProcesses/circleOfConfusionTask.js.map +1 -1
  88. package/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.js.map +1 -1
  89. package/FrameGraph/Tasks/PostProcesses/depthOfFieldMergeTask.js.map +1 -1
  90. package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.js.map +1 -1
  91. package/FrameGraph/Tasks/PostProcesses/extractHighlightsTask.js.map +1 -1
  92. package/FrameGraph/Tasks/PostProcesses/fxaaTask.js.map +1 -1
  93. package/FrameGraph/Tasks/PostProcesses/imageProcessingTask.js.map +1 -1
  94. package/FrameGraph/Tasks/PostProcesses/motionBlurTask.js.map +1 -1
  95. package/FrameGraph/Tasks/PostProcesses/postProcessTask.js.map +1 -1
  96. package/FrameGraph/Tasks/PostProcesses/ssrBlurTask.js.map +1 -1
  97. package/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.js.map +1 -1
  98. package/FrameGraph/Tasks/PostProcesses/ssrTask.js.map +1 -1
  99. package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js.map +1 -1
  100. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
  101. package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
  102. package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.js.map +1 -1
  103. package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.js.map +1 -1
  104. package/FrameGraph/Tasks/Rendering/utilityLayerRendererTask.js.map +1 -1
  105. package/FrameGraph/Tasks/Texture/clearTextureTask.js.map +1 -1
  106. package/FrameGraph/Tasks/Texture/copyToBackbufferColorTask.js.map +1 -1
  107. package/FrameGraph/Tasks/Texture/copyToTextureTask.js.map +1 -1
  108. package/FrameGraph/Tasks/Texture/generateMipMapsTask.js.map +1 -1
  109. package/FrameGraph/frameGraph.js.map +1 -1
  110. package/FrameGraph/frameGraphContext.js.map +1 -1
  111. package/FrameGraph/frameGraphObjectList.js.map +1 -1
  112. package/FrameGraph/frameGraphRenderContext.js.map +1 -1
  113. package/FrameGraph/frameGraphRenderTarget.js.map +1 -1
  114. package/FrameGraph/frameGraphTask.js.map +1 -1
  115. package/FrameGraph/frameGraphTextureManager.js.map +1 -1
  116. package/FrameGraph/frameGraphTypes.js.map +1 -1
  117. package/FrameGraph/index.js +1 -1
  118. package/FrameGraph/index.js.map +1 -1
  119. package/Layers/thinHighlightLayer.js.map +1 -1
  120. package/Legacy/legacy.js +1 -1
  121. package/Legacy/legacy.js.map +1 -1
  122. package/Lights/index.js +1 -1
  123. package/Lights/index.js.map +1 -1
  124. package/Loading/index.js +1 -1
  125. package/Loading/index.js.map +1 -1
  126. package/Materials/Node/Blocks/index.js +1 -1
  127. package/Materials/Node/Blocks/index.js.map +1 -1
  128. package/Materials/Node/index.js +1 -1
  129. package/Materials/Node/index.js.map +1 -1
  130. package/Materials/Textures/Loaders/index.js +1 -1
  131. package/Materials/Textures/Loaders/index.js.map +1 -1
  132. package/Materials/Textures/index.js +1 -1
  133. package/Materials/Textures/index.js.map +1 -1
  134. package/Materials/index.js +1 -1
  135. package/Materials/index.js.map +1 -1
  136. package/Materials/materialHelper.geometryrendering.js.map +1 -1
  137. package/Maths/index.js +1 -1
  138. package/Maths/index.js.map +1 -1
  139. package/Meshes/abstractMesh.hotSpot.js.map +1 -1
  140. package/Meshes/index.js +1 -1
  141. package/Meshes/index.js.map +1 -1
  142. package/Meshes/linesMesh.d.ts +7 -0
  143. package/Meshes/linesMesh.js +13 -0
  144. package/Meshes/linesMesh.js.map +1 -1
  145. package/Misc/index.js +1 -1
  146. package/Misc/index.js.map +1 -1
  147. package/Misc/pressureObserverWrapper.js +4 -1
  148. package/Misc/pressureObserverWrapper.js.map +1 -1
  149. package/Misc/snapshotRenderingHelper.js.map +1 -1
  150. package/Misc/thinMinMaxReducer.js.map +1 -1
  151. package/Navigation/index.js +1 -1
  152. package/Navigation/index.js.map +1 -1
  153. package/Particles/IParticleSystem.js.map +1 -1
  154. package/Particles/Node/Blocks/index.d.ts +0 -1
  155. package/Particles/Node/Blocks/index.js +1 -2
  156. package/Particles/Node/Blocks/index.js.map +1 -1
  157. package/Particles/Node/Blocks/particleGradientBlock.d.ts +3 -0
  158. package/Particles/Node/Blocks/particleGradientBlock.js +20 -4
  159. package/Particles/Node/Blocks/particleGradientBlock.js.map +1 -1
  160. package/Particles/Node/Blocks/particleRandomBlock.js +1 -1
  161. package/Particles/Node/Blocks/particleRandomBlock.js.map +1 -1
  162. package/Particles/Node/index.js +1 -1
  163. package/Particles/Node/index.js.map +1 -1
  164. package/Particles/Node/nodeParticleSystemSet.d.ts +2 -2
  165. package/Particles/Node/nodeParticleSystemSet.js +2 -2
  166. package/Particles/Node/nodeParticleSystemSet.js.map +1 -1
  167. package/Particles/baseParticleSystem.js.map +1 -1
  168. package/Particles/gpuParticleSystem.js +5 -0
  169. package/Particles/gpuParticleSystem.js.map +1 -1
  170. package/Particles/index.js +1 -1
  171. package/Particles/index.js.map +1 -1
  172. package/Particles/thinParticleSystem.js.map +1 -1
  173. package/Physics/index.js +1 -1
  174. package/Physics/index.js.map +1 -1
  175. package/Physics/v1/index.js +1 -1
  176. package/Physics/v1/index.js.map +1 -1
  177. package/Physics/v2/index.js +2 -2
  178. package/Physics/v2/index.js.map +1 -1
  179. package/PostProcesses/RenderPipeline/Pipelines/thinSSRRenderingPipeline.js.map +1 -1
  180. package/PostProcesses/RenderPipeline/index.js +1 -1
  181. package/PostProcesses/RenderPipeline/index.js.map +1 -1
  182. package/PostProcesses/index.js +1 -1
  183. package/PostProcesses/index.js.map +1 -1
  184. package/PostProcesses/thinAnaglyphPostProcess.js.map +1 -1
  185. package/PostProcesses/thinBlackAndWhitePostProcess.js.map +1 -1
  186. package/PostProcesses/thinBloomEffect.js.map +1 -1
  187. package/PostProcesses/thinBloomMergePostProcess.js.map +1 -1
  188. package/PostProcesses/thinBlurPostProcess.js.map +1 -1
  189. package/PostProcesses/thinChromaticAberrationPostProcess.js.map +1 -1
  190. package/PostProcesses/thinCircleOfConfusionPostProcess.js.map +1 -1
  191. package/PostProcesses/thinDepthOfFieldBlurPostProcess.js.map +1 -1
  192. package/PostProcesses/thinDepthOfFieldMergePostProcess.js.map +1 -1
  193. package/PostProcesses/thinExtractHighlightsPostProcess.js.map +1 -1
  194. package/PostProcesses/thinFXAAPostProcess.js.map +1 -1
  195. package/PostProcesses/thinGrainPostProcess.js.map +1 -1
  196. package/PostProcesses/thinImageProcessingPostProcess.js.map +1 -1
  197. package/PostProcesses/thinMotionBlurPostProcess.js.map +1 -1
  198. package/PostProcesses/thinPassPostProcess.js.map +1 -1
  199. package/PostProcesses/thinSSRBlurCombinerPostProcess.js.map +1 -1
  200. package/PostProcesses/thinSSRBlurPostProcess.js.map +1 -1
  201. package/PostProcesses/thinSSRPostProcess.js.map +1 -1
  202. package/PostProcesses/thinTAAPostProcess.js.map +1 -1
  203. package/Rendering/IBLShadows/iblShadowsPluginMaterial.js +1 -4
  204. package/Rendering/IBLShadows/iblShadowsPluginMaterial.js.map +1 -1
  205. package/Rendering/index.js +1 -1
  206. package/Rendering/index.js.map +1 -1
  207. package/Rendering/objectRenderer.js.map +1 -1
  208. package/XR/index.js +1 -1
  209. package/XR/index.js.map +1 -1
  210. package/index.js +1 -1
  211. package/index.js.map +1 -1
  212. package/package.json +1 -1
  213. package/Particles/Node/Blocks/randomRangeBlock.d.ts +0 -45
  214. package/Particles/Node/Blocks/randomRangeBlock.js +0 -151
  215. package/Particles/Node/Blocks/randomRangeBlock.js.map +0 -1
@@ -1,8 +1,7 @@
1
- /* eslint-disable import/no-internal-modules */
1
+ /* eslint-disable @typescript-eslint/no-restricted-imports */
2
2
  export * from "./systemBlock.js";
3
3
  export * from "./particleInputBlock.js";
4
4
  export * from "./particleSourceTextureBlock.js";
5
- export * from "./randomRangeBlock.js";
6
5
  export * from "./particleMathBlock.js";
7
6
  export * from "./particleLerpBlock.js";
8
7
  export * from "./Update/updateDirectionBlock.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Particles/Node/Blocks/index.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mCAAmC,CAAC;AAClD,cAAc,iCAAiC,CAAC;AAChD,cAAc,qCAAqC,CAAC;AACpD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kBAAkB,CAAC;AACjC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oCAAoC,CAAC;AACnD,cAAc,qCAAqC,CAAC;AACpD,cAAc,qCAAqC,CAAC;AACpD,cAAc,iCAAiC,CAAC","sourcesContent":["/* eslint-disable import/no-internal-modules */\r\nexport * from \"./systemBlock\";\r\nexport * from \"./particleInputBlock\";\r\nexport * from \"./particleSourceTextureBlock\";\r\nexport * from \"./randomRangeBlock\";\r\nexport * from \"./particleMathBlock\";\r\nexport * from \"./particleLerpBlock\";\r\nexport * from \"./Update/updateDirectionBlock\";\r\nexport * from \"./Update/updatePositionBlock\";\r\nexport * from \"./Update/updateColorBlock\";\r\nexport * from \"./Update/updateScaleBlock\";\r\nexport * from \"./Update/updateAngleBlock\";\r\nexport * from \"./Update/basicPositionUpdateBlock\";\r\nexport * from \"./Update/basicSpriteUpdateBlock\";\r\nexport * from \"./Update/updateSpriteCellIndexBlock\";\r\nexport * from \"./Update/updateFlowMapBlock\";\r\nexport * from \"./Emitters/index\";\r\nexport * from \"./particleGradientValueBlock\";\r\nexport * from \"./particleGradientBlock\";\r\nexport * from \"./particleConverterBlock\";\r\nexport * from \"./particleTrigonometryBlock\";\r\nexport * from \"./particleRandomBlock\";\r\nexport * from \"./particleDebugBlock\";\r\nexport * from \"./particleElbowBlock\";\r\nexport * from \"./Teleport/particleTeleportInBlock\";\r\nexport * from \"./Teleport/particleTeleportOutBlock\";\r\nexport * from \"./Conditions/particleConditionBlock\";\r\nexport * from \"./Triggers/particleTriggerBlock\";\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Particles/Node/Blocks/index.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mCAAmC,CAAC;AAClD,cAAc,iCAAiC,CAAC;AAChD,cAAc,qCAAqC,CAAC;AACpD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kBAAkB,CAAC;AACjC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oCAAoC,CAAC;AACnD,cAAc,qCAAqC,CAAC;AACpD,cAAc,qCAAqC,CAAC;AACpD,cAAc,iCAAiC,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/no-restricted-imports */\r\nexport * from \"./systemBlock\";\r\nexport * from \"./particleInputBlock\";\r\nexport * from \"./particleSourceTextureBlock\";\r\nexport * from \"./particleMathBlock\";\r\nexport * from \"./particleLerpBlock\";\r\nexport * from \"./Update/updateDirectionBlock\";\r\nexport * from \"./Update/updatePositionBlock\";\r\nexport * from \"./Update/updateColorBlock\";\r\nexport * from \"./Update/updateScaleBlock\";\r\nexport * from \"./Update/updateAngleBlock\";\r\nexport * from \"./Update/basicPositionUpdateBlock\";\r\nexport * from \"./Update/basicSpriteUpdateBlock\";\r\nexport * from \"./Update/updateSpriteCellIndexBlock\";\r\nexport * from \"./Update/updateFlowMapBlock\";\r\nexport * from \"./Emitters/index\";\r\nexport * from \"./particleGradientValueBlock\";\r\nexport * from \"./particleGradientBlock\";\r\nexport * from \"./particleConverterBlock\";\r\nexport * from \"./particleTrigonometryBlock\";\r\nexport * from \"./particleRandomBlock\";\r\nexport * from \"./particleDebugBlock\";\r\nexport * from \"./particleElbowBlock\";\r\nexport * from \"./Teleport/particleTeleportInBlock\";\r\nexport * from \"./Teleport/particleTeleportOutBlock\";\r\nexport * from \"./Conditions/particleConditionBlock\";\r\nexport * from \"./Triggers/particleTriggerBlock\";\r\n"]}
@@ -10,6 +10,7 @@ export declare class ParticleGradientBlock extends NodeParticleBlock {
10
10
  * @param name defines the block name
11
11
  */
12
12
  constructor(name: string);
13
+ private _extend;
13
14
  private _manageExtendedInputs;
14
15
  /**
15
16
  * Gets the current class name
@@ -25,4 +26,6 @@ export declare class ParticleGradientBlock extends NodeParticleBlock {
25
26
  */
26
27
  get output(): NodeParticleConnectionPoint;
27
28
  _build(): void;
29
+ serialize(): any;
30
+ _deserialize(serializationObject: any): void;
28
31
  }
@@ -38,15 +38,18 @@ export class ParticleGradientBlock extends NodeParticleBlock {
38
38
  NodeParticleBlockConnectionPointTypes.Color4Gradient);
39
39
  this._manageExtendedInputs(1);
40
40
  }
41
+ _extend() {
42
+ this._entryCount++;
43
+ this.registerInput("value" + (this._entryCount - 1), NodeParticleBlockConnectionPointTypes.AutoDetect, true);
44
+ this._linkConnectionTypes(1, this._entryCount);
45
+ this._manageExtendedInputs(this._entryCount);
46
+ }
41
47
  _manageExtendedInputs(index) {
42
48
  this._inputs[index].onConnectionObservable.add(() => {
43
49
  if (this._entryCount > index) {
44
50
  return;
45
51
  }
46
- this._entryCount++;
47
- this.registerInput("value" + (this._entryCount - 1), NodeParticleBlockConnectionPointTypes.AutoDetect, true);
48
- this._linkConnectionTypes(1, this._entryCount);
49
- this._manageExtendedInputs(this._entryCount);
52
+ this._extend();
50
53
  });
51
54
  }
52
55
  /**
@@ -113,6 +116,19 @@ export class ParticleGradientBlock extends NodeParticleBlock {
113
116
  return 0;
114
117
  };
115
118
  }
119
+ serialize() {
120
+ const serializationObject = super.serialize();
121
+ serializationObject._entryCount = this._entryCount;
122
+ return serializationObject;
123
+ }
124
+ _deserialize(serializationObject) {
125
+ super._deserialize(serializationObject);
126
+ if (serializationObject._entryCount && serializationObject._entryCount > 1) {
127
+ for (let i = 1; i < serializationObject._entryCount; i++) {
128
+ this._extend();
129
+ }
130
+ }
131
+ }
116
132
  }
117
133
  RegisterClass("BABYLON.ParticleGradientBlock", ParticleGradientBlock);
118
134
  //# sourceMappingURL=particleGradientBlock.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"particleGradientBlock.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Particles/Node/Blocks/particleGradientBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { RegisterClass } from \"../../../Misc/typeStore\";\r\nimport { NodeParticleBlock } from \"../nodeParticleBlock\";\r\nimport { NodeParticleBlockConnectionPointTypes } from \"../Enums/nodeParticleBlockConnectionPointTypes\";\r\nimport type { NodeParticleConnectionPoint } from \"../nodeParticleBlockConnectionPoint\";\r\nimport type { ParticleGradientValueBlock } from \"./particleGradientValueBlock\";\r\nimport type { Nullable } from \"core/types\";\r\nimport { Lerp } from \"core/Maths/math.scalar.functions\";\r\nimport { Color4 } from \"core/Maths/math.color\";\r\nimport { Vector2, Vector3 } from \"core/Maths/math.vector\";\r\n/**\r\n * Block used to define a list of gradient entries\r\n */\r\nexport class ParticleGradientBlock extends NodeParticleBlock {\r\n private _entryCount = 1;\r\n /**\r\n * Creates a new ParticleGradientBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name);\r\n\r\n this.registerInput(\"gradient\", NodeParticleBlockConnectionPointTypes.Float, true, 1, 0, 1);\r\n this.registerInput(\"value0\", NodeParticleBlockConnectionPointTypes.AutoDetect);\r\n this.registerOutput(\"output\", NodeParticleBlockConnectionPointTypes.BasedOnInput);\r\n\r\n this._outputs[0]._typeConnectionSource = this._inputs[1];\r\n this._outputs[0]._typeConnectionSourceTranslation = (type) => {\r\n switch (type) {\r\n case NodeParticleBlockConnectionPointTypes.FloatGradient:\r\n return NodeParticleBlockConnectionPointTypes.Float;\r\n case NodeParticleBlockConnectionPointTypes.Vector2Gradient:\r\n return NodeParticleBlockConnectionPointTypes.Vector2;\r\n case NodeParticleBlockConnectionPointTypes.Vector3Gradient:\r\n return NodeParticleBlockConnectionPointTypes.Vector3;\r\n case NodeParticleBlockConnectionPointTypes.Color4Gradient:\r\n return NodeParticleBlockConnectionPointTypes.Color4;\r\n }\r\n return type;\r\n };\r\n\r\n this._inputs[1].addExcludedConnectionPointFromAllowedTypes(\r\n NodeParticleBlockConnectionPointTypes.FloatGradient |\r\n NodeParticleBlockConnectionPointTypes.Vector2Gradient |\r\n NodeParticleBlockConnectionPointTypes.Vector3Gradient |\r\n NodeParticleBlockConnectionPointTypes.Color4Gradient\r\n );\r\n\r\n this._manageExtendedInputs(1);\r\n }\r\n\r\n private _manageExtendedInputs(index: number) {\r\n this._inputs[index].onConnectionObservable.add(() => {\r\n if (this._entryCount > index) {\r\n return;\r\n }\r\n this._entryCount++;\r\n this.registerInput(\"value\" + (this._entryCount - 1), NodeParticleBlockConnectionPointTypes.AutoDetect, true);\r\n this._linkConnectionTypes(1, this._entryCount);\r\n\r\n this._manageExtendedInputs(this._entryCount);\r\n });\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"ParticleGradientBlock\";\r\n }\r\n\r\n /**\r\n * Gets the gradient operand input component\r\n */\r\n public get gradient(): NodeParticleConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the output component\r\n */\r\n public get output(): NodeParticleConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n public override _build() {\r\n // Building the list of entries in order\r\n const entries: ParticleGradientValueBlock[] = [];\r\n for (let i = 1; i < this._inputs.length; i++) {\r\n if (this._inputs[i].isConnected) {\r\n entries.push(this._inputs[i].connectedPoint?.ownerBlock as ParticleGradientValueBlock);\r\n }\r\n }\r\n\r\n entries.sort((a, b) => {\r\n return a.reference - b.reference;\r\n });\r\n\r\n this.output._storedFunction = (state) => {\r\n const gradient = this.gradient.getConnectedValue(state);\r\n\r\n if (entries.length === 1) {\r\n return entries[0].value.getConnectedValue(state);\r\n }\r\n\r\n // Go down the entries list in reverse order\r\n let nextEntry: Nullable<ParticleGradientValueBlock> = null;\r\n for (let i = entries.length - 1; i >= 0; i--) {\r\n const entry = entries[i];\r\n if (entry.reference <= gradient) {\r\n const currentValue = entry.value.getConnectedValue(state);\r\n if (nextEntry) {\r\n const nextValue = nextEntry.value.getConnectedValue(state);\r\n const nextReference = nextEntry.reference;\r\n const currentReference = entry.reference;\r\n const scale = Math.max(0, Math.min(1, (gradient - currentReference) / (nextReference - currentReference)));\r\n\r\n switch (this.output.type) {\r\n case NodeParticleBlockConnectionPointTypes.Float:\r\n return Lerp(currentValue, nextValue, scale);\r\n case NodeParticleBlockConnectionPointTypes.Vector2:\r\n return Vector2.Lerp(currentValue, nextValue, scale);\r\n case NodeParticleBlockConnectionPointTypes.Vector3:\r\n return Vector3.Lerp(currentValue, nextValue, scale);\r\n case NodeParticleBlockConnectionPointTypes.Color4:\r\n return Color4.Lerp(currentValue, nextValue, scale);\r\n }\r\n }\r\n return currentValue;\r\n }\r\n\r\n nextEntry = entry;\r\n }\r\n\r\n return 0;\r\n };\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.ParticleGradientBlock\", ParticleGradientBlock);\r\n"]}
1
+ {"version":3,"file":"particleGradientBlock.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Particles/Node/Blocks/particleGradientBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { RegisterClass } from \"../../../Misc/typeStore\";\r\nimport { NodeParticleBlock } from \"../nodeParticleBlock\";\r\nimport { NodeParticleBlockConnectionPointTypes } from \"../Enums/nodeParticleBlockConnectionPointTypes\";\r\nimport type { NodeParticleConnectionPoint } from \"../nodeParticleBlockConnectionPoint\";\r\nimport type { ParticleGradientValueBlock } from \"./particleGradientValueBlock\";\r\nimport type { Nullable } from \"core/types\";\r\nimport { Lerp } from \"core/Maths/math.scalar.functions\";\r\nimport { Color4 } from \"core/Maths/math.color\";\r\nimport { Vector2, Vector3 } from \"core/Maths/math.vector\";\r\n/**\r\n * Block used to define a list of gradient entries\r\n */\r\nexport class ParticleGradientBlock extends NodeParticleBlock {\r\n private _entryCount = 1;\r\n /**\r\n * Creates a new ParticleGradientBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name);\r\n\r\n this.registerInput(\"gradient\", NodeParticleBlockConnectionPointTypes.Float, true, 1, 0, 1);\r\n this.registerInput(\"value0\", NodeParticleBlockConnectionPointTypes.AutoDetect);\r\n this.registerOutput(\"output\", NodeParticleBlockConnectionPointTypes.BasedOnInput);\r\n\r\n this._outputs[0]._typeConnectionSource = this._inputs[1];\r\n this._outputs[0]._typeConnectionSourceTranslation = (type) => {\r\n switch (type) {\r\n case NodeParticleBlockConnectionPointTypes.FloatGradient:\r\n return NodeParticleBlockConnectionPointTypes.Float;\r\n case NodeParticleBlockConnectionPointTypes.Vector2Gradient:\r\n return NodeParticleBlockConnectionPointTypes.Vector2;\r\n case NodeParticleBlockConnectionPointTypes.Vector3Gradient:\r\n return NodeParticleBlockConnectionPointTypes.Vector3;\r\n case NodeParticleBlockConnectionPointTypes.Color4Gradient:\r\n return NodeParticleBlockConnectionPointTypes.Color4;\r\n }\r\n return type;\r\n };\r\n\r\n this._inputs[1].addExcludedConnectionPointFromAllowedTypes(\r\n NodeParticleBlockConnectionPointTypes.FloatGradient |\r\n NodeParticleBlockConnectionPointTypes.Vector2Gradient |\r\n NodeParticleBlockConnectionPointTypes.Vector3Gradient |\r\n NodeParticleBlockConnectionPointTypes.Color4Gradient\r\n );\r\n\r\n this._manageExtendedInputs(1);\r\n }\r\n\r\n private _extend() {\r\n this._entryCount++;\r\n this.registerInput(\"value\" + (this._entryCount - 1), NodeParticleBlockConnectionPointTypes.AutoDetect, true);\r\n this._linkConnectionTypes(1, this._entryCount);\r\n\r\n this._manageExtendedInputs(this._entryCount);\r\n }\r\n\r\n private _manageExtendedInputs(index: number) {\r\n this._inputs[index].onConnectionObservable.add(() => {\r\n if (this._entryCount > index) {\r\n return;\r\n }\r\n\r\n this._extend();\r\n });\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"ParticleGradientBlock\";\r\n }\r\n\r\n /**\r\n * Gets the gradient operand input component\r\n */\r\n public get gradient(): NodeParticleConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the output component\r\n */\r\n public get output(): NodeParticleConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n public override _build() {\r\n // Building the list of entries in order\r\n const entries: ParticleGradientValueBlock[] = [];\r\n for (let i = 1; i < this._inputs.length; i++) {\r\n if (this._inputs[i].isConnected) {\r\n entries.push(this._inputs[i].connectedPoint?.ownerBlock as ParticleGradientValueBlock);\r\n }\r\n }\r\n\r\n entries.sort((a, b) => {\r\n return a.reference - b.reference;\r\n });\r\n\r\n this.output._storedFunction = (state) => {\r\n const gradient = this.gradient.getConnectedValue(state);\r\n\r\n if (entries.length === 1) {\r\n return entries[0].value.getConnectedValue(state);\r\n }\r\n\r\n // Go down the entries list in reverse order\r\n let nextEntry: Nullable<ParticleGradientValueBlock> = null;\r\n for (let i = entries.length - 1; i >= 0; i--) {\r\n const entry = entries[i];\r\n if (entry.reference <= gradient) {\r\n const currentValue = entry.value.getConnectedValue(state);\r\n if (nextEntry) {\r\n const nextValue = nextEntry.value.getConnectedValue(state);\r\n const nextReference = nextEntry.reference;\r\n const currentReference = entry.reference;\r\n const scale = Math.max(0, Math.min(1, (gradient - currentReference) / (nextReference - currentReference)));\r\n\r\n switch (this.output.type) {\r\n case NodeParticleBlockConnectionPointTypes.Float:\r\n return Lerp(currentValue, nextValue, scale);\r\n case NodeParticleBlockConnectionPointTypes.Vector2:\r\n return Vector2.Lerp(currentValue, nextValue, scale);\r\n case NodeParticleBlockConnectionPointTypes.Vector3:\r\n return Vector3.Lerp(currentValue, nextValue, scale);\r\n case NodeParticleBlockConnectionPointTypes.Color4:\r\n return Color4.Lerp(currentValue, nextValue, scale);\r\n }\r\n }\r\n return currentValue;\r\n }\r\n\r\n nextEntry = entry;\r\n }\r\n\r\n return 0;\r\n };\r\n }\r\n\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject._entryCount = this._entryCount;\r\n\r\n return serializationObject;\r\n }\r\n\r\n public override _deserialize(serializationObject: any) {\r\n super._deserialize(serializationObject);\r\n\r\n if (serializationObject._entryCount && serializationObject._entryCount > 1) {\r\n for (let i = 1; i < serializationObject._entryCount; i++) {\r\n this._extend();\r\n }\r\n }\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.ParticleGradientBlock\", ParticleGradientBlock);\r\n"]}
@@ -108,7 +108,7 @@ export class ParticleRandomBlock extends NodeParticleBlock {
108
108
  func = (state) => {
109
109
  const min = this.min.getConnectedValue(state) || new Color4(0, 0, 0, 0);
110
110
  const max = this.max.getConnectedValue(state) || new Color4(1, 1, 1, 1);
111
- return new Color4(min.x + Math.random() * (max.x - min.x), min.y + Math.random() * (max.y - min.y), min.z + Math.random() * (max.z - min.z), min.w + Math.random() * (max.w - min.w));
111
+ return new Color4(min.r + Math.random() * (max.r - min.r), min.g + Math.random() * (max.g - min.g), min.b + Math.random() * (max.b - min.b), min.a + Math.random() * (max.a - min.a));
112
112
  };
113
113
  break;
114
114
  }
@@ -1 +1 @@
1
- {"version":3,"file":"particleRandomBlock.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Particles/Node/Blocks/particleRandomBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { RegisterClass } from \"../../../Misc/typeStore\";\r\nimport { Vector2, Vector3 } from \"../../../Maths/math.vector\";\r\nimport type { Nullable } from \"../../../types\";\r\nimport { PropertyTypeForEdition, editableInPropertyPage } from \"core/Decorators/nodeDecorator\";\r\nimport { NodeParticleBlock } from \"../nodeParticleBlock\";\r\nimport { NodeParticleBlockConnectionPointTypes } from \"../Enums/nodeParticleBlockConnectionPointTypes\";\r\nimport type { NodeParticleConnectionPoint } from \"../nodeParticleBlockConnectionPoint\";\r\nimport type { NodeParticleBuildState } from \"../nodeParticleBuildState\";\r\nimport { Color4 } from \"core/Maths/math.color\";\r\n\r\n/**\r\n * Locks supported by the random block\r\n */\r\nexport enum ParticleRandomBlockLocks {\r\n /** None */\r\n None = 0,\r\n /** PerParticle */\r\n PerParticle = 1,\r\n /** PerSystem */\r\n PerSystem = 2,\r\n}\r\n\r\n/**\r\n * Block used to get a random number\r\n */\r\nexport class ParticleRandomBlock extends NodeParticleBlock {\r\n private _currentLockId = -2;\r\n /**\r\n * Gets or sets a value indicating if that block will lock its value for a specific event\r\n */\r\n @editableInPropertyPage(\"LockMode\", PropertyTypeForEdition.List, \"ADVANCED\", {\r\n notifiers: { rebuild: true },\r\n embedded: true,\r\n options: [\r\n { label: \"None\", value: ParticleRandomBlockLocks.None },\r\n { label: \"Per particle\", value: ParticleRandomBlockLocks.PerParticle },\r\n { label: \"Per system\", value: ParticleRandomBlockLocks.PerSystem },\r\n ],\r\n })\r\n public lockMode = ParticleRandomBlockLocks.PerParticle;\r\n\r\n /**\r\n * Create a new ParticleRandomBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name);\r\n\r\n this.registerInput(\"min\", NodeParticleBlockConnectionPointTypes.AutoDetect, true, 0);\r\n this.registerInput(\"max\", NodeParticleBlockConnectionPointTypes.AutoDetect, true, 1);\r\n\r\n this.registerOutput(\"output\", NodeParticleBlockConnectionPointTypes.BasedOnInput);\r\n\r\n this._inputs[0].addExcludedConnectionPointFromAllowedTypes(\r\n NodeParticleBlockConnectionPointTypes.Float |\r\n NodeParticleBlockConnectionPointTypes.Int |\r\n NodeParticleBlockConnectionPointTypes.Vector2 |\r\n NodeParticleBlockConnectionPointTypes.Vector3 |\r\n NodeParticleBlockConnectionPointTypes.Color4\r\n );\r\n this._inputs[1].addExcludedConnectionPointFromAllowedTypes(\r\n NodeParticleBlockConnectionPointTypes.Float |\r\n NodeParticleBlockConnectionPointTypes.Int |\r\n NodeParticleBlockConnectionPointTypes.Vector2 |\r\n NodeParticleBlockConnectionPointTypes.Vector3 |\r\n NodeParticleBlockConnectionPointTypes.Color4\r\n );\r\n\r\n this._outputs[0]._typeConnectionSource = this._inputs[0];\r\n this._outputs[0]._defaultConnectionPointType = NodeParticleBlockConnectionPointTypes.Float;\r\n this._linkConnectionTypes(0, 1);\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"ParticleRandomBlock\";\r\n }\r\n\r\n /**\r\n * Gets the min input component\r\n */\r\n public get min(): NodeParticleConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the max input component\r\n */\r\n public get max(): NodeParticleConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the geometry output component\r\n */\r\n public get output(): NodeParticleConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n public override _build() {\r\n let func: Nullable<(state: NodeParticleBuildState) => any> = null;\r\n this._currentLockId = -2;\r\n\r\n switch (this.min.type) {\r\n case NodeParticleBlockConnectionPointTypes.AutoDetect:\r\n case NodeParticleBlockConnectionPointTypes.Int:\r\n case NodeParticleBlockConnectionPointTypes.Float: {\r\n func = (state) => {\r\n const min = this.min.getConnectedValue(state) || 0;\r\n const max = this.max.getConnectedValue(state) || 1;\r\n return min + Math.random() * (max - min);\r\n };\r\n break;\r\n }\r\n case NodeParticleBlockConnectionPointTypes.Vector2: {\r\n func = (state) => {\r\n const min = this.min.getConnectedValue(state) || Vector2.Zero();\r\n const max = this.max.getConnectedValue(state) || Vector2.One();\r\n return new Vector2(min.x + Math.random() * (max.x - min.x), min.y + Math.random() * (max.y - min.y));\r\n };\r\n break;\r\n }\r\n case NodeParticleBlockConnectionPointTypes.Vector3: {\r\n func = (state) => {\r\n const min = this.min.getConnectedValue(state) || Vector3.Zero();\r\n const max = this.max.getConnectedValue(state) || Vector3.One();\r\n return new Vector3(min.x + Math.random() * (max.x - min.x), min.y + Math.random() * (max.y - min.y), min.z + Math.random() * (max.z - min.z));\r\n };\r\n break;\r\n }\r\n case NodeParticleBlockConnectionPointTypes.Color4: {\r\n func = (state) => {\r\n const min = this.min.getConnectedValue(state) || new Color4(0, 0, 0, 0);\r\n const max = this.max.getConnectedValue(state) || new Color4(1, 1, 1, 1);\r\n return new Color4(\r\n min.x + Math.random() * (max.x - min.x),\r\n min.y + Math.random() * (max.y - min.y),\r\n min.z + Math.random() * (max.z - min.z),\r\n min.w + Math.random() * (max.w - min.w)\r\n );\r\n };\r\n break;\r\n }\r\n }\r\n\r\n this.output._storedFunction = (state) => {\r\n let lockId = 0;\r\n\r\n switch (this.lockMode) {\r\n case ParticleRandomBlockLocks.PerParticle:\r\n lockId = state.particleContext?.id || -1;\r\n break;\r\n case ParticleRandomBlockLocks.PerSystem:\r\n lockId = state.buildId || 0;\r\n break;\r\n }\r\n\r\n if (this._currentLockId !== lockId) {\r\n if (this.lockMode !== ParticleRandomBlockLocks.None) {\r\n this._currentLockId = lockId;\r\n }\r\n this.output._storedValue = func!(state);\r\n }\r\n return this.output._storedValue;\r\n };\r\n }\r\n\r\n /**\r\n * Serializes this block in a JSON representation\r\n * @returns the serialized block object\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.lockMode = this.lockMode;\r\n\r\n return serializationObject;\r\n }\r\n\r\n public override _deserialize(serializationObject: any) {\r\n super._deserialize(serializationObject);\r\n\r\n this.lockMode = serializationObject.lockMode;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.ParticleRandomBlock\", ParticleRandomBlock);\r\n"]}
1
+ {"version":3,"file":"particleRandomBlock.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Particles/Node/Blocks/particleRandomBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { RegisterClass } from \"../../../Misc/typeStore\";\r\nimport { Vector2, Vector3 } from \"../../../Maths/math.vector\";\r\nimport type { Nullable } from \"../../../types\";\r\nimport { PropertyTypeForEdition, editableInPropertyPage } from \"core/Decorators/nodeDecorator\";\r\nimport { NodeParticleBlock } from \"../nodeParticleBlock\";\r\nimport { NodeParticleBlockConnectionPointTypes } from \"../Enums/nodeParticleBlockConnectionPointTypes\";\r\nimport type { NodeParticleConnectionPoint } from \"../nodeParticleBlockConnectionPoint\";\r\nimport type { NodeParticleBuildState } from \"../nodeParticleBuildState\";\r\nimport { Color4 } from \"core/Maths/math.color\";\r\n\r\n/**\r\n * Locks supported by the random block\r\n */\r\nexport enum ParticleRandomBlockLocks {\r\n /** None */\r\n None = 0,\r\n /** PerParticle */\r\n PerParticle = 1,\r\n /** PerSystem */\r\n PerSystem = 2,\r\n}\r\n\r\n/**\r\n * Block used to get a random number\r\n */\r\nexport class ParticleRandomBlock extends NodeParticleBlock {\r\n private _currentLockId = -2;\r\n /**\r\n * Gets or sets a value indicating if that block will lock its value for a specific event\r\n */\r\n @editableInPropertyPage(\"LockMode\", PropertyTypeForEdition.List, \"ADVANCED\", {\r\n notifiers: { rebuild: true },\r\n embedded: true,\r\n options: [\r\n { label: \"None\", value: ParticleRandomBlockLocks.None },\r\n { label: \"Per particle\", value: ParticleRandomBlockLocks.PerParticle },\r\n { label: \"Per system\", value: ParticleRandomBlockLocks.PerSystem },\r\n ],\r\n })\r\n public lockMode = ParticleRandomBlockLocks.PerParticle;\r\n\r\n /**\r\n * Create a new ParticleRandomBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name);\r\n\r\n this.registerInput(\"min\", NodeParticleBlockConnectionPointTypes.AutoDetect, true, 0);\r\n this.registerInput(\"max\", NodeParticleBlockConnectionPointTypes.AutoDetect, true, 1);\r\n\r\n this.registerOutput(\"output\", NodeParticleBlockConnectionPointTypes.BasedOnInput);\r\n\r\n this._inputs[0].addExcludedConnectionPointFromAllowedTypes(\r\n NodeParticleBlockConnectionPointTypes.Float |\r\n NodeParticleBlockConnectionPointTypes.Int |\r\n NodeParticleBlockConnectionPointTypes.Vector2 |\r\n NodeParticleBlockConnectionPointTypes.Vector3 |\r\n NodeParticleBlockConnectionPointTypes.Color4\r\n );\r\n this._inputs[1].addExcludedConnectionPointFromAllowedTypes(\r\n NodeParticleBlockConnectionPointTypes.Float |\r\n NodeParticleBlockConnectionPointTypes.Int |\r\n NodeParticleBlockConnectionPointTypes.Vector2 |\r\n NodeParticleBlockConnectionPointTypes.Vector3 |\r\n NodeParticleBlockConnectionPointTypes.Color4\r\n );\r\n\r\n this._outputs[0]._typeConnectionSource = this._inputs[0];\r\n this._outputs[0]._defaultConnectionPointType = NodeParticleBlockConnectionPointTypes.Float;\r\n this._linkConnectionTypes(0, 1);\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"ParticleRandomBlock\";\r\n }\r\n\r\n /**\r\n * Gets the min input component\r\n */\r\n public get min(): NodeParticleConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the max input component\r\n */\r\n public get max(): NodeParticleConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the geometry output component\r\n */\r\n public get output(): NodeParticleConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n public override _build() {\r\n let func: Nullable<(state: NodeParticleBuildState) => any> = null;\r\n this._currentLockId = -2;\r\n\r\n switch (this.min.type) {\r\n case NodeParticleBlockConnectionPointTypes.AutoDetect:\r\n case NodeParticleBlockConnectionPointTypes.Int:\r\n case NodeParticleBlockConnectionPointTypes.Float: {\r\n func = (state) => {\r\n const min = this.min.getConnectedValue(state) || 0;\r\n const max = this.max.getConnectedValue(state) || 1;\r\n return min + Math.random() * (max - min);\r\n };\r\n break;\r\n }\r\n case NodeParticleBlockConnectionPointTypes.Vector2: {\r\n func = (state) => {\r\n const min = this.min.getConnectedValue(state) || Vector2.Zero();\r\n const max = this.max.getConnectedValue(state) || Vector2.One();\r\n return new Vector2(min.x + Math.random() * (max.x - min.x), min.y + Math.random() * (max.y - min.y));\r\n };\r\n break;\r\n }\r\n case NodeParticleBlockConnectionPointTypes.Vector3: {\r\n func = (state) => {\r\n const min = this.min.getConnectedValue(state) || Vector3.Zero();\r\n const max = this.max.getConnectedValue(state) || Vector3.One();\r\n return new Vector3(min.x + Math.random() * (max.x - min.x), min.y + Math.random() * (max.y - min.y), min.z + Math.random() * (max.z - min.z));\r\n };\r\n break;\r\n }\r\n case NodeParticleBlockConnectionPointTypes.Color4: {\r\n func = (state) => {\r\n const min = this.min.getConnectedValue(state) || new Color4(0, 0, 0, 0);\r\n const max = this.max.getConnectedValue(state) || new Color4(1, 1, 1, 1);\r\n return new Color4(\r\n min.r + Math.random() * (max.r - min.r),\r\n min.g + Math.random() * (max.g - min.g),\r\n min.b + Math.random() * (max.b - min.b),\r\n min.a + Math.random() * (max.a - min.a)\r\n );\r\n };\r\n break;\r\n }\r\n }\r\n\r\n this.output._storedFunction = (state) => {\r\n let lockId = 0;\r\n\r\n switch (this.lockMode) {\r\n case ParticleRandomBlockLocks.PerParticle:\r\n lockId = state.particleContext?.id || -1;\r\n break;\r\n case ParticleRandomBlockLocks.PerSystem:\r\n lockId = state.buildId || 0;\r\n break;\r\n }\r\n\r\n if (this._currentLockId !== lockId) {\r\n if (this.lockMode !== ParticleRandomBlockLocks.None) {\r\n this._currentLockId = lockId;\r\n }\r\n this.output._storedValue = func!(state);\r\n }\r\n return this.output._storedValue;\r\n };\r\n }\r\n\r\n /**\r\n * Serializes this block in a JSON representation\r\n * @returns the serialized block object\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.lockMode = this.lockMode;\r\n\r\n return serializationObject;\r\n }\r\n\r\n public override _deserialize(serializationObject: any) {\r\n super._deserialize(serializationObject);\r\n\r\n this.lockMode = serializationObject.lockMode;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.ParticleRandomBlock\", ParticleRandomBlock);\r\n"]}
@@ -1,4 +1,4 @@
1
- /* eslint-disable import/no-internal-modules */
1
+ /* eslint-disable @typescript-eslint/no-restricted-imports */
2
2
  export * from "./nodeParticleBlock.js";
3
3
  export * from "./nodeParticleSystemSet.js";
4
4
  export * from "./nodeParticleBlockConnectionPoint.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../dev/core/src/Particles/Node/index.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oCAAoC,CAAC;AACnD,cAAc,0BAA0B,CAAC;AACzC,cAAc,+CAA+C,CAAC;AAC9D,cAAc,uCAAuC,CAAC;AACtD,cAAc,mCAAmC,CAAC;AAClD,cAAc,gBAAgB,CAAC","sourcesContent":["/* eslint-disable import/no-internal-modules */\r\nexport * from \"./nodeParticleBlock\";\r\nexport * from \"./nodeParticleSystemSet\";\r\nexport * from \"./nodeParticleBlockConnectionPoint\";\r\nexport * from \"./nodeParticleBuildState\";\r\nexport * from \"./Enums/nodeParticleBlockConnectionPointTypes\";\r\nexport * from \"./Enums/nodeParticleContextualSources\";\r\nexport * from \"./Enums/nodeParticleSystemSources\";\r\nexport * from \"./Blocks/index\";\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../dev/core/src/Particles/Node/index.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oCAAoC,CAAC;AACnD,cAAc,0BAA0B,CAAC;AACzC,cAAc,+CAA+C,CAAC;AAC9D,cAAc,uCAAuC,CAAC;AACtD,cAAc,mCAAmC,CAAC;AAClD,cAAc,gBAAgB,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/no-restricted-imports */\r\nexport * from \"./nodeParticleBlock\";\r\nexport * from \"./nodeParticleSystemSet\";\r\nexport * from \"./nodeParticleBlockConnectionPoint\";\r\nexport * from \"./nodeParticleBuildState\";\r\nexport * from \"./Enums/nodeParticleBlockConnectionPointTypes\";\r\nexport * from \"./Enums/nodeParticleContextualSources\";\r\nexport * from \"./Enums/nodeParticleSystemSources\";\r\nexport * from \"./Blocks/index\";\r\n"]}
@@ -7,8 +7,8 @@ import { ParticleInputBlock } from "./Blocks/particleInputBlock.js";
7
7
  /**
8
8
  * Defines a set of particle systems defined as a node graph.
9
9
  * @experimental This API is experimental and may change in future releases.
10
- * NPE: #K6F1ZB
11
- * PG: #ZT509U
10
+ * NPE: #K6F1ZB#1
11
+ * PG: #ZT509U#1
12
12
  */
13
13
  export declare class NodeParticleSystemSet {
14
14
  private _systemBlocks;
@@ -20,8 +20,8 @@ import { CreateParticleBlock } from "./Blocks/Emitters/createParticleBlock.js";
20
20
  /**
21
21
  * Defines a set of particle systems defined as a node graph.
22
22
  * @experimental This API is experimental and may change in future releases.
23
- * NPE: #K6F1ZB
24
- * PG: #ZT509U
23
+ * NPE: #K6F1ZB#1
24
+ * PG: #ZT509U#1
25
25
  */
26
26
  export class NodeParticleSystemSet {
27
27
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"nodeParticleSystemSet.js","sourceRoot":"","sources":["../../../../../dev/core/src/Particles/Node/nodeParticleSystemSet.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,iCAA6B;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,OAAO,EAAE,mBAAmB,EAAE,+CAA2C;AACzE,OAAO,EAAE,UAAU,EAAE,iCAA6B;AAClD,OAAO,EAAE,QAAQ,EAAE,gCAA4B;AAC/C,OAAO,EAAE,UAAU,EAAE,iCAA6B;AAClD,OAAO,EAAE,SAAS,EAAE,mCAA+B;AACnD,OAAO,EAAE,KAAK,EAAE,4BAAwB;AACxC,OAAO,EAAE,cAAc,EAAE,wCAAoC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AACjF,OAAO,EAAE,6BAA6B,EAAE,MAAM,uCAAuC,CAAC;AACtF,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AAG5F,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAE5E;;;;;GAKG;AACH,MAAM,OAAO,qBAAqB;IA2C9B;;OAEG;IACH,IAAW,YAAY;QACnB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC;IAED;;;OAGG;IACH,IAAW,WAAW;QAClB,MAAM,MAAM,GAAyB,EAAE,CAAC;QACxC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAChB,MAAM,CAAC,IAAI,CAAC,KAA2B,CAAC,CAAC;YAC7C,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;OAGG;IACH,YAAmB,IAAY;QApEvB,kBAAa,GAAkB,EAAE,CAAC;QAClC,aAAQ,GAAW,CAAC,CAAC;QAa7B;;WAEG;QACI,mBAAc,GAAwB,EAAE,CAAC;QAEhD;;;WAGG;QACI,eAAU,GAAQ,IAAI,CAAC;QAE9B;;WAEG;QACI,sBAAiB,GAAG,IAAI,UAAU,EAAyB,CAAC;QAyC/D,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;IAED;;;OAGG;IACI,YAAY;QACf,OAAO,uBAAuB,CAAC;IACnC,CAAC;IAEO,gBAAgB,CAAC,IAAuB,EAAE,aAAa,GAAG,IAAI;QAClE,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YAC3C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC9B,MAAM,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;YAC5C,IAAI,cAAc,EAAE,CAAC;gBACjB,MAAM,KAAK,GAAG,cAAc,CAAC,UAAU,CAAC;gBACxC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;oBACjB,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;gBAChD,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,UAAU,CAAC,KAAY,EAAE,OAAO,GAAG,KAAK;QACjD,OAAO,MAAM,IAAI,OAAO,CAAoB,CAAC,OAAO,EAAE,EAAE;YACpD,MAAM,MAAM,GAAG,IAAI,iBAAiB,EAAE,CAAC;YAEvC,wBAAwB;YACxB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACrC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACjC,CAAC;YAED,mBAAmB;YACnB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpC,MAAM,KAAK,GAAG,IAAI,sBAAsB,EAAE,CAAC;gBAC3C,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAChC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;gBACpB,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;gBAExB,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;gBAEzC,SAAS;gBACT,KAAK,CAAC,UAAU,EAAE,CAAC;gBAEnB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAChC,CAAC;YAED,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAE7C,OAAO,CAAC,MAAM,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACI,KAAK;QACR,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACI,YAAY;QACf,IAAI,CAAC,KAAK,EAAE,CAAC;QAEb,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QAEvB,cAAc;QACd,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,iBAAiB,CAAC,CAAC;QAElD,kBAAkB;QAClB,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,CAAC,iBAAiB,CAAC,CAAC;QACvE,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAEtD,oBAAoB;QACpB,MAAM,aAAa,GAAG,IAAI,kBAAkB,CAAC,UAAU,CAAC,CAAC;QACzD,aAAa,CAAC,eAAe,GAAG,6BAA6B,CAAC,QAAQ,CAAC;QACvE,MAAM,cAAc,GAAG,IAAI,kBAAkB,CAAC,kBAAkB,CAAC,CAAC;QAClE,cAAc,CAAC,eAAe,GAAG,6BAA6B,CAAC,eAAe,CAAC;QAE/E,MAAM;QACN,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC9C,QAAQ,CAAC,SAAS,GAAG,2BAA2B,CAAC,GAAG,CAAC;QACrD,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC9C,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAChD,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAExD,kBAAkB;QAClB,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,CAAC,iBAAiB,CAAC,CAAC;QAEvE,QAAQ;QACR,MAAM,YAAY,GAAG,IAAI,aAAa,CAAC,WAAW,CAAC,CAAC;QACpD,mBAAmB,CAAC,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC9D,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAE5D,UAAU;QACV,MAAM,YAAY,GAAG,IAAI,0BAA0B,CAAC,SAAS,CAAC,CAAC;QAC/D,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC/C,YAAY,CAAC,GAAG,GAAG,iDAAiD,CAAC;QAErE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAED;;;OAGG;IACI,WAAW,CAAC,KAAwB;QACvC,MAAM,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC9D,IAAI,kBAAkB,GAAG,CAAC,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;QACtD,CAAC;QAED,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,KAAoB,CAAC,CAAC;YAC/D,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;gBACb,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACxC,CAAC;QACL,CAAC;IACL,CAAC;IAED;;;;OAIG;IACI,qBAAqB,CAAC,MAAW,EAAE,KAAK,GAAG,KAAK;QACnD,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,IAAI,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;QAED,MAAM,GAAG,GAAyC,EAAE,CAAC;QAErD,gBAAgB;QAChB,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YACtC,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YACnD,IAAI,SAAS,EAAE,CAAC;gBACZ,MAAM,KAAK,GAAsB,IAAI,SAAS,EAAE,CAAC;gBACjD,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;gBAChC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;gBAE5B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAEhC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;oBACjB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAoB,CAAC,CAAC;gBAClD,CAAC;YACL,CAAC;QACL,CAAC;QAED,0BAA0B;QAC1B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtC,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;gBACtB,MAAM,WAAW,GAAG,KAAiC,CAAC;gBACtD,MAAM,EAAE,GAAG,WAAW,CAAC,uBAAuB,CAAC;gBAC/C,IAAI,EAAE,EAAE,CAAC;oBACL,MAAM,MAAM,GAAG,GAAG,CAAC,EAAE,CAA4B,CAAC;oBAClD,IAAI,MAAM,EAAE,CAAC;wBACT,MAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;oBACzC,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;QAED,mGAAmG;QACnG,KAAK,IAAI,UAAU,GAAG,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,CAAC;YACvE,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAC9C,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YAElC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACT,SAAS;YACb,CAAC;YAED,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC/F,SAAS;YACb,CAAC;YACD,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;QACjD,CAAC;QAED,kBAAkB;QAClB,IAAI,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACzE,MAAM,SAAS,GAKT,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC;YAEtD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBAC/B,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;oBACxB,QAAQ,CAAC,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC;gBACtD,CAAC;YACL,CAAC;YAED,IAAI,KAAK,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;gBACxD,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAChD,CAAC;YAED,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACnB,IAAI,CAAC,UAAU,GAAG;oBACd,SAAS,EAAE,SAAS;iBACvB,CAAC;YACN,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;gBACpC,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,SAAS,CAAC;YAC1C,CAAC;YAED,MAAM,QAAQ,GAAa,EAAE,CAAC;YAE9B,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;gBACpB,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;YACtC,CAAC;YAED,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,QAAQ,CAAC;QACnC,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAClC,CAAC;IAEO,mBAAmB,CAAC,KAAwB,EAAE,MAAW,EAAE,GAAyC;QACxG,KAAK,MAAM,WAAW,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YACtC,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBACpC,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBAEjC,IAAI,CAAC,MAAM,EAAE,CAAC;oBACV,SAAS;gBACb,CAAC;gBAED,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;oBACnC,IAAI,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,KAAK,IAAI,KAAK,CAAC,oBAAoB,KAAK,WAAW,CAAC,IAAI,EAAE,CAAC;wBACxF,MAAM,UAAU,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;wBAC1D,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;4BACxC,SAAS;wBACb,CAAC;wBAED,WAAW,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;wBACxC,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;wBAC9C,SAAS;oBACb,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAED;;;;OAIG;IACI,SAAS,CAAC,cAAoC;QACjD,MAAM,mBAAmB,GAAG,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACtF,mBAAmB,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO;QAErF,IAAI,MAAM,GAAwB,EAAE,CAAC;QAErC,IAAI,cAAc,EAAE,CAAC;YACjB,MAAM,GAAG,cAAc,CAAC;QAC5B,CAAC;aAAM,CAAC;YACJ,mBAAmB,CAAC,UAAU,GAAG,+BAA+B,CAAC;QACrE,CAAC;QAED,SAAS;QACT,mBAAmB,CAAC,MAAM,GAAG,EAAE,CAAC;QAEhC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YACzB,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;QACvD,CAAC;QAED,IAAI,CAAC,cAAc,EAAE,CAAC;YAClB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACtC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;oBAC/B,SAAS;gBACb,CAAC;gBACD,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;YACvD,CAAC;QACL,CAAC;QAED,OAAO,mBAAmB,CAAC;IAC/B,CAAC;IAED;;OAEG;IACI,OAAO;QACV,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtC,KAAK,CAAC,OAAO,EAAE,CAAC;QACpB,CAAC;QAED,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;IACnC,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,aAAa,CAAC,IAAY;QACpC,MAAM,eAAe,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAExD,eAAe,CAAC,YAAY,EAAE,CAAC;QAE/B,OAAO,eAAe,CAAC;IAC3B,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,KAAK,CAAC,MAAW;QAC3B,MAAM,eAAe,GAAG,mBAAmB,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAE9G,eAAe,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAE9C,OAAO,eAAe,CAAC;IAC3B,CAAC;IAED;;;;;OAKG;IACH,2FAA2F;IACpF,MAAM,CAAC,qBAAqB,CAAC,SAAiB,EAAE,eAAuC;QAC1F,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;YACzB,OAAO,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;QACzE,CAAC;QAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,MAAM,OAAO,GAAG,IAAI,UAAU,EAAE,CAAC;YACjC,OAAO,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,GAAG,EAAE;gBAC9C,IAAI,OAAO,CAAC,UAAU,IAAI,CAAC,EAAE,CAAC;oBAC1B,IAAI,OAAO,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;wBACxB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,CAAC;wBACzE,MAAM,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;wBAE7D,IAAI,CAAC,eAAe,EAAE,CAAC;4BACnB,eAAe,GAAG,mBAAmB,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,qBAAqB,CAAC,SAAS,CAAC,EAAE,mBAAmB,EAAE,IAAI,CAAC,CAAC;wBACvH,CAAC;wBAED,eAAe,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,CAAC;wBAC3D,eAAe,CAAC,SAAS,GAAG,SAAS,CAAC;wBAEtC,IAAI,CAAC;4BACD,OAAO,CAAC,eAAe,CAAC,CAAC;wBAC7B,CAAC;wBAAC,OAAO,GAAG,EAAE,CAAC;4BACX,2EAA2E;4BAC3E,MAAM,CAAC,GAAG,CAAC,CAAC;wBAChB,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACJ,2EAA2E;wBAC3E,MAAM,CAAC,6BAA6B,GAAG,SAAS,CAAC,CAAC;oBACtD,CAAC;gBACL,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,GAAG,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;YAC1E,OAAO,CAAC,IAAI,EAAE,CAAC;QACnB,CAAC,CAAC,CAAC;IACP,CAAC;;AAtbD,gDAAgD;AAClC,+BAAS,GAAG,GAAG,KAAK,CAAC,cAAc,KAAK,cAAc,CAAC,OAAO,mDAAmD,AAAxG,CAAyG;AAEhI,sCAAsC;AACxB,gCAAU,GAAG,SAAS,CAAC,UAAU,AAAvB,CAAwB;AA2BzC;IADN,SAAS,EAAE;mDACQ;AAMb;IADN,SAAS,CAAC,SAAS,CAAC;sDACE","sourcesContent":["import { serialize } from \"core/Misc/decorators\";\r\nimport { ParticleSystemSet } from \"../particleSystemSet\";\r\nimport { SystemBlock } from \"./Blocks/systemBlock\";\r\nimport type { Scene } from \"core/scene\";\r\nimport { NodeParticleBuildState } from \"./nodeParticleBuildState\";\r\nimport type { NodeParticleBlock } from \"./nodeParticleBlock\";\r\nimport { SerializationHelper } from \"core/Misc/decorators.serialization\";\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport { GetClass } from \"core/Misc/typeStore\";\r\nimport { WebRequest } from \"core/Misc/webRequest\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { Tools } from \"core/Misc/tools\";\r\nimport { AbstractEngine } from \"core/Engines/abstractEngine\";\r\nimport { ParticleInputBlock } from \"./Blocks/particleInputBlock\";\r\nimport { ParticleTextureSourceBlock } from \"./Blocks/particleSourceTextureBlock\";\r\nimport { NodeParticleContextualSources } from \"./Enums/nodeParticleContextualSources\";\r\nimport { UpdatePositionBlock } from \"./Blocks/Update/updatePositionBlock\";\r\nimport { ParticleMathBlock, ParticleMathBlockOperations } from \"./Blocks/particleMathBlock\";\r\nimport type { ParticleTeleportOutBlock } from \"./Blocks/Teleport/particleTeleportOutBlock\";\r\nimport type { ParticleTeleportInBlock } from \"./Blocks/Teleport/particleTeleportInBlock\";\r\nimport { BoxShapeBlock } from \"./Blocks/Emitters/boxShapeBlock\";\r\nimport { CreateParticleBlock } from \"./Blocks/Emitters/createParticleBlock\";\r\n\r\n/**\r\n * Defines a set of particle systems defined as a node graph.\r\n * @experimental This API is experimental and may change in future releases.\r\n * NPE: #K6F1ZB\r\n * PG: #ZT509U\r\n */\r\nexport class NodeParticleSystemSet {\r\n private _systemBlocks: SystemBlock[] = [];\r\n private _buildId: number = 0;\r\n\r\n /** Define the Url to load node editor script */\r\n public static EditorURL = `${Tools._DefaultCdnUrl}/v${AbstractEngine.Version}/nodeParticleEditor/babylon.nodeParticleEditor.js`;\r\n\r\n /** Define the Url to load snippets */\r\n public static SnippetUrl = Constants.SnippetUrl;\r\n\r\n /**\r\n * Snippet ID if the material was created from the snippet server\r\n */\r\n public snippetId: string;\r\n\r\n /**\r\n * Gets an array of blocks that needs to be serialized even if they are not yet connected\r\n */\r\n public attachedBlocks: NodeParticleBlock[] = [];\r\n\r\n /**\r\n * Gets or sets data used by visual editor\r\n * @see https://npe.babylonjs.com\r\n */\r\n public editorData: any = null;\r\n\r\n /**\r\n * Observable raised when the particle set is built\r\n */\r\n public onBuildObservable = new Observable<NodeParticleSystemSet>();\r\n\r\n /**\r\n * The name of the set\r\n */\r\n @serialize()\r\n public name: string;\r\n\r\n /**\r\n * A free comment about the set\r\n */\r\n @serialize(\"comment\")\r\n public comment: string;\r\n\r\n /**\r\n * Gets the system blocks\r\n */\r\n public get systemBlocks(): SystemBlock[] {\r\n return this._systemBlocks;\r\n }\r\n\r\n /**\r\n * Gets the list of input blocks attached to this material\r\n * @returns an array of InputBlocks\r\n */\r\n public get inputBlocks() {\r\n const blocks: ParticleInputBlock[] = [];\r\n for (const block of this.attachedBlocks) {\r\n if (block.isInput) {\r\n blocks.push(block as ParticleInputBlock);\r\n }\r\n }\r\n\r\n return blocks;\r\n }\r\n\r\n /**\r\n * Creates a new set\r\n * @param name defines the name of the set\r\n */\r\n public constructor(name: string) {\r\n this.name = name;\r\n }\r\n\r\n /**\r\n * Gets the current class name of the geometry e.g. \"NodeParticleSystemSet\"\r\n * @returns the class name\r\n */\r\n public getClassName(): string {\r\n return \"NodeParticleSystemSet\";\r\n }\r\n\r\n private _initializeBlock(node: NodeParticleBlock, autoConfigure = true) {\r\n if (this.attachedBlocks.indexOf(node) === -1) {\r\n this.attachedBlocks.push(node);\r\n }\r\n\r\n for (const input of node.inputs) {\r\n const connectedPoint = input.connectedPoint;\r\n if (connectedPoint) {\r\n const block = connectedPoint.ownerBlock;\r\n if (block !== node) {\r\n this._initializeBlock(block, autoConfigure);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Builds the particle system set from the defined blocks.\r\n * @param scene defines the hosting scene\r\n * @param verbose defines whether to log detailed information during the build process (false by default)\r\n * @returns a promise that resolves to the built particle system set\r\n */\r\n public async buildAsync(scene: Scene, verbose = false): Promise<ParticleSystemSet> {\r\n return await new Promise<ParticleSystemSet>((resolve) => {\r\n const output = new ParticleSystemSet();\r\n\r\n // Initialize all blocks\r\n for (const block of this._systemBlocks) {\r\n this._initializeBlock(block);\r\n }\r\n\r\n // Build the blocks\r\n for (const block of this.systemBlocks) {\r\n const state = new NodeParticleBuildState();\r\n state.buildId = this._buildId++;\r\n state.scene = scene;\r\n state.verbose = verbose;\r\n\r\n const system = block.createSystem(state);\r\n\r\n // Errors\r\n state.emitErrors();\r\n\r\n output.systems.push(system);\r\n }\r\n\r\n this.onBuildObservable.notifyObservers(this);\r\n\r\n resolve(output);\r\n });\r\n }\r\n\r\n /**\r\n * Clear the current geometry\r\n */\r\n public clear() {\r\n this.attachedBlocks.length = 0;\r\n this._systemBlocks.length = 0;\r\n }\r\n\r\n /**\r\n * Clear the current set and restore it to a default state\r\n */\r\n public setToDefault() {\r\n this.clear();\r\n\r\n this.editorData = null;\r\n\r\n // Main system\r\n const system = new SystemBlock(\"Particle system\");\r\n\r\n // Update position\r\n const updatePositionBlock = new UpdatePositionBlock(\"Update position\");\r\n updatePositionBlock.output.connectTo(system.particle);\r\n\r\n // Contextual inputs\r\n const positionBlock = new ParticleInputBlock(\"Position\");\r\n positionBlock.contextualValue = NodeParticleContextualSources.Position;\r\n const directionBlock = new ParticleInputBlock(\"Scaled direction\");\r\n directionBlock.contextualValue = NodeParticleContextualSources.ScaledDirection;\r\n\r\n // Add\r\n const addBlock = new ParticleMathBlock(\"Add\");\r\n addBlock.operation = ParticleMathBlockOperations.Add;\r\n positionBlock.output.connectTo(addBlock.left);\r\n directionBlock.output.connectTo(addBlock.right);\r\n addBlock.output.connectTo(updatePositionBlock.position);\r\n\r\n // Create particle\r\n const createParticleBlock = new CreateParticleBlock(\"Create particle\");\r\n\r\n // Shape\r\n const emitterShape = new BoxShapeBlock(\"Box shape\");\r\n createParticleBlock.particle.connectTo(emitterShape.particle);\r\n emitterShape.output.connectTo(updatePositionBlock.particle);\r\n\r\n // Texture\r\n const textureBlock = new ParticleTextureSourceBlock(\"Texture\");\r\n textureBlock.texture.connectTo(system.texture);\r\n textureBlock.url = \"https://assets.babylonjs.com/textures/flare.png\";\r\n\r\n this._systemBlocks.push(system);\r\n }\r\n\r\n /**\r\n * Remove a block from the current system set\r\n * @param block defines the block to remove\r\n */\r\n public removeBlock(block: NodeParticleBlock) {\r\n const attachedBlockIndex = this.attachedBlocks.indexOf(block);\r\n if (attachedBlockIndex > -1) {\r\n this.attachedBlocks.splice(attachedBlockIndex, 1);\r\n }\r\n\r\n if (block.isSystem) {\r\n const index = this._systemBlocks.indexOf(block as SystemBlock);\r\n if (index > -1) {\r\n this._systemBlocks.splice(index, 1);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Clear the current graph and load a new one from a serialization object\r\n * @param source defines the JSON representation of the particle set\r\n * @param merge defines whether or not the source must be merged or replace the current content\r\n */\r\n public parseSerializedObject(source: any, merge = false) {\r\n if (!merge) {\r\n this.clear();\r\n }\r\n\r\n const map: { [key: number]: NodeParticleBlock } = {};\r\n\r\n // Create blocks\r\n for (const parsedBlock of source.blocks) {\r\n const blockType = GetClass(parsedBlock.customType);\r\n if (blockType) {\r\n const block: NodeParticleBlock = new blockType();\r\n block._deserialize(parsedBlock);\r\n map[parsedBlock.id] = block;\r\n\r\n this.attachedBlocks.push(block);\r\n\r\n if (block.isSystem) {\r\n this._systemBlocks.push(block as SystemBlock);\r\n }\r\n }\r\n }\r\n\r\n // Reconnect teleportation\r\n for (const block of this.attachedBlocks) {\r\n if (block.isTeleportOut) {\r\n const teleportOut = block as ParticleTeleportOutBlock;\r\n const id = teleportOut._tempEntryPointUniqueId;\r\n if (id) {\r\n const source = map[id] as ParticleTeleportInBlock;\r\n if (source) {\r\n source.attachToEndpoint(teleportOut);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Connections - Starts with input blocks only (except if in \"merge\" mode where we scan all blocks)\r\n for (let blockIndex = 0; blockIndex < source.blocks.length; blockIndex++) {\r\n const parsedBlock = source.blocks[blockIndex];\r\n const block = map[parsedBlock.id];\r\n\r\n if (!block) {\r\n continue;\r\n }\r\n\r\n if (block.inputs.length && parsedBlock.inputs.some((i: any) => i.targetConnectionName) && !merge) {\r\n continue;\r\n }\r\n this._restoreConnections(block, source, map);\r\n }\r\n\r\n // UI related info\r\n if (source.locations || (source.editorData && source.editorData.locations)) {\r\n const locations: {\r\n blockId: number;\r\n x: number;\r\n y: number;\r\n isCollapsed: boolean;\r\n }[] = source.locations || source.editorData.locations;\r\n\r\n for (const location of locations) {\r\n if (map[location.blockId]) {\r\n location.blockId = map[location.blockId].uniqueId;\r\n }\r\n }\r\n\r\n if (merge && this.editorData && this.editorData.locations) {\r\n locations.concat(this.editorData.locations);\r\n }\r\n\r\n if (source.locations) {\r\n this.editorData = {\r\n locations: locations,\r\n };\r\n } else {\r\n this.editorData = source.editorData;\r\n this.editorData.locations = locations;\r\n }\r\n\r\n const blockMap: number[] = [];\r\n\r\n for (const key in map) {\r\n blockMap[key] = map[key].uniqueId;\r\n }\r\n\r\n this.editorData.map = blockMap;\r\n }\r\n\r\n this.comment = source.comment;\r\n }\r\n\r\n private _restoreConnections(block: NodeParticleBlock, source: any, map: { [key: number]: NodeParticleBlock }) {\r\n for (const outputPoint of block.outputs) {\r\n for (const candidate of source.blocks) {\r\n const target = map[candidate.id];\r\n\r\n if (!target) {\r\n continue;\r\n }\r\n\r\n for (const input of candidate.inputs) {\r\n if (map[input.targetBlockId] === block && input.targetConnectionName === outputPoint.name) {\r\n const inputPoint = target.getInputByName(input.inputName);\r\n if (!inputPoint || inputPoint.isConnected) {\r\n continue;\r\n }\r\n\r\n outputPoint.connectTo(inputPoint, true);\r\n this._restoreConnections(target, source, map);\r\n continue;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Serializes this geometry in a JSON representation\r\n * @param selectedBlocks defines the list of blocks to save (if null the whole geometry will be saved)\r\n * @returns the serialized geometry object\r\n */\r\n public serialize(selectedBlocks?: NodeParticleBlock[]): any {\r\n const serializationObject = selectedBlocks ? {} : SerializationHelper.Serialize(this);\r\n serializationObject.editorData = JSON.parse(JSON.stringify(this.editorData)); // Copy\r\n\r\n let blocks: NodeParticleBlock[] = [];\r\n\r\n if (selectedBlocks) {\r\n blocks = selectedBlocks;\r\n } else {\r\n serializationObject.customType = \"BABYLON.NodeParticleSystemSet\";\r\n }\r\n\r\n // Blocks\r\n serializationObject.blocks = [];\r\n\r\n for (const block of blocks) {\r\n serializationObject.blocks.push(block.serialize());\r\n }\r\n\r\n if (!selectedBlocks) {\r\n for (const block of this.attachedBlocks) {\r\n if (blocks.indexOf(block) !== -1) {\r\n continue;\r\n }\r\n serializationObject.blocks.push(block.serialize());\r\n }\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Disposes the resources\r\n */\r\n public dispose(): void {\r\n for (const block of this.attachedBlocks) {\r\n block.dispose();\r\n }\r\n\r\n this.attachedBlocks.length = 0;\r\n this.onBuildObservable.clear();\r\n }\r\n\r\n /**\r\n * Creates a new node particle set set to default basic configuration\r\n * @param name defines the name of the particle set\r\n * @returns a new NodeParticleSystemSet\r\n */\r\n public static CreateDefault(name: string) {\r\n const nodeParticleSet = new NodeParticleSystemSet(name);\r\n\r\n nodeParticleSet.setToDefault();\r\n\r\n return nodeParticleSet;\r\n }\r\n\r\n /**\r\n * Creates a node particle set from parsed data\r\n * @param source defines the JSON representation of the particle set\r\n * @returns a new node particle set\r\n */\r\n public static Parse(source: any): NodeParticleSystemSet {\r\n const nodeParticleSet = SerializationHelper.Parse(() => new NodeParticleSystemSet(source.name), source, null);\r\n\r\n nodeParticleSet.parseSerializedObject(source);\r\n\r\n return nodeParticleSet;\r\n }\r\n\r\n /**\r\n * Creates a node particle set from a snippet saved by the node geometry editor\r\n * @param snippetId defines the snippet to load\r\n * @param nodeParticleSet defines a node particle set to update (instead of creating a new one)\r\n * @returns a promise that will resolve to the new node geometry\r\n */\r\n // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\r\n public static ParseFromSnippetAsync(snippetId: string, nodeParticleSet?: NodeParticleSystemSet): Promise<NodeParticleSystemSet> {\r\n if (snippetId === \"_BLANK\") {\r\n return Promise.resolve(NodeParticleSystemSet.CreateDefault(\"blank\"));\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n const request = new WebRequest();\r\n request.addEventListener(\"readystatechange\", () => {\r\n if (request.readyState == 4) {\r\n if (request.status == 200) {\r\n const snippet = JSON.parse(JSON.parse(request.responseText).jsonPayload);\r\n const serializationObject = JSON.parse(snippet.nodeParticle);\r\n\r\n if (!nodeParticleSet) {\r\n nodeParticleSet = SerializationHelper.Parse(() => new NodeParticleSystemSet(snippetId), serializationObject, null);\r\n }\r\n\r\n nodeParticleSet.parseSerializedObject(serializationObject);\r\n nodeParticleSet.snippetId = snippetId;\r\n\r\n try {\r\n resolve(nodeParticleSet);\r\n } catch (err) {\r\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\r\n reject(err);\r\n }\r\n } else {\r\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\r\n reject(\"Unable to load the snippet \" + snippetId);\r\n }\r\n }\r\n });\r\n\r\n request.open(\"GET\", this.SnippetUrl + \"/\" + snippetId.replace(/#/g, \"/\"));\r\n request.send();\r\n });\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"nodeParticleSystemSet.js","sourceRoot":"","sources":["../../../../../dev/core/src/Particles/Node/nodeParticleSystemSet.ts"],"names":[],"mappings":"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","sourcesContent":["import { serialize } from \"core/Misc/decorators\";\r\nimport { ParticleSystemSet } from \"../particleSystemSet\";\r\nimport { SystemBlock } from \"./Blocks/systemBlock\";\r\nimport type { Scene } from \"core/scene\";\r\nimport { NodeParticleBuildState } from \"./nodeParticleBuildState\";\r\nimport type { NodeParticleBlock } from \"./nodeParticleBlock\";\r\nimport { SerializationHelper } from \"core/Misc/decorators.serialization\";\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport { GetClass } from \"core/Misc/typeStore\";\r\nimport { WebRequest } from \"core/Misc/webRequest\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { Tools } from \"core/Misc/tools\";\r\nimport { AbstractEngine } from \"core/Engines/abstractEngine\";\r\nimport { ParticleInputBlock } from \"./Blocks/particleInputBlock\";\r\nimport { ParticleTextureSourceBlock } from \"./Blocks/particleSourceTextureBlock\";\r\nimport { NodeParticleContextualSources } from \"./Enums/nodeParticleContextualSources\";\r\nimport { UpdatePositionBlock } from \"./Blocks/Update/updatePositionBlock\";\r\nimport { ParticleMathBlock, ParticleMathBlockOperations } from \"./Blocks/particleMathBlock\";\r\nimport type { ParticleTeleportOutBlock } from \"./Blocks/Teleport/particleTeleportOutBlock\";\r\nimport type { ParticleTeleportInBlock } from \"./Blocks/Teleport/particleTeleportInBlock\";\r\nimport { BoxShapeBlock } from \"./Blocks/Emitters/boxShapeBlock\";\r\nimport { CreateParticleBlock } from \"./Blocks/Emitters/createParticleBlock\";\r\n\r\n/**\r\n * Defines a set of particle systems defined as a node graph.\r\n * @experimental This API is experimental and may change in future releases.\r\n * NPE: #K6F1ZB#1\r\n * PG: #ZT509U#1\r\n */\r\nexport class NodeParticleSystemSet {\r\n private _systemBlocks: SystemBlock[] = [];\r\n private _buildId: number = 0;\r\n\r\n /** Define the Url to load node editor script */\r\n public static EditorURL = `${Tools._DefaultCdnUrl}/v${AbstractEngine.Version}/nodeParticleEditor/babylon.nodeParticleEditor.js`;\r\n\r\n /** Define the Url to load snippets */\r\n public static SnippetUrl = Constants.SnippetUrl;\r\n\r\n /**\r\n * Snippet ID if the material was created from the snippet server\r\n */\r\n public snippetId: string;\r\n\r\n /**\r\n * Gets an array of blocks that needs to be serialized even if they are not yet connected\r\n */\r\n public attachedBlocks: NodeParticleBlock[] = [];\r\n\r\n /**\r\n * Gets or sets data used by visual editor\r\n * @see https://npe.babylonjs.com\r\n */\r\n public editorData: any = null;\r\n\r\n /**\r\n * Observable raised when the particle set is built\r\n */\r\n public onBuildObservable = new Observable<NodeParticleSystemSet>();\r\n\r\n /**\r\n * The name of the set\r\n */\r\n @serialize()\r\n public name: string;\r\n\r\n /**\r\n * A free comment about the set\r\n */\r\n @serialize(\"comment\")\r\n public comment: string;\r\n\r\n /**\r\n * Gets the system blocks\r\n */\r\n public get systemBlocks(): SystemBlock[] {\r\n return this._systemBlocks;\r\n }\r\n\r\n /**\r\n * Gets the list of input blocks attached to this material\r\n * @returns an array of InputBlocks\r\n */\r\n public get inputBlocks() {\r\n const blocks: ParticleInputBlock[] = [];\r\n for (const block of this.attachedBlocks) {\r\n if (block.isInput) {\r\n blocks.push(block as ParticleInputBlock);\r\n }\r\n }\r\n\r\n return blocks;\r\n }\r\n\r\n /**\r\n * Creates a new set\r\n * @param name defines the name of the set\r\n */\r\n public constructor(name: string) {\r\n this.name = name;\r\n }\r\n\r\n /**\r\n * Gets the current class name of the geometry e.g. \"NodeParticleSystemSet\"\r\n * @returns the class name\r\n */\r\n public getClassName(): string {\r\n return \"NodeParticleSystemSet\";\r\n }\r\n\r\n private _initializeBlock(node: NodeParticleBlock, autoConfigure = true) {\r\n if (this.attachedBlocks.indexOf(node) === -1) {\r\n this.attachedBlocks.push(node);\r\n }\r\n\r\n for (const input of node.inputs) {\r\n const connectedPoint = input.connectedPoint;\r\n if (connectedPoint) {\r\n const block = connectedPoint.ownerBlock;\r\n if (block !== node) {\r\n this._initializeBlock(block, autoConfigure);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Builds the particle system set from the defined blocks.\r\n * @param scene defines the hosting scene\r\n * @param verbose defines whether to log detailed information during the build process (false by default)\r\n * @returns a promise that resolves to the built particle system set\r\n */\r\n public async buildAsync(scene: Scene, verbose = false): Promise<ParticleSystemSet> {\r\n return await new Promise<ParticleSystemSet>((resolve) => {\r\n const output = new ParticleSystemSet();\r\n\r\n // Initialize all blocks\r\n for (const block of this._systemBlocks) {\r\n this._initializeBlock(block);\r\n }\r\n\r\n // Build the blocks\r\n for (const block of this.systemBlocks) {\r\n const state = new NodeParticleBuildState();\r\n state.buildId = this._buildId++;\r\n state.scene = scene;\r\n state.verbose = verbose;\r\n\r\n const system = block.createSystem(state);\r\n\r\n // Errors\r\n state.emitErrors();\r\n\r\n output.systems.push(system);\r\n }\r\n\r\n this.onBuildObservable.notifyObservers(this);\r\n\r\n resolve(output);\r\n });\r\n }\r\n\r\n /**\r\n * Clear the current geometry\r\n */\r\n public clear() {\r\n this.attachedBlocks.length = 0;\r\n this._systemBlocks.length = 0;\r\n }\r\n\r\n /**\r\n * Clear the current set and restore it to a default state\r\n */\r\n public setToDefault() {\r\n this.clear();\r\n\r\n this.editorData = null;\r\n\r\n // Main system\r\n const system = new SystemBlock(\"Particle system\");\r\n\r\n // Update position\r\n const updatePositionBlock = new UpdatePositionBlock(\"Update position\");\r\n updatePositionBlock.output.connectTo(system.particle);\r\n\r\n // Contextual inputs\r\n const positionBlock = new ParticleInputBlock(\"Position\");\r\n positionBlock.contextualValue = NodeParticleContextualSources.Position;\r\n const directionBlock = new ParticleInputBlock(\"Scaled direction\");\r\n directionBlock.contextualValue = NodeParticleContextualSources.ScaledDirection;\r\n\r\n // Add\r\n const addBlock = new ParticleMathBlock(\"Add\");\r\n addBlock.operation = ParticleMathBlockOperations.Add;\r\n positionBlock.output.connectTo(addBlock.left);\r\n directionBlock.output.connectTo(addBlock.right);\r\n addBlock.output.connectTo(updatePositionBlock.position);\r\n\r\n // Create particle\r\n const createParticleBlock = new CreateParticleBlock(\"Create particle\");\r\n\r\n // Shape\r\n const emitterShape = new BoxShapeBlock(\"Box shape\");\r\n createParticleBlock.particle.connectTo(emitterShape.particle);\r\n emitterShape.output.connectTo(updatePositionBlock.particle);\r\n\r\n // Texture\r\n const textureBlock = new ParticleTextureSourceBlock(\"Texture\");\r\n textureBlock.texture.connectTo(system.texture);\r\n textureBlock.url = \"https://assets.babylonjs.com/textures/flare.png\";\r\n\r\n this._systemBlocks.push(system);\r\n }\r\n\r\n /**\r\n * Remove a block from the current system set\r\n * @param block defines the block to remove\r\n */\r\n public removeBlock(block: NodeParticleBlock) {\r\n const attachedBlockIndex = this.attachedBlocks.indexOf(block);\r\n if (attachedBlockIndex > -1) {\r\n this.attachedBlocks.splice(attachedBlockIndex, 1);\r\n }\r\n\r\n if (block.isSystem) {\r\n const index = this._systemBlocks.indexOf(block as SystemBlock);\r\n if (index > -1) {\r\n this._systemBlocks.splice(index, 1);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Clear the current graph and load a new one from a serialization object\r\n * @param source defines the JSON representation of the particle set\r\n * @param merge defines whether or not the source must be merged or replace the current content\r\n */\r\n public parseSerializedObject(source: any, merge = false) {\r\n if (!merge) {\r\n this.clear();\r\n }\r\n\r\n const map: { [key: number]: NodeParticleBlock } = {};\r\n\r\n // Create blocks\r\n for (const parsedBlock of source.blocks) {\r\n const blockType = GetClass(parsedBlock.customType);\r\n if (blockType) {\r\n const block: NodeParticleBlock = new blockType();\r\n block._deserialize(parsedBlock);\r\n map[parsedBlock.id] = block;\r\n\r\n this.attachedBlocks.push(block);\r\n\r\n if (block.isSystem) {\r\n this._systemBlocks.push(block as SystemBlock);\r\n }\r\n }\r\n }\r\n\r\n // Reconnect teleportation\r\n for (const block of this.attachedBlocks) {\r\n if (block.isTeleportOut) {\r\n const teleportOut = block as ParticleTeleportOutBlock;\r\n const id = teleportOut._tempEntryPointUniqueId;\r\n if (id) {\r\n const source = map[id] as ParticleTeleportInBlock;\r\n if (source) {\r\n source.attachToEndpoint(teleportOut);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Connections - Starts with input blocks only (except if in \"merge\" mode where we scan all blocks)\r\n for (let blockIndex = 0; blockIndex < source.blocks.length; blockIndex++) {\r\n const parsedBlock = source.blocks[blockIndex];\r\n const block = map[parsedBlock.id];\r\n\r\n if (!block) {\r\n continue;\r\n }\r\n\r\n if (block.inputs.length && parsedBlock.inputs.some((i: any) => i.targetConnectionName) && !merge) {\r\n continue;\r\n }\r\n this._restoreConnections(block, source, map);\r\n }\r\n\r\n // UI related info\r\n if (source.locations || (source.editorData && source.editorData.locations)) {\r\n const locations: {\r\n blockId: number;\r\n x: number;\r\n y: number;\r\n isCollapsed: boolean;\r\n }[] = source.locations || source.editorData.locations;\r\n\r\n for (const location of locations) {\r\n if (map[location.blockId]) {\r\n location.blockId = map[location.blockId].uniqueId;\r\n }\r\n }\r\n\r\n if (merge && this.editorData && this.editorData.locations) {\r\n locations.concat(this.editorData.locations);\r\n }\r\n\r\n if (source.locations) {\r\n this.editorData = {\r\n locations: locations,\r\n };\r\n } else {\r\n this.editorData = source.editorData;\r\n this.editorData.locations = locations;\r\n }\r\n\r\n const blockMap: number[] = [];\r\n\r\n for (const key in map) {\r\n blockMap[key] = map[key].uniqueId;\r\n }\r\n\r\n this.editorData.map = blockMap;\r\n }\r\n\r\n this.comment = source.comment;\r\n }\r\n\r\n private _restoreConnections(block: NodeParticleBlock, source: any, map: { [key: number]: NodeParticleBlock }) {\r\n for (const outputPoint of block.outputs) {\r\n for (const candidate of source.blocks) {\r\n const target = map[candidate.id];\r\n\r\n if (!target) {\r\n continue;\r\n }\r\n\r\n for (const input of candidate.inputs) {\r\n if (map[input.targetBlockId] === block && input.targetConnectionName === outputPoint.name) {\r\n const inputPoint = target.getInputByName(input.inputName);\r\n if (!inputPoint || inputPoint.isConnected) {\r\n continue;\r\n }\r\n\r\n outputPoint.connectTo(inputPoint, true);\r\n this._restoreConnections(target, source, map);\r\n continue;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Serializes this geometry in a JSON representation\r\n * @param selectedBlocks defines the list of blocks to save (if null the whole geometry will be saved)\r\n * @returns the serialized geometry object\r\n */\r\n public serialize(selectedBlocks?: NodeParticleBlock[]): any {\r\n const serializationObject = selectedBlocks ? {} : SerializationHelper.Serialize(this);\r\n serializationObject.editorData = JSON.parse(JSON.stringify(this.editorData)); // Copy\r\n\r\n let blocks: NodeParticleBlock[] = [];\r\n\r\n if (selectedBlocks) {\r\n blocks = selectedBlocks;\r\n } else {\r\n serializationObject.customType = \"BABYLON.NodeParticleSystemSet\";\r\n }\r\n\r\n // Blocks\r\n serializationObject.blocks = [];\r\n\r\n for (const block of blocks) {\r\n serializationObject.blocks.push(block.serialize());\r\n }\r\n\r\n if (!selectedBlocks) {\r\n for (const block of this.attachedBlocks) {\r\n if (blocks.indexOf(block) !== -1) {\r\n continue;\r\n }\r\n serializationObject.blocks.push(block.serialize());\r\n }\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Disposes the resources\r\n */\r\n public dispose(): void {\r\n for (const block of this.attachedBlocks) {\r\n block.dispose();\r\n }\r\n\r\n this.attachedBlocks.length = 0;\r\n this.onBuildObservable.clear();\r\n }\r\n\r\n /**\r\n * Creates a new node particle set set to default basic configuration\r\n * @param name defines the name of the particle set\r\n * @returns a new NodeParticleSystemSet\r\n */\r\n public static CreateDefault(name: string) {\r\n const nodeParticleSet = new NodeParticleSystemSet(name);\r\n\r\n nodeParticleSet.setToDefault();\r\n\r\n return nodeParticleSet;\r\n }\r\n\r\n /**\r\n * Creates a node particle set from parsed data\r\n * @param source defines the JSON representation of the particle set\r\n * @returns a new node particle set\r\n */\r\n public static Parse(source: any): NodeParticleSystemSet {\r\n const nodeParticleSet = SerializationHelper.Parse(() => new NodeParticleSystemSet(source.name), source, null);\r\n\r\n nodeParticleSet.parseSerializedObject(source);\r\n\r\n return nodeParticleSet;\r\n }\r\n\r\n /**\r\n * Creates a node particle set from a snippet saved by the node geometry editor\r\n * @param snippetId defines the snippet to load\r\n * @param nodeParticleSet defines a node particle set to update (instead of creating a new one)\r\n * @returns a promise that will resolve to the new node geometry\r\n */\r\n // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\r\n public static ParseFromSnippetAsync(snippetId: string, nodeParticleSet?: NodeParticleSystemSet): Promise<NodeParticleSystemSet> {\r\n if (snippetId === \"_BLANK\") {\r\n return Promise.resolve(NodeParticleSystemSet.CreateDefault(\"blank\"));\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n const request = new WebRequest();\r\n request.addEventListener(\"readystatechange\", () => {\r\n if (request.readyState == 4) {\r\n if (request.status == 200) {\r\n const snippet = JSON.parse(JSON.parse(request.responseText).jsonPayload);\r\n const serializationObject = JSON.parse(snippet.nodeParticle);\r\n\r\n if (!nodeParticleSet) {\r\n nodeParticleSet = SerializationHelper.Parse(() => new NodeParticleSystemSet(snippetId), serializationObject, null);\r\n }\r\n\r\n nodeParticleSet.parseSerializedObject(serializationObject);\r\n nodeParticleSet.snippetId = snippetId;\r\n\r\n try {\r\n resolve(nodeParticleSet);\r\n } catch (err) {\r\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\r\n reject(err);\r\n }\r\n } else {\r\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\r\n reject(\"Unable to load the snippet \" + snippetId);\r\n }\r\n }\r\n });\r\n\r\n request.open(\"GET\", this.SnippetUrl + \"/\" + snippetId.replace(/#/g, \"/\"));\r\n request.send();\r\n });\r\n }\r\n}\r\n"]}