@babylonjs/core 8.36.0 → 8.37.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (251) hide show
  1. package/Actions/action.d.ts +5 -0
  2. package/Actions/action.js.map +1 -1
  3. package/Actions/actionManager.js +6 -2
  4. package/Actions/actionManager.js.map +1 -1
  5. package/Animations/runtimeAnimation.d.ts +0 -2
  6. package/Animations/runtimeAnimation.js +3 -5
  7. package/Animations/runtimeAnimation.js.map +1 -1
  8. package/AudioV2/abstractAudio/abstractSound.js +1 -0
  9. package/AudioV2/abstractAudio/abstractSound.js.map +1 -1
  10. package/AudioV2/abstractAudio/audioEngineV2.d.ts +0 -4
  11. package/AudioV2/abstractAudio/audioEngineV2.js +0 -4
  12. package/AudioV2/abstractAudio/audioEngineV2.js.map +1 -1
  13. package/AudioV2/abstractAudio/subNodes/volumeAudioSubNode.js +1 -1
  14. package/AudioV2/abstractAudio/subNodes/volumeAudioSubNode.js.map +1 -1
  15. package/AudioV2/audioParameter.d.ts +5 -1
  16. package/AudioV2/audioParameter.js +4 -0
  17. package/AudioV2/audioParameter.js.map +1 -1
  18. package/AudioV2/webAudio/components/webAudioParameterComponent.d.ts +0 -18
  19. package/AudioV2/webAudio/components/webAudioParameterComponent.js +7 -67
  20. package/AudioV2/webAudio/components/webAudioParameterComponent.js.map +1 -1
  21. package/AudioV2/webAudio/webAudioStaticSound.js +8 -3
  22. package/AudioV2/webAudio/webAudioStaticSound.js.map +1 -1
  23. package/Cameras/camera.js +1 -0
  24. package/Cameras/camera.js.map +1 -1
  25. package/Cameras/targetCamera.js +0 -4
  26. package/Cameras/targetCamera.js.map +1 -1
  27. package/Collisions/gpuPicker.js +0 -1
  28. package/Collisions/gpuPicker.js.map +1 -1
  29. package/Culling/ray.core.js +1 -1
  30. package/Culling/ray.core.js.map +1 -1
  31. package/Debug/debugLayer.d.ts +1 -1
  32. package/Debug/debugLayer.js.map +1 -1
  33. package/Decorators/nodeDecorator.d.ts +3 -1
  34. package/Decorators/nodeDecorator.js +2 -0
  35. package/Decorators/nodeDecorator.js.map +1 -1
  36. package/Engines/Native/nativeInterfaces.d.ts +1 -1
  37. package/Engines/Native/nativeInterfaces.js.map +1 -1
  38. package/Engines/WebGPU/webgpuCacheSampler.js +4 -0
  39. package/Engines/WebGPU/webgpuCacheSampler.js.map +1 -1
  40. package/Engines/abstractEngine.js +2 -2
  41. package/Engines/abstractEngine.js.map +1 -1
  42. package/Engines/nativeEngine.js +12 -13
  43. package/Engines/nativeEngine.js.map +1 -1
  44. package/FrameGraph/Node/Blocks/PostProcesses/anaglyphPostProcessBlock.d.ts +2 -2
  45. package/FrameGraph/Node/Blocks/PostProcesses/anaglyphPostProcessBlock.js +2 -2
  46. package/FrameGraph/Node/Blocks/PostProcesses/anaglyphPostProcessBlock.js.map +1 -1
  47. package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.d.ts +1 -1
  48. package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.js +2 -2
  49. package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.js.map +1 -1
  50. package/FrameGraph/Node/Blocks/PostProcesses/baseWithPropertiesPostProcessBlock.d.ts +44 -0
  51. package/FrameGraph/Node/Blocks/PostProcesses/baseWithPropertiesPostProcessBlock.js +152 -0
  52. package/FrameGraph/Node/Blocks/PostProcesses/baseWithPropertiesPostProcessBlock.js.map +1 -0
  53. package/FrameGraph/Node/Blocks/PostProcesses/blackAndWhitePostProcessBlock.d.ts +2 -2
  54. package/FrameGraph/Node/Blocks/PostProcesses/blackAndWhitePostProcessBlock.js +2 -2
  55. package/FrameGraph/Node/Blocks/PostProcesses/blackAndWhitePostProcessBlock.js.map +1 -1
  56. package/FrameGraph/Node/Blocks/PostProcesses/blurPostProcessBlock.d.ts +2 -2
  57. package/FrameGraph/Node/Blocks/PostProcesses/blurPostProcessBlock.js +2 -2
  58. package/FrameGraph/Node/Blocks/PostProcesses/blurPostProcessBlock.js.map +1 -1
  59. package/FrameGraph/Node/Blocks/PostProcesses/chromaticAberrationPostProcessBlock.d.ts +2 -2
  60. package/FrameGraph/Node/Blocks/PostProcesses/chromaticAberrationPostProcessBlock.js +2 -2
  61. package/FrameGraph/Node/Blocks/PostProcesses/chromaticAberrationPostProcessBlock.js.map +1 -1
  62. package/FrameGraph/Node/Blocks/PostProcesses/circleOfConfusionPostProcessBlock.d.ts +2 -2
  63. package/FrameGraph/Node/Blocks/PostProcesses/circleOfConfusionPostProcessBlock.js +2 -2
  64. package/FrameGraph/Node/Blocks/PostProcesses/circleOfConfusionPostProcessBlock.js.map +1 -1
  65. package/FrameGraph/Node/Blocks/PostProcesses/colorCorrectionPostProcessBlock.d.ts +2 -2
  66. package/FrameGraph/Node/Blocks/PostProcesses/colorCorrectionPostProcessBlock.js +2 -2
  67. package/FrameGraph/Node/Blocks/PostProcesses/colorCorrectionPostProcessBlock.js.map +1 -1
  68. package/FrameGraph/Node/Blocks/PostProcesses/convolutionPostProcessBlock.d.ts +2 -2
  69. package/FrameGraph/Node/Blocks/PostProcesses/convolutionPostProcessBlock.js +2 -2
  70. package/FrameGraph/Node/Blocks/PostProcesses/convolutionPostProcessBlock.js.map +1 -1
  71. package/FrameGraph/Node/Blocks/PostProcesses/extractHighlightsPostProcessBlock.d.ts +2 -2
  72. package/FrameGraph/Node/Blocks/PostProcesses/extractHighlightsPostProcessBlock.js +2 -2
  73. package/FrameGraph/Node/Blocks/PostProcesses/extractHighlightsPostProcessBlock.js.map +1 -1
  74. package/FrameGraph/Node/Blocks/PostProcesses/filterPostProcessBlock.d.ts +2 -2
  75. package/FrameGraph/Node/Blocks/PostProcesses/filterPostProcessBlock.js +2 -2
  76. package/FrameGraph/Node/Blocks/PostProcesses/filterPostProcessBlock.js.map +1 -1
  77. package/FrameGraph/Node/Blocks/PostProcesses/fxaaPostProcessBlock.d.ts +2 -2
  78. package/FrameGraph/Node/Blocks/PostProcesses/fxaaPostProcessBlock.js +2 -2
  79. package/FrameGraph/Node/Blocks/PostProcesses/fxaaPostProcessBlock.js.map +1 -1
  80. package/FrameGraph/Node/Blocks/PostProcesses/grainPostProcessBlock.d.ts +2 -2
  81. package/FrameGraph/Node/Blocks/PostProcesses/grainPostProcessBlock.js +2 -2
  82. package/FrameGraph/Node/Blocks/PostProcesses/grainPostProcessBlock.js.map +1 -1
  83. package/FrameGraph/Node/Blocks/PostProcesses/imageProcessingPostProcessBlock.d.ts +2 -2
  84. package/FrameGraph/Node/Blocks/PostProcesses/imageProcessingPostProcessBlock.js +3 -3
  85. package/FrameGraph/Node/Blocks/PostProcesses/imageProcessingPostProcessBlock.js.map +1 -1
  86. package/FrameGraph/Node/Blocks/PostProcesses/motionBlurPostProcessBlock.d.ts +2 -2
  87. package/FrameGraph/Node/Blocks/PostProcesses/motionBlurPostProcessBlock.js +2 -2
  88. package/FrameGraph/Node/Blocks/PostProcesses/motionBlurPostProcessBlock.js.map +1 -1
  89. package/FrameGraph/Node/Blocks/PostProcesses/passPostProcessBlock.d.ts +3 -3
  90. package/FrameGraph/Node/Blocks/PostProcesses/passPostProcessBlock.js +3 -3
  91. package/FrameGraph/Node/Blocks/PostProcesses/passPostProcessBlock.js.map +1 -1
  92. package/FrameGraph/Node/Blocks/PostProcesses/screenSpaceCurvaturePostProcessBlock.d.ts +2 -2
  93. package/FrameGraph/Node/Blocks/PostProcesses/screenSpaceCurvaturePostProcessBlock.js +2 -2
  94. package/FrameGraph/Node/Blocks/PostProcesses/screenSpaceCurvaturePostProcessBlock.js.map +1 -1
  95. package/FrameGraph/Node/Blocks/PostProcesses/sharpenPostProcessBlock.d.ts +2 -2
  96. package/FrameGraph/Node/Blocks/PostProcesses/sharpenPostProcessBlock.js +4 -4
  97. package/FrameGraph/Node/Blocks/PostProcesses/sharpenPostProcessBlock.js.map +1 -1
  98. package/FrameGraph/Node/Blocks/PostProcesses/taaPostProcessBlock.d.ts +2 -2
  99. package/FrameGraph/Node/Blocks/PostProcesses/taaPostProcessBlock.js +2 -2
  100. package/FrameGraph/Node/Blocks/PostProcesses/taaPostProcessBlock.js.map +1 -1
  101. package/FrameGraph/Node/Blocks/PostProcesses/tonemapPostProcessBlock.d.ts +2 -2
  102. package/FrameGraph/Node/Blocks/PostProcesses/tonemapPostProcessBlock.js +2 -2
  103. package/FrameGraph/Node/Blocks/PostProcesses/tonemapPostProcessBlock.js.map +1 -1
  104. package/FrameGraph/Node/Blocks/Rendering/csmShadowGeneratorBlock.js +1 -1
  105. package/FrameGraph/Node/Blocks/Rendering/csmShadowGeneratorBlock.js.map +1 -1
  106. package/FrameGraph/Node/Blocks/Rendering/shadowGeneratorBlock.js +1 -1
  107. package/FrameGraph/Node/Blocks/Rendering/shadowGeneratorBlock.js.map +1 -1
  108. package/FrameGraph/Node/Blocks/Textures/copyTextureBlock.d.ts +20 -1
  109. package/FrameGraph/Node/Blocks/Textures/copyTextureBlock.js +83 -0
  110. package/FrameGraph/Node/Blocks/Textures/copyTextureBlock.js.map +1 -1
  111. package/FrameGraph/Node/Blocks/index.d.ts +1 -0
  112. package/FrameGraph/Node/Blocks/index.js +1 -0
  113. package/FrameGraph/Node/Blocks/index.js.map +1 -1
  114. package/FrameGraph/Tasks/PostProcesses/postProcessTask.d.ts +7 -1
  115. package/FrameGraph/Tasks/PostProcesses/postProcessTask.js +8 -2
  116. package/FrameGraph/Tasks/PostProcesses/postProcessTask.js.map +1 -1
  117. package/FrameGraph/Tasks/PostProcesses/taaTask.d.ts +1 -1
  118. package/FrameGraph/Tasks/PostProcesses/taaTask.js.map +1 -1
  119. package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.d.ts +4 -4
  120. package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js +3 -4
  121. package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js.map +1 -1
  122. package/FrameGraph/Tasks/Rendering/objectRendererTask.d.ts +4 -4
  123. package/FrameGraph/Tasks/Rendering/objectRendererTask.js +3 -3
  124. package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
  125. package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.d.ts +2 -3
  126. package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.js +1 -2
  127. package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.js.map +1 -1
  128. package/FrameGraph/Tasks/Rendering/utilityLayerRendererTask.d.ts +3 -1
  129. package/FrameGraph/Tasks/Rendering/utilityLayerRendererTask.js +11 -1
  130. package/FrameGraph/Tasks/Rendering/utilityLayerRendererTask.js.map +1 -1
  131. package/FrameGraph/Tasks/Texture/copyToTextureTask.d.ts +11 -1
  132. package/FrameGraph/Tasks/Texture/copyToTextureTask.js +10 -1
  133. package/FrameGraph/Tasks/Texture/copyToTextureTask.js.map +1 -1
  134. package/FrameGraph/frameGraphContext.d.ts +8 -1
  135. package/FrameGraph/frameGraphContext.js +9 -0
  136. package/FrameGraph/frameGraphContext.js.map +1 -1
  137. package/FrameGraph/frameGraphRenderContext.d.ts +5 -2
  138. package/FrameGraph/frameGraphRenderContext.js +32 -7
  139. package/FrameGraph/frameGraphRenderContext.js.map +1 -1
  140. package/FrameGraph/frameGraphTask.d.ts +8 -0
  141. package/FrameGraph/frameGraphTask.js +12 -0
  142. package/FrameGraph/frameGraphTask.js.map +1 -1
  143. package/Materials/PBR/openpbrMaterial.js +2 -1
  144. package/Materials/PBR/openpbrMaterial.js.map +1 -1
  145. package/Materials/Textures/mirrorTexture.js +4 -1
  146. package/Materials/Textures/mirrorTexture.js.map +1 -1
  147. package/Materials/floatingOriginMatrixOverrides.js +19 -0
  148. package/Materials/floatingOriginMatrixOverrides.js.map +1 -1
  149. package/Maths/math.like.d.ts +2 -7
  150. package/Maths/math.like.js.map +1 -1
  151. package/Maths/math.vector.functions.d.ts +7 -10
  152. package/Maths/math.vector.functions.js +3 -14
  153. package/Maths/math.vector.functions.js.map +1 -1
  154. package/Meshes/Node/Blocks/randomBlock.js +11 -11
  155. package/Meshes/Node/Blocks/randomBlock.js.map +1 -1
  156. package/Misc/copyTextureToTexture.d.ts +18 -1
  157. package/Misc/copyTextureToTexture.js +31 -2
  158. package/Misc/copyTextureToTexture.js.map +1 -1
  159. package/Particles/EmitterTypes/coneParticleEmitter.d.ts +3 -3
  160. package/Particles/EmitterTypes/coneParticleEmitter.js +11 -11
  161. package/Particles/EmitterTypes/coneParticleEmitter.js.map +1 -1
  162. package/Particles/EmitterTypes/customParticleEmitter.d.ts +5 -3
  163. package/Particles/EmitterTypes/customParticleEmitter.js +8 -6
  164. package/Particles/EmitterTypes/customParticleEmitter.js.map +1 -1
  165. package/Particles/EmitterTypes/sphereParticleEmitter.d.ts +3 -1
  166. package/Particles/EmitterTypes/sphereParticleEmitter.js +7 -1
  167. package/Particles/EmitterTypes/sphereParticleEmitter.js.map +1 -1
  168. package/Particles/Node/Blocks/Emitters/boxShapeBlock.d.ts +1 -1
  169. package/Particles/Node/Blocks/Emitters/boxShapeBlock.js +2 -1
  170. package/Particles/Node/Blocks/Emitters/boxShapeBlock.js.map +1 -1
  171. package/Particles/Node/Blocks/Emitters/coneShapeBlock.d.ts +6 -4
  172. package/Particles/Node/Blocks/Emitters/coneShapeBlock.js +34 -35
  173. package/Particles/Node/Blocks/Emitters/coneShapeBlock.js.map +1 -1
  174. package/Particles/Node/Blocks/Emitters/createParticleBlock.d.ts +0 -4
  175. package/Particles/Node/Blocks/Emitters/createParticleBlock.js +2 -9
  176. package/Particles/Node/Blocks/Emitters/createParticleBlock.js.map +1 -1
  177. package/Particles/Node/Blocks/Emitters/customShapeBlock.d.ts +13 -9
  178. package/Particles/Node/Blocks/Emitters/customShapeBlock.js +36 -23
  179. package/Particles/Node/Blocks/Emitters/customShapeBlock.js.map +1 -1
  180. package/Particles/Node/Blocks/Emitters/cylinderShapeBlock.d.ts +10 -1
  181. package/Particles/Node/Blocks/Emitters/cylinderShapeBlock.js +50 -17
  182. package/Particles/Node/Blocks/Emitters/cylinderShapeBlock.js.map +1 -1
  183. package/Particles/Node/Blocks/Emitters/emitters.functions.d.ts +6 -0
  184. package/Particles/Node/Blocks/Emitters/emitters.functions.js +13 -0
  185. package/Particles/Node/Blocks/Emitters/emitters.functions.js.map +1 -0
  186. package/Particles/Node/Blocks/Emitters/meshShapeBlock.d.ts +2 -2
  187. package/Particles/Node/Blocks/Emitters/meshShapeBlock.js +5 -1
  188. package/Particles/Node/Blocks/Emitters/meshShapeBlock.js.map +1 -1
  189. package/Particles/Node/Blocks/Emitters/pointShapeBlock.d.ts +1 -1
  190. package/Particles/Node/Blocks/Emitters/pointShapeBlock.js +3 -1
  191. package/Particles/Node/Blocks/Emitters/pointShapeBlock.js.map +1 -1
  192. package/Particles/Node/Blocks/Emitters/sphereShapeBlock.d.ts +16 -1
  193. package/Particles/Node/Blocks/Emitters/sphereShapeBlock.js +67 -14
  194. package/Particles/Node/Blocks/Emitters/sphereShapeBlock.js.map +1 -1
  195. package/Particles/Node/Blocks/particleInputBlock.js +1 -0
  196. package/Particles/Node/Blocks/particleInputBlock.js.map +1 -1
  197. package/Particles/Node/Blocks/particleRandomBlock.js +10 -10
  198. package/Particles/Node/Blocks/particleRandomBlock.js.map +1 -1
  199. package/Particles/Node/Blocks/systemBlock.d.ts +3 -3
  200. package/Particles/Node/Blocks/systemBlock.js +10 -6
  201. package/Particles/Node/Blocks/systemBlock.js.map +1 -1
  202. package/Particles/Node/Enums/nodeParticleContextualSources.d.ts +3 -1
  203. package/Particles/Node/Enums/nodeParticleContextualSources.js +2 -0
  204. package/Particles/Node/Enums/nodeParticleContextualSources.js.map +1 -1
  205. package/Particles/Node/nodeParticleBuildState.js +5 -0
  206. package/Particles/Node/nodeParticleBuildState.js.map +1 -1
  207. package/Particles/Node/nodeParticleSystemSet.helper.js +132 -36
  208. package/Particles/Node/nodeParticleSystemSet.helper.js.map +1 -1
  209. package/Particles/Node/nodeParticleSystemSet.js +1 -1
  210. package/Particles/Node/nodeParticleSystemSet.js.map +1 -1
  211. package/Particles/thinParticleSystem.function.d.ts +2 -2
  212. package/Particles/thinParticleSystem.function.js +2 -2
  213. package/Particles/thinParticleSystem.function.js.map +1 -1
  214. package/Physics/v2/IPhysicsEnginePlugin.d.ts +1 -1
  215. package/Physics/v2/IPhysicsEnginePlugin.js.map +1 -1
  216. package/Physics/v2/Plugins/havokPlugin.d.ts +27 -4
  217. package/Physics/v2/Plugins/havokPlugin.js +72 -8
  218. package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
  219. package/Physics/v2/physicsEngine.d.ts +12 -2
  220. package/Physics/v2/physicsEngine.js +15 -1
  221. package/Physics/v2/physicsEngine.js.map +1 -1
  222. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js +2 -1
  223. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js.map +1 -1
  224. package/Rendering/prePassRenderer.js +4 -1
  225. package/Rendering/prePassRenderer.js.map +1 -1
  226. package/Shaders/copyTextureToTexture.fragment.js +2 -2
  227. package/Shaders/copyTextureToTexture.fragment.js.map +1 -1
  228. package/Shaders/picking.fragment.js +1 -1
  229. package/Shaders/picking.fragment.js.map +1 -1
  230. package/Shaders/picking.vertex.js +1 -1
  231. package/Shaders/picking.vertex.js.map +1 -1
  232. package/ShadersWGSL/copyTextureToTexture.fragment.js +3 -3
  233. package/ShadersWGSL/copyTextureToTexture.fragment.js.map +1 -1
  234. package/ShadersWGSL/picking.fragment.js +1 -1
  235. package/ShadersWGSL/picking.fragment.js.map +1 -1
  236. package/ShadersWGSL/picking.vertex.js +1 -1
  237. package/ShadersWGSL/picking.vertex.js.map +1 -1
  238. package/Sprites/spriteRenderer.js +10 -8
  239. package/Sprites/spriteRenderer.js.map +1 -1
  240. package/XR/features/WebXRLightEstimation.d.ts +8 -0
  241. package/XR/features/WebXRLightEstimation.js +6 -1
  242. package/XR/features/WebXRLightEstimation.js.map +1 -1
  243. package/XR/webXRSessionManager.js +4 -0
  244. package/XR/webXRSessionManager.js.map +1 -1
  245. package/assetContainer.d.ts +1 -1
  246. package/assetContainer.js +1 -1
  247. package/assetContainer.js.map +1 -1
  248. package/package.json +1 -1
  249. package/scene.d.ts +2 -4
  250. package/scene.js +9 -12
  251. package/scene.js.map +1 -1
@@ -1,7 +1,7 @@
1
- import { Vector2 } from "../../Maths/math.vector.js";
2
- import { NodeParticleBlockConnectionPointTypes } from "./Enums/nodeParticleBlockConnectionPointTypes.js";
1
+ import { Vector2, Vector3 } from "../../Maths/math.vector.js";
3
2
  import { NodeParticleSystemSet } from "./nodeParticleSystemSet.js";
4
3
  import { NodeParticleContextualSources } from "./Enums/nodeParticleContextualSources.js";
4
+ import { NodeParticleSystemSources } from "./Enums/nodeParticleSystemSources.js";
5
5
  import { ParticleConverterBlock } from "./Blocks/particleConverterBlock.js";
6
6
  import { ParticleGradientBlock } from "./Blocks/particleGradientBlock.js";
7
7
  import { ParticleGradientValueBlock } from "./Blocks/particleGradientValueBlock.js";
@@ -14,10 +14,13 @@ import { CreateParticleBlock } from "./Blocks/Emitters/createParticleBlock.js";
14
14
  import { BoxShapeBlock } from "./Blocks/Emitters/boxShapeBlock.js";
15
15
  import { ConeShapeBlock } from "./Blocks/Emitters/coneShapeBlock.js";
16
16
  import { CylinderShapeBlock } from "./Blocks/Emitters/cylinderShapeBlock.js";
17
+ import { CustomShapeBlock } from "./Blocks/Emitters/customShapeBlock.js";
17
18
  import { MeshShapeBlock } from "./Blocks/Emitters/meshShapeBlock.js";
18
19
  import { PointShapeBlock } from "./Blocks/Emitters/pointShapeBlock.js";
19
20
  import { SphereShapeBlock } from "./Blocks/Emitters/sphereShapeBlock.js";
21
+ import { UpdateAngleBlock } from "./Blocks/Update/updateAngleBlock.js";
20
22
  import { UpdateColorBlock } from "./Blocks/Update/updateColorBlock.js";
23
+ import { UpdateDirectionBlock } from "./Blocks/Update/updateDirectionBlock.js";
21
24
  import { UpdatePositionBlock } from "./Blocks/Update/updatePositionBlock.js";
22
25
  /**
23
26
  * Converts a ParticleSystem to a NodeParticleSystemSet.
@@ -45,12 +48,11 @@ async function _ExtractDatafromParticleSystemAsync(newSet, oldSystem) {
45
48
  // Emitter Shape block
46
49
  const shapeBlock = _CreateEmitterShapeBlock(oldSystem);
47
50
  createParticleBlock.particle.connectTo(shapeBlock.particle);
48
- // Position update
49
- const positionUpdateBlock = _CreatePositionUpdateBlock();
50
- shapeBlock.output.connectTo(positionUpdateBlock.particle);
51
+ // Update the particle position
52
+ const positionUpdatedParticle = _CreateUpdateSystem(shapeBlock.output, oldSystem);
51
53
  // Color update
52
54
  const colorUpdateBlock = _CreateColorUpdateBlock(oldSystem, createParticleBlock);
53
- positionUpdateBlock.output.connectTo(colorUpdateBlock.particle);
55
+ positionUpdatedParticle.connectTo(colorUpdateBlock.particle);
54
56
  // System block
55
57
  const newSystem = _CreateSystemBlock(oldSystem);
56
58
  colorUpdateBlock.output.connectTo(newSystem.particle);
@@ -59,10 +61,8 @@ async function _ExtractDatafromParticleSystemAsync(newSet, oldSystem) {
59
61
  }
60
62
  function _CreateSystemBlock(oldSystem) {
61
63
  const newSystem = new SystemBlock(oldSystem.name);
62
- // Translation pivot
63
64
  _CreateAndConnectInput("Translation pivot", oldSystem.translationPivot, newSystem.translationPivot);
64
- // Gravity
65
- _CreateAndConnectInput("Gravity", oldSystem.gravity, newSystem.gravity);
65
+ _CreateAndConnectInput("Texture mask", oldSystem.textureMask, newSystem.textureMask);
66
66
  newSystem.emitRate = oldSystem.emitRate;
67
67
  newSystem.manualEmitCount = oldSystem.manualEmitCount;
68
68
  newSystem.blendMode = oldSystem.blendMode;
@@ -109,11 +109,6 @@ function _CreateCreateParticleBlock(oldSystem) {
109
109
  _CreateAndConnectInput("Min Emit Power", oldSystem.minEmitPower, randomEmitPowerBlock.min);
110
110
  _CreateAndConnectInput("Max Emit Power", oldSystem.maxEmitPower, randomEmitPowerBlock.max);
111
111
  randomEmitPowerBlock.output.connectTo(createParticleBlock.emitPower);
112
- // Angular speed
113
- const randomAngularSpeedBlock = new ParticleRandomBlock("Random Angular Speed");
114
- _CreateAndConnectInput("Min Angular Speed", oldSystem.minAngularSpeed, randomAngularSpeedBlock.min);
115
- _CreateAndConnectInput("Max Angular Speed", oldSystem.maxAngularSpeed, randomAngularSpeedBlock.max);
116
- randomAngularSpeedBlock.output.connectTo(createParticleBlock.angularSpeed);
117
112
  // Angle (rotation)
118
113
  const randomRotationBlock = new ParticleRandomBlock("Random Rotation");
119
114
  _CreateAndConnectInput("Min Rotation", oldSystem.minInitialRotation, randomRotationBlock.min);
@@ -147,17 +142,22 @@ function _CreateEmitterShapeBlock(oldSystem) {
147
142
  const source = emitter;
148
143
  shapeBlock = new ConeShapeBlock("Cone Shape");
149
144
  const target = shapeBlock;
145
+ target.emitFromSpawnPointOnly = source.emitFromSpawnPointOnly;
150
146
  _CreateAndConnectInput("Radius", source.radius, target.radius);
151
147
  _CreateAndConnectInput("Angle", source.angle, target.angle);
152
148
  _CreateAndConnectInput("Radius Range", source.radiusRange, target.radiusRange);
153
149
  _CreateAndConnectInput("Height Range", source.heightRange, target.heightRange);
154
- _CreateAndConnectInput("Emit From Spawn Point Only", source.emitFromSpawnPointOnly ? 1 : 0, target.emitFromSpawnPointOnly, NodeParticleBlockConnectionPointTypes.Int);
155
150
  _CreateAndConnectInput("Direction Randomizer", source.directionRandomizer, target.directionRandomizer);
156
151
  break;
157
152
  }
158
153
  case "CustomParticleEmitter": {
159
- // Custom emitter is not supported in nodes yet
160
- throw new Error("CustomParticleEmitter is not supported in Node Particle System.");
154
+ const source = emitter;
155
+ shapeBlock = new CustomShapeBlock("Custom Shape");
156
+ const target = shapeBlock;
157
+ target.particlePositionGenerator = source.particlePositionGenerator;
158
+ target.particleDestinationGenerator = source.particleDestinationGenerator;
159
+ target.particleDirectionGenerator = source.particleDirectionGenerator;
160
+ break;
161
161
  }
162
162
  case "CylinderParticleEmitter": {
163
163
  const source = emitter;
@@ -169,14 +169,32 @@ function _CreateEmitterShapeBlock(oldSystem) {
169
169
  _CreateAndConnectInput("Direction Randomizer", source.directionRandomizer, target.directionRandomizer);
170
170
  break;
171
171
  }
172
+ case "CylinderDirectedParticleEmitter": {
173
+ const source = emitter;
174
+ shapeBlock = new CylinderShapeBlock("Cylinder Shape");
175
+ const target = shapeBlock;
176
+ _CreateAndConnectInput("Height", source.height, target.height);
177
+ _CreateAndConnectInput("Radius", source.radius, target.radius);
178
+ _CreateAndConnectInput("Radius Range", source.radiusRange, target.radiusRange);
179
+ _CreateAndConnectInput("Direction 1", source.direction1, target.direction1);
180
+ _CreateAndConnectInput("Direction 2", source.direction2, target.direction2);
181
+ break;
182
+ }
172
183
  case "HemisphericParticleEmitter": {
173
- // Hemispheric emitter is not supported in nodes yet
174
- throw new Error("HemisphericParticleEmitter is not supported in Node Particle System.");
184
+ const source = emitter;
185
+ shapeBlock = new SphereShapeBlock("Sphere Shape");
186
+ const target = shapeBlock;
187
+ target.isHemispheric = true;
188
+ _CreateAndConnectInput("Radius", source.radius, target.radius);
189
+ _CreateAndConnectInput("Radius Range", source.radiusRange, target.radiusRange);
190
+ _CreateAndConnectInput("Direction Randomizer", source.directionRandomizer, target.directionRandomizer);
191
+ break;
175
192
  }
176
193
  case "MeshParticleEmitter": {
177
194
  const source = emitter;
178
195
  shapeBlock = new MeshShapeBlock("Mesh Shape");
179
196
  const target = shapeBlock;
197
+ target.useMeshNormalsForDirection = source.useMeshNormalsForDirection;
180
198
  _CreateAndConnectInput("Direction 1", source.direction1, target.direction1);
181
199
  _CreateAndConnectInput("Direction 2", source.direction2, target.direction2);
182
200
  target.mesh = source.mesh;
@@ -199,21 +217,81 @@ function _CreateEmitterShapeBlock(oldSystem) {
199
217
  _CreateAndConnectInput("Direction Randomizer", source.directionRandomizer, target.directionRandomizer);
200
218
  break;
201
219
  }
220
+ case "SphereDirectedParticleEmitter": {
221
+ const source = emitter;
222
+ shapeBlock = new SphereShapeBlock("Sphere Shape");
223
+ const target = shapeBlock;
224
+ _CreateAndConnectInput("Radius", source.radius, target.radius);
225
+ _CreateAndConnectInput("Radius Range", source.radiusRange, target.radiusRange);
226
+ _CreateAndConnectInput("Direction1", source.direction1, target.direction1);
227
+ _CreateAndConnectInput("Direction2", source.direction2, target.direction2);
228
+ break;
229
+ }
202
230
  }
203
231
  if (!shapeBlock) {
204
232
  throw new Error(`Unsupported particle emitter type: ${emitter.getClassName()}`);
205
233
  }
206
234
  return shapeBlock;
207
235
  }
208
- function _CreatePositionUpdateBlock() {
209
- // Default position update
210
- const positionUpdateBlock = new UpdatePositionBlock("Position update");
211
- const addPositionBlock = new ParticleMathBlock("Add Position");
212
- addPositionBlock.operation = ParticleMathBlockOperations.Add;
213
- _CreateAndConnectContextual("Position", NodeParticleContextualSources.Position, addPositionBlock.left);
214
- _CreateAndConnectContextual("Scaled Direction", NodeParticleContextualSources.ScaledDirection, addPositionBlock.right);
215
- addPositionBlock.output.connectTo(positionUpdateBlock.position);
216
- return positionUpdateBlock;
236
+ function _CreateUpdateSystem(inputParticle, oldSystem) {
237
+ let outputUpdate = inputParticle;
238
+ if (oldSystem.minAngularSpeed !== 0 || oldSystem.maxAngularSpeed !== 0) {
239
+ outputUpdate = _CreateAngularSpeedUpdate(outputUpdate, oldSystem.minAngularSpeed, oldSystem.maxAngularSpeed);
240
+ }
241
+ outputUpdate = _CreatePositionUpdate(outputUpdate, oldSystem.isLocal);
242
+ if (oldSystem.gravity.equalsToFloats(0, 0, 0) === false) {
243
+ outputUpdate = _CreateGravityUpdate(outputUpdate, oldSystem.gravity);
244
+ }
245
+ return outputUpdate;
246
+ }
247
+ function _CreateAngularSpeedUpdate(inputParticle, minAngularSpeed, maxAngularSpeed) {
248
+ // Random value between for the angular speed of the particle
249
+ const randomAngularSpeedBlock = new ParticleRandomBlock("Random Angular Speed");
250
+ _CreateAndConnectInput("Min Angular Speed", minAngularSpeed, randomAngularSpeedBlock.min);
251
+ _CreateAndConnectInput("Max Angular Speed", maxAngularSpeed, randomAngularSpeedBlock.max);
252
+ // Create the angular speed delta
253
+ const angleSpeedDeltaOutput = _CreateDeltaModifiedInput("Angular Speed", randomAngularSpeedBlock.output);
254
+ // Add it to the angle
255
+ const addAngle = new ParticleMathBlock("Add Angular Speed to Angle");
256
+ addAngle.operation = ParticleMathBlockOperations.Add;
257
+ _CreateAndConnectContextualSource("Angle", NodeParticleContextualSources.Angle, addAngle.left);
258
+ angleSpeedDeltaOutput.connectTo(addAngle.right);
259
+ // Update the particle angle
260
+ const updateAngle = new UpdateAngleBlock("Angle Update with Angular Speed");
261
+ inputParticle.connectTo(updateAngle.particle);
262
+ addAngle.output.connectTo(updateAngle.angle);
263
+ return updateAngle.output;
264
+ }
265
+ function _CreatePositionUpdate(inputParticle, isLocal) {
266
+ // Update the particle position
267
+ const updatePosition = new UpdatePositionBlock("Position Update");
268
+ inputParticle.connectTo(updatePosition.particle);
269
+ if (isLocal) {
270
+ _CreateAndConnectContextualSource("Local Position Updated", NodeParticleContextualSources.LocalPositionUpdated, updatePosition.position);
271
+ }
272
+ else {
273
+ // Calculate the new position
274
+ const addPositionBlock = new ParticleMathBlock("Add Position");
275
+ addPositionBlock.operation = ParticleMathBlockOperations.Add;
276
+ _CreateAndConnectContextualSource("Position", NodeParticleContextualSources.Position, addPositionBlock.left);
277
+ _CreateAndConnectContextualSource("Scaled Direction", NodeParticleContextualSources.ScaledDirection, addPositionBlock.right);
278
+ addPositionBlock.output.connectTo(updatePosition.position);
279
+ }
280
+ return updatePosition.output;
281
+ }
282
+ function _CreateGravityUpdate(inputParticle, gravity) {
283
+ // Create the gravity delta
284
+ const gravityDeltaOutput = _CreateDeltaModifiedInput("Gravity", gravity);
285
+ // Add it to the direction
286
+ const addDirectionBlock = new ParticleMathBlock("Add Gravity to Direction");
287
+ addDirectionBlock.operation = ParticleMathBlockOperations.Add;
288
+ _CreateAndConnectContextualSource("Direction", NodeParticleContextualSources.Direction, addDirectionBlock.left);
289
+ gravityDeltaOutput.connectTo(addDirectionBlock.right);
290
+ // Update the particle direction
291
+ const updateDirection = new UpdateDirectionBlock("Direction Update with Gravity");
292
+ inputParticle.connectTo(updateDirection.particle);
293
+ addDirectionBlock.output.connectTo(updateDirection.direction);
294
+ return updateDirection.output;
217
295
  }
218
296
  function _CreateColorUpdateBlock(oldSystem, createParticleBlock) {
219
297
  if (!oldSystem) {
@@ -226,7 +304,7 @@ function _CreateColorUpdateBlock(oldSystem, createParticleBlock) {
226
304
  colorBlock = _CreateGradientColorUpdate(oldSystem, colorGradients, createParticleBlock);
227
305
  }
228
306
  else {
229
- colorBlock = _CreateBasicColorUpdate();
307
+ colorBlock = _CreateBasicColorUpdate(oldSystem, createParticleBlock);
230
308
  }
231
309
  // Clamp alpha >= 0
232
310
  const clampedColor = _ClampUpdateColorAlpha(colorBlock);
@@ -237,7 +315,7 @@ function _CreateColorUpdateBlock(oldSystem, createParticleBlock) {
237
315
  }
238
316
  function _CreateGradientColorUpdate(oldSystem, gradient, createParticleBlock) {
239
317
  const colorGradientBlock = new ParticleGradientBlock("Color Gradient");
240
- _CreateAndConnectContextual("gradient", NodeParticleContextualSources.Age, colorGradientBlock.gradient);
318
+ _CreateAndConnectContextualSource("gradient", NodeParticleContextualSources.Age, colorGradientBlock.gradient);
241
319
  let tempColor = null;
242
320
  let colorStart = null;
243
321
  let colorEnd = null;
@@ -272,11 +350,12 @@ function _CreateGradientColorUpdate(oldSystem, gradient, createParticleBlock) {
272
350
  _UpdateCreateParticleColor(oldSystem, colorStart, colorEnd, createParticleBlock);
273
351
  return colorGradientBlock;
274
352
  }
275
- function _CreateBasicColorUpdate() {
353
+ function _CreateBasicColorUpdate(oldSystem, createParticleBlock) {
276
354
  const addColorBlock = new ParticleMathBlock("Add Color");
277
355
  addColorBlock.operation = ParticleMathBlockOperations.Add;
278
- _CreateAndConnectContextual("Color", NodeParticleContextualSources.Color, addColorBlock.left);
279
- _CreateAndConnectContextual("Scaled Color Step", NodeParticleContextualSources.ScaledColorStep, addColorBlock.right);
356
+ _CreateAndConnectContextualSource("Color", NodeParticleContextualSources.Color, addColorBlock.left);
357
+ _CreateAndConnectContextualSource("Scaled Color Step", NodeParticleContextualSources.ScaledColorStep, addColorBlock.right);
358
+ _UpdateCreateParticleColor(oldSystem, null, null, createParticleBlock);
280
359
  return addColorBlock;
281
360
  }
282
361
  function _UpdateCreateParticleColor(oldSystem, colorStart, colorEnd, createParticleBlock) {
@@ -289,7 +368,7 @@ function _UpdateCreateParticleColor(oldSystem, colorStart, colorEnd, createParti
289
368
  colorEnd.value = oldSystem.color2;
290
369
  }
291
370
  const randomColorBlock = new ParticleRandomBlock("Random color");
292
- randomColorBlock.lockMode = ParticleRandomBlockLocks.PerSystem;
371
+ randomColorBlock.lockMode = ParticleRandomBlockLocks.PerParticle;
293
372
  colorStart.output.connectTo(randomColorBlock.min);
294
373
  colorEnd.output.connectTo(randomColorBlock.max);
295
374
  randomColorBlock.output.connectTo(createParticleBlock.color);
@@ -309,14 +388,31 @@ function _ClampUpdateColorAlpha(colorBlock) {
309
388
  maxAlphaBlock.output.connectTo(composeColorBlock.wIn);
310
389
  return composeColorBlock;
311
390
  }
391
+ function _CreateDeltaModifiedInput(name, value) {
392
+ const multiplyBlock = new ParticleMathBlock("Multiply by Delta");
393
+ multiplyBlock.operation = ParticleMathBlockOperations.Multiply;
394
+ if (value instanceof Vector3) {
395
+ _CreateAndConnectInput(name, value, multiplyBlock.left);
396
+ }
397
+ else {
398
+ value.connectTo(multiplyBlock.left);
399
+ }
400
+ _CreateAndConnectSystemSource("Delta", NodeParticleSystemSources.Delta, multiplyBlock.right);
401
+ return multiplyBlock.output;
402
+ }
312
403
  function _CreateAndConnectInput(inputBlockName, value, targetToConnectTo, inputType) {
313
404
  const input = new ParticleInputBlock(inputBlockName, inputType);
314
405
  input.value = value;
315
406
  input.output.connectTo(targetToConnectTo);
316
407
  }
317
- function _CreateAndConnectContextual(contextualBlockName, contextValue, targetToConnectTo) {
408
+ function _CreateAndConnectContextualSource(contextualBlockName, contextSource, targetToConnectTo) {
318
409
  const input = new ParticleInputBlock(contextualBlockName);
319
- input.contextualValue = contextValue;
410
+ input.contextualValue = contextSource;
411
+ input.output.connectTo(targetToConnectTo);
412
+ }
413
+ function _CreateAndConnectSystemSource(systemBlockName, systemSource, targetToConnectTo) {
414
+ const input = new ParticleInputBlock(systemBlockName);
415
+ input.systemSource = systemSource;
320
416
  input.output.connectTo(targetToConnectTo);
321
417
  }
322
418
  //# sourceMappingURL=nodeParticleSystemSet.helper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nodeParticleSystemSet.helper.js","sourceRoot":"","sources":["../../../../../dev/core/src/Particles/Node/nodeParticleSystemSet.helper.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport type { Color4 } from \"core/Maths/math.color\";\r\nimport type { Vector3 } from \"core/Maths/math.vector\";\r\nimport type { Texture } from \"core/Materials/Textures/texture\";\r\nimport type { Mesh } from \"core/Meshes/mesh\";\r\nimport type { ColorGradient } from \"core/Misc\";\r\nimport type { ParticleSystem } from \"core/Particles/particleSystem\";\r\nimport type { IParticleSystem } from \"core/Particles/IParticleSystem\";\r\nimport type { BoxParticleEmitter } from \"core/Particles/EmitterTypes/boxParticleEmitter\";\r\nimport type { ConeParticleEmitter } from \"core/Particles/EmitterTypes/coneParticleEmitter\";\r\nimport type { CylinderParticleEmitter } from \"core/Particles/EmitterTypes/cylinderParticleEmitter\";\r\nimport type { MeshParticleEmitter } from \"core/Particles/EmitterTypes/meshParticleEmitter\";\r\nimport type { PointParticleEmitter } from \"core/Particles/EmitterTypes/pointParticleEmitter\";\r\nimport type { SphereParticleEmitter } from \"core/Particles/EmitterTypes/sphereParticleEmitter\";\r\nimport type { NodeParticleConnectionPoint } from \"core/Particles/Node/nodeParticleBlockConnectionPoint\";\r\nimport type { IShapeBlock } from \"core/Particles/Node/Blocks/Emitters/IShapeBlock\";\r\n\r\nimport { Vector2 } from \"core/Maths/math.vector\";\r\nimport { NodeParticleBlockConnectionPointTypes } from \"core/Particles/Node/Enums/nodeParticleBlockConnectionPointTypes\";\r\nimport { NodeParticleSystemSet } from \"./nodeParticleSystemSet\";\r\nimport { NodeParticleContextualSources } from \"./Enums/nodeParticleContextualSources\";\r\nimport { ParticleConverterBlock } from \"./Blocks/particleConverterBlock\";\r\nimport { ParticleGradientBlock } from \"./Blocks/particleGradientBlock\";\r\nimport { ParticleGradientValueBlock } from \"./Blocks/particleGradientValueBlock\";\r\nimport { ParticleInputBlock } from \"./Blocks/particleInputBlock\";\r\nimport { ParticleMathBlock, ParticleMathBlockOperations } from \"./Blocks/particleMathBlock\";\r\nimport { ParticleRandomBlock, ParticleRandomBlockLocks } from \"./Blocks/particleRandomBlock\";\r\nimport { ParticleTextureSourceBlock } from \"./Blocks/particleSourceTextureBlock\";\r\nimport { SystemBlock } from \"./Blocks/systemBlock\";\r\nimport { CreateParticleBlock } from \"./Blocks/Emitters/createParticleBlock\";\r\nimport { BoxShapeBlock } from \"./Blocks/Emitters/boxShapeBlock\";\r\nimport { ConeShapeBlock } from \"./Blocks/Emitters/coneShapeBlock\";\r\nimport { CylinderShapeBlock } from \"./Blocks/Emitters/cylinderShapeBlock\";\r\nimport { MeshShapeBlock } from \"./Blocks/Emitters/meshShapeBlock\";\r\nimport { PointShapeBlock } from \"./Blocks/Emitters/pointShapeBlock\";\r\nimport { SphereShapeBlock } from \"./Blocks/Emitters/sphereShapeBlock\";\r\nimport { UpdateColorBlock } from \"./Blocks/Update/updateColorBlock\";\r\nimport { UpdatePositionBlock } from \"./Blocks/Update/updatePositionBlock\";\r\n\r\n/**\r\n * Converts a ParticleSystem to a NodeParticleSystemSet.\r\n * @param name The name of the node particle system set.\r\n * @param particleSystemsList The particle systems to convert.\r\n * @returns The converted node particle system set or null if conversion failed.\r\n * #0K3AQ2#3672\r\n * #7J0NXA#4\r\n */\r\nexport async function ConvertToNodeParticleSystemSetAsync(name: string, particleSystemsList: ParticleSystem[]): Promise<Nullable<NodeParticleSystemSet>> {\r\n if (!particleSystemsList || !particleSystemsList.length) {\r\n return null;\r\n }\r\n\r\n const nodeParticleSystemSet = new NodeParticleSystemSet(name);\r\n const promises: Promise<void>[] = [];\r\n\r\n for (const particleSystem of particleSystemsList) {\r\n promises.push(_ExtractDatafromParticleSystemAsync(nodeParticleSystemSet, particleSystem));\r\n }\r\n\r\n await Promise.all(promises);\r\n return nodeParticleSystemSet;\r\n}\r\n\r\nasync function _ExtractDatafromParticleSystemAsync(newSet: NodeParticleSystemSet, oldSystem: ParticleSystem): Promise<void> {\r\n // CreateParticle block\r\n const createParticleBlock = _CreateCreateParticleBlock(oldSystem);\r\n\r\n // Emitter Shape block\r\n const shapeBlock = _CreateEmitterShapeBlock(oldSystem);\r\n createParticleBlock.particle.connectTo(shapeBlock.particle);\r\n\r\n // Position update\r\n const positionUpdateBlock = _CreatePositionUpdateBlock();\r\n shapeBlock.output.connectTo(positionUpdateBlock.particle);\r\n\r\n // Color update\r\n const colorUpdateBlock = _CreateColorUpdateBlock(oldSystem, createParticleBlock);\r\n positionUpdateBlock.output.connectTo(colorUpdateBlock.particle);\r\n\r\n // System block\r\n const newSystem = _CreateSystemBlock(oldSystem);\r\n colorUpdateBlock.output.connectTo(newSystem.particle);\r\n\r\n // Register\r\n newSet.systemBlocks.push(newSystem);\r\n}\r\n\r\nfunction _CreateSystemBlock(oldSystem: IParticleSystem): SystemBlock {\r\n const newSystem = new SystemBlock(oldSystem.name);\r\n\r\n // Translation pivot\r\n _CreateAndConnectInput(\"Translation pivot\", oldSystem.translationPivot, newSystem.translationPivot);\r\n\r\n // Gravity\r\n _CreateAndConnectInput(\"Gravity\", oldSystem.gravity, newSystem.gravity);\r\n\r\n newSystem.emitRate = oldSystem.emitRate;\r\n newSystem.manualEmitCount = oldSystem.manualEmitCount;\r\n\r\n newSystem.blendMode = oldSystem.blendMode;\r\n newSystem.capacity = oldSystem.getCapacity();\r\n newSystem.targetStopDuration = oldSystem.targetStopDuration;\r\n newSystem.startDelay = oldSystem.startDelay;\r\n newSystem.targetStopDuration = oldSystem.targetStopDuration;\r\n newSystem.updateSpeed = oldSystem.updateSpeed;\r\n newSystem.preWarmCycles = oldSystem.preWarmCycles;\r\n newSystem.preWarmStepOffset = oldSystem.preWarmStepOffset;\r\n newSystem.isBillboardBased = oldSystem.isBillboardBased;\r\n newSystem.isLocal = oldSystem.isLocal;\r\n newSystem.disposeOnStop = oldSystem.disposeOnStop;\r\n\r\n // Texture\r\n const textureBlock = new ParticleTextureSourceBlock(\"Texture\");\r\n const url = (oldSystem.particleTexture as Texture).url || \"\";\r\n if (url) {\r\n textureBlock.url = url;\r\n } else {\r\n textureBlock.sourceTexture = oldSystem.particleTexture;\r\n }\r\n textureBlock.texture.connectTo(newSystem.texture);\r\n\r\n return newSystem;\r\n}\r\n\r\nfunction _CreateCreateParticleBlock(oldSystem: ParticleSystem): CreateParticleBlock {\r\n // Create particle\r\n const createParticleBlock = new CreateParticleBlock(\"Create Particle\");\r\n\r\n // Size\r\n const randomSizeBlock = new ParticleRandomBlock(\"Random size\");\r\n _CreateAndConnectInput(\"Min size\", oldSystem.minSize, randomSizeBlock.min);\r\n _CreateAndConnectInput(\"Max size\", oldSystem.maxSize, randomSizeBlock.max);\r\n randomSizeBlock.output.connectTo(createParticleBlock.size);\r\n\r\n // Scale\r\n const randomScaleBlock = new ParticleRandomBlock(\"Random Scale\");\r\n _CreateAndConnectInput(\"Min Scale\", new Vector2(oldSystem.minScaleX, oldSystem.minScaleY), randomScaleBlock.min);\r\n _CreateAndConnectInput(\"Max Scale\", new Vector2(oldSystem.maxScaleX, oldSystem.maxScaleY), randomScaleBlock.max);\r\n randomScaleBlock.output.connectTo(createParticleBlock.scale);\r\n\r\n // Color is handled when we do the color update block to manage gradients\r\n\r\n // Dead color\r\n _CreateAndConnectInput(\"Dead Color\", oldSystem.colorDead, createParticleBlock.colorDead);\r\n\r\n // Emit power (Speed)\r\n const randomEmitPowerBlock = new ParticleRandomBlock(\"Random Emit Power\");\r\n _CreateAndConnectInput(\"Min Emit Power\", oldSystem.minEmitPower, randomEmitPowerBlock.min);\r\n _CreateAndConnectInput(\"Max Emit Power\", oldSystem.maxEmitPower, randomEmitPowerBlock.max);\r\n randomEmitPowerBlock.output.connectTo(createParticleBlock.emitPower);\r\n\r\n // Angular speed\r\n const randomAngularSpeedBlock = new ParticleRandomBlock(\"Random Angular Speed\");\r\n _CreateAndConnectInput(\"Min Angular Speed\", oldSystem.minAngularSpeed, randomAngularSpeedBlock.min);\r\n _CreateAndConnectInput(\"Max Angular Speed\", oldSystem.maxAngularSpeed, randomAngularSpeedBlock.max);\r\n randomAngularSpeedBlock.output.connectTo(createParticleBlock.angularSpeed);\r\n\r\n // Angle (rotation)\r\n const randomRotationBlock = new ParticleRandomBlock(\"Random Rotation\");\r\n _CreateAndConnectInput(\"Min Rotation\", oldSystem.minInitialRotation, randomRotationBlock.min);\r\n _CreateAndConnectInput(\"Max Rotation\", oldSystem.maxInitialRotation, randomRotationBlock.max);\r\n randomRotationBlock.output.connectTo(createParticleBlock.angle);\r\n\r\n // Lifetime\r\n const randomLifetimeBlock = new ParticleRandomBlock(\"Random Lifetime\");\r\n _CreateAndConnectInput(\"Min Lifetime\", oldSystem.minLifeTime, randomLifetimeBlock.min);\r\n _CreateAndConnectInput(\"Max Lifetime\", oldSystem.maxLifeTime, randomLifetimeBlock.max);\r\n randomLifetimeBlock.output.connectTo(createParticleBlock.lifeTime);\r\n\r\n return createParticleBlock;\r\n}\r\n\r\nfunction _CreateEmitterShapeBlock(oldSystem: IParticleSystem): IShapeBlock {\r\n const emitter = oldSystem.particleEmitterType;\r\n if (!emitter) {\r\n throw new Error(\"Particle system has no emitter type.\");\r\n }\r\n\r\n let shapeBlock: Nullable<IShapeBlock> = null;\r\n switch (emitter.getClassName()) {\r\n case \"BoxParticleEmitter\": {\r\n const source = emitter as BoxParticleEmitter;\r\n shapeBlock = new BoxShapeBlock(\"Box Shape\");\r\n\r\n const target = shapeBlock as BoxShapeBlock;\r\n _CreateAndConnectInput(\"Direction 1\", source.direction1, target.direction1);\r\n _CreateAndConnectInput(\"Direction 2\", source.direction2, target.direction2);\r\n _CreateAndConnectInput(\"Min Emit Box\", source.minEmitBox, target.minEmitBox);\r\n _CreateAndConnectInput(\"Max Emit Box\", source.maxEmitBox, target.maxEmitBox);\r\n break;\r\n }\r\n case \"ConeParticleEmitter\": {\r\n const source = emitter as ConeParticleEmitter;\r\n shapeBlock = new ConeShapeBlock(\"Cone Shape\");\r\n\r\n const target = shapeBlock as ConeShapeBlock;\r\n _CreateAndConnectInput(\"Radius\", source.radius, target.radius);\r\n _CreateAndConnectInput(\"Angle\", source.angle, target.angle);\r\n _CreateAndConnectInput(\"Radius Range\", source.radiusRange, target.radiusRange);\r\n _CreateAndConnectInput(\"Height Range\", source.heightRange, target.heightRange);\r\n _CreateAndConnectInput(\"Emit From Spawn Point Only\", source.emitFromSpawnPointOnly ? 1 : 0, target.emitFromSpawnPointOnly, NodeParticleBlockConnectionPointTypes.Int);\r\n _CreateAndConnectInput(\"Direction Randomizer\", source.directionRandomizer, target.directionRandomizer);\r\n break;\r\n }\r\n case \"CustomParticleEmitter\": {\r\n // Custom emitter is not supported in nodes yet\r\n throw new Error(\"CustomParticleEmitter is not supported in Node Particle System.\");\r\n }\r\n case \"CylinderParticleEmitter\": {\r\n const source = emitter as CylinderParticleEmitter;\r\n shapeBlock = new CylinderShapeBlock(\"Cylinder Shape\");\r\n\r\n const target = shapeBlock as CylinderShapeBlock;\r\n _CreateAndConnectInput(\"Height\", source.height, target.height);\r\n _CreateAndConnectInput(\"Radius\", source.radius, target.radius);\r\n _CreateAndConnectInput(\"Radius Range\", source.radiusRange, target.radiusRange);\r\n _CreateAndConnectInput(\"Direction Randomizer\", source.directionRandomizer, target.directionRandomizer);\r\n break;\r\n }\r\n case \"HemisphericParticleEmitter\": {\r\n // Hemispheric emitter is not supported in nodes yet\r\n throw new Error(\"HemisphericParticleEmitter is not supported in Node Particle System.\");\r\n }\r\n case \"MeshParticleEmitter\": {\r\n const source = emitter as MeshParticleEmitter;\r\n shapeBlock = new MeshShapeBlock(\"Mesh Shape\");\r\n\r\n const target = shapeBlock as MeshShapeBlock;\r\n _CreateAndConnectInput(\"Direction 1\", source.direction1, target.direction1);\r\n _CreateAndConnectInput(\"Direction 2\", source.direction2, target.direction2);\r\n\r\n target.mesh = source.mesh as Mesh;\r\n break;\r\n }\r\n case \"PointParticleEmitter\": {\r\n const source = emitter as PointParticleEmitter;\r\n shapeBlock = new PointShapeBlock(\"Point Shape\");\r\n\r\n const target = shapeBlock as PointShapeBlock;\r\n _CreateAndConnectInput(\"Direction 1\", source.direction1, target.direction1);\r\n _CreateAndConnectInput(\"Direction 2\", source.direction2, target.direction2);\r\n break;\r\n }\r\n case \"SphereParticleEmitter\": {\r\n const source = emitter as SphereParticleEmitter;\r\n shapeBlock = new SphereShapeBlock(\"Sphere Shape\");\r\n\r\n const target = shapeBlock as SphereShapeBlock;\r\n _CreateAndConnectInput(\"Radius\", source.radius, target.radius);\r\n _CreateAndConnectInput(\"Radius Range\", source.radiusRange, target.radiusRange);\r\n _CreateAndConnectInput(\"Direction Randomizer\", source.directionRandomizer, target.directionRandomizer);\r\n break;\r\n }\r\n }\r\n\r\n if (!shapeBlock) {\r\n throw new Error(`Unsupported particle emitter type: ${emitter.getClassName()}`);\r\n }\r\n\r\n return shapeBlock;\r\n}\r\n\r\nfunction _CreatePositionUpdateBlock(): UpdatePositionBlock {\r\n // Default position update\r\n const positionUpdateBlock = new UpdatePositionBlock(\"Position update\");\r\n\r\n const addPositionBlock = new ParticleMathBlock(\"Add Position\");\r\n addPositionBlock.operation = ParticleMathBlockOperations.Add;\r\n _CreateAndConnectContextual(\"Position\", NodeParticleContextualSources.Position, addPositionBlock.left);\r\n _CreateAndConnectContextual(\"Scaled Direction\", NodeParticleContextualSources.ScaledDirection, addPositionBlock.right);\r\n addPositionBlock.output.connectTo(positionUpdateBlock.position);\r\n\r\n return positionUpdateBlock;\r\n}\r\n\r\nfunction _CreateColorUpdateBlock(oldSystem: IParticleSystem, createParticleBlock: CreateParticleBlock): UpdateColorBlock {\r\n if (!oldSystem) {\r\n throw new Error(\"Invalid particle system\");\r\n }\r\n\r\n // Calculate the color\r\n const colorGradients = oldSystem.getColorGradients();\r\n let colorBlock: Nullable<ParticleGradientBlock | ParticleMathBlock> = null;\r\n if (colorGradients && colorGradients.length > 0) {\r\n colorBlock = _CreateGradientColorUpdate(oldSystem, colorGradients, createParticleBlock);\r\n } else {\r\n colorBlock = _CreateBasicColorUpdate();\r\n }\r\n\r\n // Clamp alpha >= 0\r\n const clampedColor = _ClampUpdateColorAlpha(colorBlock);\r\n\r\n // Create the color update block\r\n const colorUpdateBlock = new UpdateColorBlock(\"Color update\");\r\n clampedColor.colorOut.connectTo(colorUpdateBlock.color);\r\n\r\n return colorUpdateBlock;\r\n}\r\n\r\nfunction _CreateGradientColorUpdate(oldSystem: IParticleSystem, gradient: Array<ColorGradient>, createParticleBlock: CreateParticleBlock): ParticleGradientBlock {\r\n const colorGradientBlock = new ParticleGradientBlock(\"Color Gradient\");\r\n _CreateAndConnectContextual(\"gradient\", NodeParticleContextualSources.Age, colorGradientBlock.gradient);\r\n\r\n let tempColor: Nullable<ParticleInputBlock | ParticleRandomBlock> = null;\r\n let colorStart: Nullable<ParticleInputBlock | ParticleRandomBlock> = null;\r\n let colorEnd: Nullable<ParticleInputBlock | ParticleRandomBlock> = null;\r\n for (let i = 0; i < gradient.length; i++) {\r\n const gradientStep = gradient[i];\r\n const gradientValueBlock = new ParticleGradientValueBlock(\"Color Gradient Value \" + i);\r\n gradientValueBlock.reference = gradientStep.gradient;\r\n\r\n if (gradientStep.color2) {\r\n // Create a random between color1 and color2\r\n const randomColorBlock = new ParticleRandomBlock(\"Random Color for Gradient \" + i);\r\n randomColorBlock.lockMode = ParticleRandomBlockLocks.PerSystem;\r\n _CreateAndConnectInput(\"Color 1\", gradientStep.color1, randomColorBlock.min);\r\n _CreateAndConnectInput(\"Color 2\", gradientStep.color2, randomColorBlock.max);\r\n randomColorBlock.output.connectTo(gradientValueBlock.value);\r\n tempColor = randomColorBlock;\r\n } else {\r\n // Single color\r\n const input = new ParticleInputBlock(\"Color \" + i);\r\n input.value = gradientStep.color1;\r\n input.output.connectTo(gradientValueBlock.value);\r\n tempColor = input;\r\n }\r\n\r\n if (gradientStep.gradient === 0) {\r\n colorStart = tempColor;\r\n } else if (gradientStep.gradient === 1) {\r\n colorEnd = tempColor;\r\n }\r\n\r\n gradientValueBlock.output.connectTo(colorGradientBlock.inputs[i + 1]);\r\n }\r\n\r\n _UpdateCreateParticleColor(oldSystem, colorStart, colorEnd, createParticleBlock);\r\n\r\n return colorGradientBlock;\r\n}\r\n\r\nfunction _CreateBasicColorUpdate(): ParticleMathBlock {\r\n const addColorBlock = new ParticleMathBlock(\"Add Color\");\r\n addColorBlock.operation = ParticleMathBlockOperations.Add;\r\n _CreateAndConnectContextual(\"Color\", NodeParticleContextualSources.Color, addColorBlock.left);\r\n _CreateAndConnectContextual(\"Scaled Color Step\", NodeParticleContextualSources.ScaledColorStep, addColorBlock.right);\r\n\r\n return addColorBlock;\r\n}\r\n\r\nfunction _UpdateCreateParticleColor(\r\n oldSystem: IParticleSystem,\r\n colorStart: Nullable<ParticleInputBlock | ParticleRandomBlock>,\r\n colorEnd: Nullable<ParticleInputBlock | ParticleRandomBlock>,\r\n createParticleBlock: CreateParticleBlock\r\n): void {\r\n if (colorStart === null) {\r\n colorStart = new ParticleInputBlock(\"Color Start\");\r\n colorStart.value = oldSystem.color1;\r\n }\r\n\r\n if (colorEnd === null) {\r\n colorEnd = new ParticleInputBlock(\"Color End\");\r\n colorEnd.value = oldSystem.color2;\r\n }\r\n\r\n const randomColorBlock = new ParticleRandomBlock(\"Random color\");\r\n randomColorBlock.lockMode = ParticleRandomBlockLocks.PerSystem;\r\n colorStart.output.connectTo(randomColorBlock.min);\r\n colorEnd.output.connectTo(randomColorBlock.max);\r\n randomColorBlock.output.connectTo(createParticleBlock.color);\r\n}\r\n\r\nfunction _ClampUpdateColorAlpha(colorBlock: ParticleMathBlock | ParticleGradientBlock): ParticleConverterBlock {\r\n // Decompose color to clamp alpha\r\n const decomposeColorBlock = new ParticleConverterBlock(\"Decompose Color\");\r\n colorBlock.outputs[0].connectTo(decomposeColorBlock.colorIn);\r\n\r\n // Clamp alpha to be >= 0\r\n const maxAlphaBlock = new ParticleMathBlock(\"Alpha >= 0\");\r\n maxAlphaBlock.operation = ParticleMathBlockOperations.Max;\r\n decomposeColorBlock.wOut.connectTo(maxAlphaBlock.left);\r\n _CreateAndConnectInput(\"Zero\", 0, maxAlphaBlock.right);\r\n\r\n // Recompose color\r\n const composeColorBlock = new ParticleConverterBlock(\"Compose Color\");\r\n decomposeColorBlock.xyzOut.connectTo(composeColorBlock.xyzIn);\r\n maxAlphaBlock.output.connectTo(composeColorBlock.wIn);\r\n\r\n return composeColorBlock;\r\n}\r\n\r\nfunction _CreateAndConnectInput(\r\n inputBlockName: string,\r\n value: number | Vector2 | Vector3 | Color4,\r\n targetToConnectTo: NodeParticleConnectionPoint,\r\n inputType?: NodeParticleBlockConnectionPointTypes\r\n): void {\r\n const input = new ParticleInputBlock(inputBlockName, inputType);\r\n input.value = value;\r\n input.output.connectTo(targetToConnectTo);\r\n}\r\n\r\nfunction _CreateAndConnectContextual(contextualBlockName: string, contextValue: NodeParticleContextualSources, targetToConnectTo: NodeParticleConnectionPoint): void {\r\n const input = new ParticleInputBlock(contextualBlockName);\r\n input.contextualValue = contextValue;\r\n input.output.connectTo(targetToConnectTo);\r\n}\r\n"]}
1
+ {"version":3,"file":"nodeParticleSystemSet.helper.js","sourceRoot":"","sources":["../../../../../dev/core/src/Particles/Node/nodeParticleSystemSet.helper.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport type { Color4 } from \"core/Maths/math.color\";\r\nimport type { Texture } from \"core/Materials/Textures/texture\";\r\nimport type { Mesh } from \"core/Meshes/mesh\";\r\nimport type { ColorGradient } from \"core/Misc\";\r\nimport type { ParticleSystem } from \"core/Particles/particleSystem\";\r\nimport type { IParticleSystem } from \"core/Particles/IParticleSystem\";\r\nimport type { BoxParticleEmitter } from \"core/Particles/EmitterTypes/boxParticleEmitter\";\r\nimport type { ConeParticleEmitter } from \"core/Particles/EmitterTypes/coneParticleEmitter\";\r\nimport type { CustomParticleEmitter } from \"core/Particles/EmitterTypes/customParticleEmitter\";\r\nimport type { CylinderDirectedParticleEmitter, CylinderParticleEmitter } from \"core/Particles/EmitterTypes/cylinderParticleEmitter\";\r\nimport type { HemisphericParticleEmitter } from \"core/Particles/EmitterTypes/hemisphericParticleEmitter\";\r\nimport type { MeshParticleEmitter } from \"core/Particles/EmitterTypes/meshParticleEmitter\";\r\nimport type { PointParticleEmitter } from \"core/Particles/EmitterTypes/pointParticleEmitter\";\r\nimport type { SphereDirectedParticleEmitter, SphereParticleEmitter } from \"core/Particles/EmitterTypes/sphereParticleEmitter\";\r\nimport type { NodeParticleConnectionPoint } from \"core/Particles/Node/nodeParticleBlockConnectionPoint\";\r\nimport type { IShapeBlock } from \"core/Particles/Node/Blocks/Emitters/IShapeBlock\";\r\nimport type { NodeParticleBlockConnectionPointTypes } from \"core/Particles/Node/Enums/nodeParticleBlockConnectionPointTypes\";\r\n\r\nimport { Vector2, Vector3 } from \"core/Maths/math.vector\";\r\nimport { NodeParticleSystemSet } from \"./nodeParticleSystemSet\";\r\nimport { NodeParticleContextualSources } from \"./Enums/nodeParticleContextualSources\";\r\nimport { NodeParticleSystemSources } from \"./Enums/nodeParticleSystemSources\";\r\nimport { ParticleConverterBlock } from \"./Blocks/particleConverterBlock\";\r\nimport { ParticleGradientBlock } from \"./Blocks/particleGradientBlock\";\r\nimport { ParticleGradientValueBlock } from \"./Blocks/particleGradientValueBlock\";\r\nimport { ParticleInputBlock } from \"./Blocks/particleInputBlock\";\r\nimport { ParticleMathBlock, ParticleMathBlockOperations } from \"./Blocks/particleMathBlock\";\r\nimport { ParticleRandomBlock, ParticleRandomBlockLocks } from \"./Blocks/particleRandomBlock\";\r\nimport { ParticleTextureSourceBlock } from \"./Blocks/particleSourceTextureBlock\";\r\nimport { SystemBlock } from \"./Blocks/systemBlock\";\r\nimport { CreateParticleBlock } from \"./Blocks/Emitters/createParticleBlock\";\r\nimport { BoxShapeBlock } from \"./Blocks/Emitters/boxShapeBlock\";\r\nimport { ConeShapeBlock } from \"./Blocks/Emitters/coneShapeBlock\";\r\nimport { CylinderShapeBlock } from \"./Blocks/Emitters/cylinderShapeBlock\";\r\nimport { CustomShapeBlock } from \"./Blocks/Emitters/customShapeBlock\";\r\nimport { MeshShapeBlock } from \"./Blocks/Emitters/meshShapeBlock\";\r\nimport { PointShapeBlock } from \"./Blocks/Emitters/pointShapeBlock\";\r\nimport { SphereShapeBlock } from \"./Blocks/Emitters/sphereShapeBlock\";\r\nimport { UpdateAngleBlock } from \"./Blocks/Update/updateAngleBlock\";\r\nimport { UpdateColorBlock } from \"./Blocks/Update/updateColorBlock\";\r\nimport { UpdateDirectionBlock } from \"./Blocks/Update/updateDirectionBlock\";\r\nimport { UpdatePositionBlock } from \"./Blocks/Update/updatePositionBlock\";\r\n\r\n/**\r\n * Converts a ParticleSystem to a NodeParticleSystemSet.\r\n * @param name The name of the node particle system set.\r\n * @param particleSystemsList The particle systems to convert.\r\n * @returns The converted node particle system set or null if conversion failed.\r\n * #0K3AQ2#3672\r\n * #7J0NXA#4\r\n */\r\nexport async function ConvertToNodeParticleSystemSetAsync(name: string, particleSystemsList: ParticleSystem[]): Promise<Nullable<NodeParticleSystemSet>> {\r\n if (!particleSystemsList || !particleSystemsList.length) {\r\n return null;\r\n }\r\n\r\n const nodeParticleSystemSet = new NodeParticleSystemSet(name);\r\n const promises: Promise<void>[] = [];\r\n\r\n for (const particleSystem of particleSystemsList) {\r\n promises.push(_ExtractDatafromParticleSystemAsync(nodeParticleSystemSet, particleSystem));\r\n }\r\n\r\n await Promise.all(promises);\r\n return nodeParticleSystemSet;\r\n}\r\n\r\nasync function _ExtractDatafromParticleSystemAsync(newSet: NodeParticleSystemSet, oldSystem: ParticleSystem): Promise<void> {\r\n // CreateParticle block\r\n const createParticleBlock = _CreateCreateParticleBlock(oldSystem);\r\n\r\n // Emitter Shape block\r\n const shapeBlock = _CreateEmitterShapeBlock(oldSystem);\r\n createParticleBlock.particle.connectTo(shapeBlock.particle);\r\n\r\n // Update the particle position\r\n const positionUpdatedParticle = _CreateUpdateSystem(shapeBlock.output, oldSystem);\r\n\r\n // Color update\r\n const colorUpdateBlock = _CreateColorUpdateBlock(oldSystem, createParticleBlock);\r\n positionUpdatedParticle.connectTo(colorUpdateBlock.particle);\r\n\r\n // System block\r\n const newSystem = _CreateSystemBlock(oldSystem);\r\n colorUpdateBlock.output.connectTo(newSystem.particle);\r\n\r\n // Register\r\n newSet.systemBlocks.push(newSystem);\r\n}\r\n\r\nfunction _CreateSystemBlock(oldSystem: ParticleSystem): SystemBlock {\r\n const newSystem = new SystemBlock(oldSystem.name);\r\n\r\n _CreateAndConnectInput(\"Translation pivot\", oldSystem.translationPivot, newSystem.translationPivot);\r\n _CreateAndConnectInput(\"Texture mask\", oldSystem.textureMask, newSystem.textureMask);\r\n\r\n newSystem.emitRate = oldSystem.emitRate;\r\n newSystem.manualEmitCount = oldSystem.manualEmitCount;\r\n\r\n newSystem.blendMode = oldSystem.blendMode;\r\n newSystem.capacity = oldSystem.getCapacity();\r\n newSystem.targetStopDuration = oldSystem.targetStopDuration;\r\n newSystem.startDelay = oldSystem.startDelay;\r\n newSystem.targetStopDuration = oldSystem.targetStopDuration;\r\n newSystem.updateSpeed = oldSystem.updateSpeed;\r\n newSystem.preWarmCycles = oldSystem.preWarmCycles;\r\n newSystem.preWarmStepOffset = oldSystem.preWarmStepOffset;\r\n newSystem.isBillboardBased = oldSystem.isBillboardBased;\r\n newSystem.isLocal = oldSystem.isLocal;\r\n newSystem.disposeOnStop = oldSystem.disposeOnStop;\r\n\r\n // Texture\r\n const textureBlock = new ParticleTextureSourceBlock(\"Texture\");\r\n const url = (oldSystem.particleTexture as Texture).url || \"\";\r\n if (url) {\r\n textureBlock.url = url;\r\n } else {\r\n textureBlock.sourceTexture = oldSystem.particleTexture;\r\n }\r\n textureBlock.texture.connectTo(newSystem.texture);\r\n\r\n return newSystem;\r\n}\r\n\r\nfunction _CreateCreateParticleBlock(oldSystem: ParticleSystem): CreateParticleBlock {\r\n // Create particle\r\n const createParticleBlock = new CreateParticleBlock(\"Create Particle\");\r\n\r\n // Size\r\n const randomSizeBlock = new ParticleRandomBlock(\"Random size\");\r\n _CreateAndConnectInput(\"Min size\", oldSystem.minSize, randomSizeBlock.min);\r\n _CreateAndConnectInput(\"Max size\", oldSystem.maxSize, randomSizeBlock.max);\r\n randomSizeBlock.output.connectTo(createParticleBlock.size);\r\n\r\n // Scale\r\n const randomScaleBlock = new ParticleRandomBlock(\"Random Scale\");\r\n _CreateAndConnectInput(\"Min Scale\", new Vector2(oldSystem.minScaleX, oldSystem.minScaleY), randomScaleBlock.min);\r\n _CreateAndConnectInput(\"Max Scale\", new Vector2(oldSystem.maxScaleX, oldSystem.maxScaleY), randomScaleBlock.max);\r\n randomScaleBlock.output.connectTo(createParticleBlock.scale);\r\n\r\n // Color is handled when we do the color update block to manage gradients\r\n\r\n // Dead color\r\n _CreateAndConnectInput(\"Dead Color\", oldSystem.colorDead, createParticleBlock.colorDead);\r\n\r\n // Emit power (Speed)\r\n const randomEmitPowerBlock = new ParticleRandomBlock(\"Random Emit Power\");\r\n _CreateAndConnectInput(\"Min Emit Power\", oldSystem.minEmitPower, randomEmitPowerBlock.min);\r\n _CreateAndConnectInput(\"Max Emit Power\", oldSystem.maxEmitPower, randomEmitPowerBlock.max);\r\n randomEmitPowerBlock.output.connectTo(createParticleBlock.emitPower);\r\n\r\n // Angle (rotation)\r\n const randomRotationBlock = new ParticleRandomBlock(\"Random Rotation\");\r\n _CreateAndConnectInput(\"Min Rotation\", oldSystem.minInitialRotation, randomRotationBlock.min);\r\n _CreateAndConnectInput(\"Max Rotation\", oldSystem.maxInitialRotation, randomRotationBlock.max);\r\n randomRotationBlock.output.connectTo(createParticleBlock.angle);\r\n\r\n // Lifetime\r\n const randomLifetimeBlock = new ParticleRandomBlock(\"Random Lifetime\");\r\n _CreateAndConnectInput(\"Min Lifetime\", oldSystem.minLifeTime, randomLifetimeBlock.min);\r\n _CreateAndConnectInput(\"Max Lifetime\", oldSystem.maxLifeTime, randomLifetimeBlock.max);\r\n randomLifetimeBlock.output.connectTo(createParticleBlock.lifeTime);\r\n\r\n return createParticleBlock;\r\n}\r\n\r\nfunction _CreateEmitterShapeBlock(oldSystem: IParticleSystem): IShapeBlock {\r\n const emitter = oldSystem.particleEmitterType;\r\n if (!emitter) {\r\n throw new Error(\"Particle system has no emitter type.\");\r\n }\r\n\r\n let shapeBlock: Nullable<IShapeBlock> = null;\r\n switch (emitter.getClassName()) {\r\n case \"BoxParticleEmitter\": {\r\n const source = emitter as BoxParticleEmitter;\r\n shapeBlock = new BoxShapeBlock(\"Box Shape\");\r\n\r\n const target = shapeBlock as BoxShapeBlock;\r\n _CreateAndConnectInput(\"Direction 1\", source.direction1, target.direction1);\r\n _CreateAndConnectInput(\"Direction 2\", source.direction2, target.direction2);\r\n _CreateAndConnectInput(\"Min Emit Box\", source.minEmitBox, target.minEmitBox);\r\n _CreateAndConnectInput(\"Max Emit Box\", source.maxEmitBox, target.maxEmitBox);\r\n break;\r\n }\r\n case \"ConeParticleEmitter\": {\r\n const source = emitter as ConeParticleEmitter;\r\n shapeBlock = new ConeShapeBlock(\"Cone Shape\");\r\n\r\n const target = shapeBlock as ConeShapeBlock;\r\n target.emitFromSpawnPointOnly = source.emitFromSpawnPointOnly;\r\n _CreateAndConnectInput(\"Radius\", source.radius, target.radius);\r\n _CreateAndConnectInput(\"Angle\", source.angle, target.angle);\r\n _CreateAndConnectInput(\"Radius Range\", source.radiusRange, target.radiusRange);\r\n _CreateAndConnectInput(\"Height Range\", source.heightRange, target.heightRange);\r\n _CreateAndConnectInput(\"Direction Randomizer\", source.directionRandomizer, target.directionRandomizer);\r\n break;\r\n }\r\n case \"CustomParticleEmitter\": {\r\n const source = emitter as CustomParticleEmitter;\r\n shapeBlock = new CustomShapeBlock(\"Custom Shape\");\r\n\r\n const target = shapeBlock as CustomShapeBlock;\r\n target.particlePositionGenerator = source.particlePositionGenerator;\r\n target.particleDestinationGenerator = source.particleDestinationGenerator;\r\n target.particleDirectionGenerator = source.particleDirectionGenerator;\r\n break;\r\n }\r\n case \"CylinderParticleEmitter\": {\r\n const source = emitter as CylinderParticleEmitter;\r\n shapeBlock = new CylinderShapeBlock(\"Cylinder Shape\");\r\n\r\n const target = shapeBlock as CylinderShapeBlock;\r\n _CreateAndConnectInput(\"Height\", source.height, target.height);\r\n _CreateAndConnectInput(\"Radius\", source.radius, target.radius);\r\n _CreateAndConnectInput(\"Radius Range\", source.radiusRange, target.radiusRange);\r\n _CreateAndConnectInput(\"Direction Randomizer\", source.directionRandomizer, target.directionRandomizer);\r\n break;\r\n }\r\n case \"CylinderDirectedParticleEmitter\": {\r\n const source = emitter as CylinderDirectedParticleEmitter;\r\n shapeBlock = new CylinderShapeBlock(\"Cylinder Shape\");\r\n\r\n const target = shapeBlock as CylinderShapeBlock;\r\n _CreateAndConnectInput(\"Height\", source.height, target.height);\r\n _CreateAndConnectInput(\"Radius\", source.radius, target.radius);\r\n _CreateAndConnectInput(\"Radius Range\", source.radiusRange, target.radiusRange);\r\n _CreateAndConnectInput(\"Direction 1\", source.direction1, target.direction1);\r\n _CreateAndConnectInput(\"Direction 2\", source.direction2, target.direction2);\r\n break;\r\n }\r\n case \"HemisphericParticleEmitter\": {\r\n const source = emitter as HemisphericParticleEmitter;\r\n shapeBlock = new SphereShapeBlock(\"Sphere Shape\");\r\n\r\n const target = shapeBlock as SphereShapeBlock;\r\n target.isHemispheric = true;\r\n _CreateAndConnectInput(\"Radius\", source.radius, target.radius);\r\n _CreateAndConnectInput(\"Radius Range\", source.radiusRange, target.radiusRange);\r\n _CreateAndConnectInput(\"Direction Randomizer\", source.directionRandomizer, target.directionRandomizer);\r\n break;\r\n }\r\n case \"MeshParticleEmitter\": {\r\n const source = emitter as MeshParticleEmitter;\r\n shapeBlock = new MeshShapeBlock(\"Mesh Shape\");\r\n\r\n const target = shapeBlock as MeshShapeBlock;\r\n target.useMeshNormalsForDirection = source.useMeshNormalsForDirection;\r\n _CreateAndConnectInput(\"Direction 1\", source.direction1, target.direction1);\r\n _CreateAndConnectInput(\"Direction 2\", source.direction2, target.direction2);\r\n\r\n target.mesh = source.mesh as Mesh;\r\n break;\r\n }\r\n case \"PointParticleEmitter\": {\r\n const source = emitter as PointParticleEmitter;\r\n shapeBlock = new PointShapeBlock(\"Point Shape\");\r\n\r\n const target = shapeBlock as PointShapeBlock;\r\n _CreateAndConnectInput(\"Direction 1\", source.direction1, target.direction1);\r\n _CreateAndConnectInput(\"Direction 2\", source.direction2, target.direction2);\r\n break;\r\n }\r\n case \"SphereParticleEmitter\": {\r\n const source = emitter as SphereParticleEmitter;\r\n shapeBlock = new SphereShapeBlock(\"Sphere Shape\");\r\n\r\n const target = shapeBlock as SphereShapeBlock;\r\n _CreateAndConnectInput(\"Radius\", source.radius, target.radius);\r\n _CreateAndConnectInput(\"Radius Range\", source.radiusRange, target.radiusRange);\r\n _CreateAndConnectInput(\"Direction Randomizer\", source.directionRandomizer, target.directionRandomizer);\r\n break;\r\n }\r\n case \"SphereDirectedParticleEmitter\": {\r\n const source = emitter as SphereDirectedParticleEmitter;\r\n shapeBlock = new SphereShapeBlock(\"Sphere Shape\");\r\n\r\n const target = shapeBlock as SphereShapeBlock;\r\n _CreateAndConnectInput(\"Radius\", source.radius, target.radius);\r\n _CreateAndConnectInput(\"Radius Range\", source.radiusRange, target.radiusRange);\r\n _CreateAndConnectInput(\"Direction1\", source.direction1, target.direction1);\r\n _CreateAndConnectInput(\"Direction2\", source.direction2, target.direction2);\r\n break;\r\n }\r\n }\r\n\r\n if (!shapeBlock) {\r\n throw new Error(`Unsupported particle emitter type: ${emitter.getClassName()}`);\r\n }\r\n\r\n return shapeBlock;\r\n}\r\n\r\nfunction _CreateUpdateSystem(inputParticle: NodeParticleConnectionPoint, oldSystem: IParticleSystem): NodeParticleConnectionPoint {\r\n let outputUpdate: NodeParticleConnectionPoint = inputParticle;\r\n\r\n if (oldSystem.minAngularSpeed !== 0 || oldSystem.maxAngularSpeed !== 0) {\r\n outputUpdate = _CreateAngularSpeedUpdate(outputUpdate, oldSystem.minAngularSpeed, oldSystem.maxAngularSpeed);\r\n }\r\n\r\n outputUpdate = _CreatePositionUpdate(outputUpdate, oldSystem.isLocal);\r\n\r\n if (oldSystem.gravity.equalsToFloats(0, 0, 0) === false) {\r\n outputUpdate = _CreateGravityUpdate(outputUpdate, oldSystem.gravity);\r\n }\r\n\r\n return outputUpdate;\r\n}\r\n\r\nfunction _CreateAngularSpeedUpdate(inputParticle: NodeParticleConnectionPoint, minAngularSpeed: number, maxAngularSpeed: number): NodeParticleConnectionPoint {\r\n // Random value between for the angular speed of the particle\r\n const randomAngularSpeedBlock = new ParticleRandomBlock(\"Random Angular Speed\");\r\n _CreateAndConnectInput(\"Min Angular Speed\", minAngularSpeed, randomAngularSpeedBlock.min);\r\n _CreateAndConnectInput(\"Max Angular Speed\", maxAngularSpeed, randomAngularSpeedBlock.max);\r\n\r\n // Create the angular speed delta\r\n const angleSpeedDeltaOutput = _CreateDeltaModifiedInput(\"Angular Speed\", randomAngularSpeedBlock.output);\r\n\r\n // Add it to the angle\r\n const addAngle = new ParticleMathBlock(\"Add Angular Speed to Angle\");\r\n addAngle.operation = ParticleMathBlockOperations.Add;\r\n _CreateAndConnectContextualSource(\"Angle\", NodeParticleContextualSources.Angle, addAngle.left);\r\n angleSpeedDeltaOutput.connectTo(addAngle.right);\r\n\r\n // Update the particle angle\r\n const updateAngle = new UpdateAngleBlock(\"Angle Update with Angular Speed\");\r\n inputParticle.connectTo(updateAngle.particle);\r\n addAngle.output.connectTo(updateAngle.angle);\r\n\r\n return updateAngle.output;\r\n}\r\n\r\nfunction _CreatePositionUpdate(inputParticle: NodeParticleConnectionPoint, isLocal: boolean): NodeParticleConnectionPoint {\r\n // Update the particle position\r\n const updatePosition = new UpdatePositionBlock(\"Position Update\");\r\n inputParticle.connectTo(updatePosition.particle);\r\n\r\n if (isLocal) {\r\n _CreateAndConnectContextualSource(\"Local Position Updated\", NodeParticleContextualSources.LocalPositionUpdated, updatePosition.position);\r\n } else {\r\n // Calculate the new position\r\n const addPositionBlock = new ParticleMathBlock(\"Add Position\");\r\n addPositionBlock.operation = ParticleMathBlockOperations.Add;\r\n _CreateAndConnectContextualSource(\"Position\", NodeParticleContextualSources.Position, addPositionBlock.left);\r\n _CreateAndConnectContextualSource(\"Scaled Direction\", NodeParticleContextualSources.ScaledDirection, addPositionBlock.right);\r\n addPositionBlock.output.connectTo(updatePosition.position);\r\n }\r\n\r\n return updatePosition.output;\r\n}\r\n\r\nfunction _CreateGravityUpdate(inputParticle: NodeParticleConnectionPoint, gravity: Vector3): NodeParticleConnectionPoint {\r\n // Create the gravity delta\r\n const gravityDeltaOutput = _CreateDeltaModifiedInput(\"Gravity\", gravity);\r\n\r\n // Add it to the direction\r\n const addDirectionBlock = new ParticleMathBlock(\"Add Gravity to Direction\");\r\n addDirectionBlock.operation = ParticleMathBlockOperations.Add;\r\n _CreateAndConnectContextualSource(\"Direction\", NodeParticleContextualSources.Direction, addDirectionBlock.left);\r\n gravityDeltaOutput.connectTo(addDirectionBlock.right);\r\n\r\n // Update the particle direction\r\n const updateDirection = new UpdateDirectionBlock(\"Direction Update with Gravity\");\r\n inputParticle.connectTo(updateDirection.particle);\r\n addDirectionBlock.output.connectTo(updateDirection.direction);\r\n\r\n return updateDirection.output;\r\n}\r\n\r\nfunction _CreateColorUpdateBlock(oldSystem: IParticleSystem, createParticleBlock: CreateParticleBlock): UpdateColorBlock {\r\n if (!oldSystem) {\r\n throw new Error(\"Invalid particle system\");\r\n }\r\n\r\n // Calculate the color\r\n const colorGradients = oldSystem.getColorGradients();\r\n let colorBlock: Nullable<ParticleGradientBlock | ParticleMathBlock> = null;\r\n if (colorGradients && colorGradients.length > 0) {\r\n colorBlock = _CreateGradientColorUpdate(oldSystem, colorGradients, createParticleBlock);\r\n } else {\r\n colorBlock = _CreateBasicColorUpdate(oldSystem, createParticleBlock);\r\n }\r\n\r\n // Clamp alpha >= 0\r\n const clampedColor = _ClampUpdateColorAlpha(colorBlock);\r\n\r\n // Create the color update block\r\n const colorUpdateBlock = new UpdateColorBlock(\"Color update\");\r\n clampedColor.colorOut.connectTo(colorUpdateBlock.color);\r\n\r\n return colorUpdateBlock;\r\n}\r\n\r\nfunction _CreateGradientColorUpdate(oldSystem: IParticleSystem, gradient: Array<ColorGradient>, createParticleBlock: CreateParticleBlock): ParticleGradientBlock {\r\n const colorGradientBlock = new ParticleGradientBlock(\"Color Gradient\");\r\n _CreateAndConnectContextualSource(\"gradient\", NodeParticleContextualSources.Age, colorGradientBlock.gradient);\r\n\r\n let tempColor: Nullable<ParticleInputBlock | ParticleRandomBlock> = null;\r\n let colorStart: Nullable<ParticleInputBlock | ParticleRandomBlock> = null;\r\n let colorEnd: Nullable<ParticleInputBlock | ParticleRandomBlock> = null;\r\n for (let i = 0; i < gradient.length; i++) {\r\n const gradientStep = gradient[i];\r\n const gradientValueBlock = new ParticleGradientValueBlock(\"Color Gradient Value \" + i);\r\n gradientValueBlock.reference = gradientStep.gradient;\r\n\r\n if (gradientStep.color2) {\r\n // Create a random between color1 and color2\r\n const randomColorBlock = new ParticleRandomBlock(\"Random Color for Gradient \" + i);\r\n randomColorBlock.lockMode = ParticleRandomBlockLocks.PerSystem;\r\n _CreateAndConnectInput(\"Color 1\", gradientStep.color1, randomColorBlock.min);\r\n _CreateAndConnectInput(\"Color 2\", gradientStep.color2, randomColorBlock.max);\r\n randomColorBlock.output.connectTo(gradientValueBlock.value);\r\n tempColor = randomColorBlock;\r\n } else {\r\n // Single color\r\n const input = new ParticleInputBlock(\"Color \" + i);\r\n input.value = gradientStep.color1;\r\n input.output.connectTo(gradientValueBlock.value);\r\n tempColor = input;\r\n }\r\n\r\n if (gradientStep.gradient === 0) {\r\n colorStart = tempColor;\r\n } else if (gradientStep.gradient === 1) {\r\n colorEnd = tempColor;\r\n }\r\n\r\n gradientValueBlock.output.connectTo(colorGradientBlock.inputs[i + 1]);\r\n }\r\n\r\n _UpdateCreateParticleColor(oldSystem, colorStart, colorEnd, createParticleBlock);\r\n\r\n return colorGradientBlock;\r\n}\r\n\r\nfunction _CreateBasicColorUpdate(oldSystem: IParticleSystem, createParticleBlock: CreateParticleBlock): ParticleMathBlock {\r\n const addColorBlock = new ParticleMathBlock(\"Add Color\");\r\n addColorBlock.operation = ParticleMathBlockOperations.Add;\r\n _CreateAndConnectContextualSource(\"Color\", NodeParticleContextualSources.Color, addColorBlock.left);\r\n _CreateAndConnectContextualSource(\"Scaled Color Step\", NodeParticleContextualSources.ScaledColorStep, addColorBlock.right);\r\n\r\n _UpdateCreateParticleColor(oldSystem, null, null, createParticleBlock);\r\n\r\n return addColorBlock;\r\n}\r\n\r\nfunction _UpdateCreateParticleColor(\r\n oldSystem: IParticleSystem,\r\n colorStart: Nullable<ParticleInputBlock | ParticleRandomBlock>,\r\n colorEnd: Nullable<ParticleInputBlock | ParticleRandomBlock>,\r\n createParticleBlock: CreateParticleBlock\r\n): void {\r\n if (colorStart === null) {\r\n colorStart = new ParticleInputBlock(\"Color Start\");\r\n colorStart.value = oldSystem.color1;\r\n }\r\n\r\n if (colorEnd === null) {\r\n colorEnd = new ParticleInputBlock(\"Color End\");\r\n colorEnd.value = oldSystem.color2;\r\n }\r\n\r\n const randomColorBlock = new ParticleRandomBlock(\"Random color\");\r\n randomColorBlock.lockMode = ParticleRandomBlockLocks.PerParticle;\r\n colorStart.output.connectTo(randomColorBlock.min);\r\n colorEnd.output.connectTo(randomColorBlock.max);\r\n randomColorBlock.output.connectTo(createParticleBlock.color);\r\n}\r\n\r\nfunction _ClampUpdateColorAlpha(colorBlock: ParticleMathBlock | ParticleGradientBlock): ParticleConverterBlock {\r\n // Decompose color to clamp alpha\r\n const decomposeColorBlock = new ParticleConverterBlock(\"Decompose Color\");\r\n colorBlock.outputs[0].connectTo(decomposeColorBlock.colorIn);\r\n\r\n // Clamp alpha to be >= 0\r\n const maxAlphaBlock = new ParticleMathBlock(\"Alpha >= 0\");\r\n maxAlphaBlock.operation = ParticleMathBlockOperations.Max;\r\n decomposeColorBlock.wOut.connectTo(maxAlphaBlock.left);\r\n _CreateAndConnectInput(\"Zero\", 0, maxAlphaBlock.right);\r\n\r\n // Recompose color\r\n const composeColorBlock = new ParticleConverterBlock(\"Compose Color\");\r\n decomposeColorBlock.xyzOut.connectTo(composeColorBlock.xyzIn);\r\n maxAlphaBlock.output.connectTo(composeColorBlock.wIn);\r\n\r\n return composeColorBlock;\r\n}\r\n\r\nfunction _CreateDeltaModifiedInput(name: string, value: Vector3 | NodeParticleConnectionPoint): NodeParticleConnectionPoint {\r\n const multiplyBlock = new ParticleMathBlock(\"Multiply by Delta\");\r\n multiplyBlock.operation = ParticleMathBlockOperations.Multiply;\r\n if (value instanceof Vector3) {\r\n _CreateAndConnectInput(name, value, multiplyBlock.left);\r\n } else {\r\n value.connectTo(multiplyBlock.left);\r\n }\r\n _CreateAndConnectSystemSource(\"Delta\", NodeParticleSystemSources.Delta, multiplyBlock.right);\r\n\r\n return multiplyBlock.output;\r\n}\r\n\r\nfunction _CreateAndConnectInput(\r\n inputBlockName: string,\r\n value: number | Vector2 | Vector3 | Color4,\r\n targetToConnectTo: NodeParticleConnectionPoint,\r\n inputType?: NodeParticleBlockConnectionPointTypes\r\n): void {\r\n const input = new ParticleInputBlock(inputBlockName, inputType);\r\n input.value = value;\r\n input.output.connectTo(targetToConnectTo);\r\n}\r\n\r\nfunction _CreateAndConnectContextualSource(contextualBlockName: string, contextSource: NodeParticleContextualSources, targetToConnectTo: NodeParticleConnectionPoint): void {\r\n const input = new ParticleInputBlock(contextualBlockName);\r\n input.contextualValue = contextSource;\r\n input.output.connectTo(targetToConnectTo);\r\n}\r\n\r\nfunction _CreateAndConnectSystemSource(systemBlockName: string, systemSource: NodeParticleSystemSources, targetToConnectTo: NodeParticleConnectionPoint): void {\r\n const input = new ParticleInputBlock(systemBlockName);\r\n input.systemSource = systemSource;\r\n input.output.connectTo(targetToConnectTo);\r\n}\r\n"]}
@@ -248,7 +248,7 @@ export class NodeParticleSystemSet {
248
248
  // Texture
249
249
  const textureBlock = new ParticleTextureSourceBlock("Texture");
250
250
  textureBlock.texture.connectTo(system.texture);
251
- textureBlock.url = "https://assets.babylonjs.com/textures/flare.png";
251
+ textureBlock.url = Tools.GetAssetUrl("https://assets.babylonjs.com/core/textures/flare.png");
252
252
  this._systemBlocks.push(system);
253
253
  }
254
254
  /**