@onerjs/core 8.30.4 → 8.30.6

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 (288) 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/Audio/audioSceneComponent.d.ts +9 -5
  9. package/Audio/audioSceneComponent.js +1 -0
  10. package/Audio/audioSceneComponent.js.map +1 -1
  11. package/AudioV2/abstractAudio/abstractSound.js +1 -0
  12. package/AudioV2/abstractAudio/abstractSound.js.map +1 -1
  13. package/AudioV2/abstractAudio/audioEngineV2.d.ts +10 -0
  14. package/AudioV2/abstractAudio/audioEngineV2.js +29 -0
  15. package/AudioV2/abstractAudio/audioEngineV2.js.map +1 -1
  16. package/AudioV2/webAudio/webAudioEngine.d.ts +5 -0
  17. package/AudioV2/webAudio/webAudioEngine.js +8 -0
  18. package/AudioV2/webAudio/webAudioEngine.js.map +1 -1
  19. package/AudioV2/webAudio/webAudioStaticSound.js +10 -5
  20. package/AudioV2/webAudio/webAudioStaticSound.js.map +1 -1
  21. package/AudioV2/webAudio/webAudioStreamingSound.js +5 -2
  22. package/AudioV2/webAudio/webAudioStreamingSound.js.map +1 -1
  23. package/Cameras/camera.d.ts +4 -0
  24. package/Cameras/camera.js +18 -9
  25. package/Cameras/camera.js.map +1 -1
  26. package/Collisions/gpuPicker.js +0 -1
  27. package/Collisions/gpuPicker.js.map +1 -1
  28. package/Decorators/nodeDecorator.d.ts +3 -1
  29. package/Decorators/nodeDecorator.js +2 -0
  30. package/Decorators/nodeDecorator.js.map +1 -1
  31. package/Engines/Native/nativeInterfaces.d.ts +1 -1
  32. package/Engines/Native/nativeInterfaces.js.map +1 -1
  33. package/Engines/WebGPU/webgpuDrawContext.d.ts +8 -0
  34. package/Engines/WebGPU/webgpuDrawContext.js +8 -0
  35. package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
  36. package/Engines/abstractEngine.js +2 -2
  37. package/Engines/abstractEngine.js.map +1 -1
  38. package/Engines/nativeEngine.js +12 -13
  39. package/Engines/nativeEngine.js.map +1 -1
  40. package/FrameGraph/Node/Blocks/PostProcesses/anaglyphPostProcessBlock.d.ts +2 -2
  41. package/FrameGraph/Node/Blocks/PostProcesses/anaglyphPostProcessBlock.js +2 -2
  42. package/FrameGraph/Node/Blocks/PostProcesses/anaglyphPostProcessBlock.js.map +1 -1
  43. package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.js +1 -1
  44. package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.js.map +1 -1
  45. package/FrameGraph/Node/Blocks/PostProcesses/baseWithPropertiesPostProcessBlock.d.ts +44 -0
  46. package/FrameGraph/Node/Blocks/PostProcesses/baseWithPropertiesPostProcessBlock.js +152 -0
  47. package/FrameGraph/Node/Blocks/PostProcesses/baseWithPropertiesPostProcessBlock.js.map +1 -0
  48. package/FrameGraph/Node/Blocks/PostProcesses/blackAndWhitePostProcessBlock.d.ts +2 -2
  49. package/FrameGraph/Node/Blocks/PostProcesses/blackAndWhitePostProcessBlock.js +2 -2
  50. package/FrameGraph/Node/Blocks/PostProcesses/blackAndWhitePostProcessBlock.js.map +1 -1
  51. package/FrameGraph/Node/Blocks/PostProcesses/bloomPostProcessBlock.js +1 -1
  52. package/FrameGraph/Node/Blocks/PostProcesses/bloomPostProcessBlock.js.map +1 -1
  53. package/FrameGraph/Node/Blocks/PostProcesses/blurPostProcessBlock.d.ts +2 -2
  54. package/FrameGraph/Node/Blocks/PostProcesses/blurPostProcessBlock.js +2 -2
  55. package/FrameGraph/Node/Blocks/PostProcesses/blurPostProcessBlock.js.map +1 -1
  56. package/FrameGraph/Node/Blocks/PostProcesses/chromaticAberrationPostProcessBlock.d.ts +2 -2
  57. package/FrameGraph/Node/Blocks/PostProcesses/chromaticAberrationPostProcessBlock.js +3 -3
  58. package/FrameGraph/Node/Blocks/PostProcesses/chromaticAberrationPostProcessBlock.js.map +1 -1
  59. package/FrameGraph/Node/Blocks/PostProcesses/circleOfConfusionPostProcessBlock.d.ts +2 -2
  60. package/FrameGraph/Node/Blocks/PostProcesses/circleOfConfusionPostProcessBlock.js +2 -2
  61. package/FrameGraph/Node/Blocks/PostProcesses/circleOfConfusionPostProcessBlock.js.map +1 -1
  62. package/FrameGraph/Node/Blocks/PostProcesses/colorCorrectionPostProcessBlock.d.ts +2 -2
  63. package/FrameGraph/Node/Blocks/PostProcesses/colorCorrectionPostProcessBlock.js +2 -2
  64. package/FrameGraph/Node/Blocks/PostProcesses/colorCorrectionPostProcessBlock.js.map +1 -1
  65. package/FrameGraph/Node/Blocks/PostProcesses/convolutionPostProcessBlock.d.ts +2 -2
  66. package/FrameGraph/Node/Blocks/PostProcesses/convolutionPostProcessBlock.js +2 -2
  67. package/FrameGraph/Node/Blocks/PostProcesses/convolutionPostProcessBlock.js.map +1 -1
  68. package/FrameGraph/Node/Blocks/PostProcesses/extractHighlightsPostProcessBlock.d.ts +2 -2
  69. package/FrameGraph/Node/Blocks/PostProcesses/extractHighlightsPostProcessBlock.js +2 -2
  70. package/FrameGraph/Node/Blocks/PostProcesses/extractHighlightsPostProcessBlock.js.map +1 -1
  71. package/FrameGraph/Node/Blocks/PostProcesses/filterPostProcessBlock.d.ts +2 -2
  72. package/FrameGraph/Node/Blocks/PostProcesses/filterPostProcessBlock.js +2 -2
  73. package/FrameGraph/Node/Blocks/PostProcesses/filterPostProcessBlock.js.map +1 -1
  74. package/FrameGraph/Node/Blocks/PostProcesses/fxaaPostProcessBlock.d.ts +2 -2
  75. package/FrameGraph/Node/Blocks/PostProcesses/fxaaPostProcessBlock.js +2 -2
  76. package/FrameGraph/Node/Blocks/PostProcesses/fxaaPostProcessBlock.js.map +1 -1
  77. package/FrameGraph/Node/Blocks/PostProcesses/grainPostProcessBlock.d.ts +2 -2
  78. package/FrameGraph/Node/Blocks/PostProcesses/grainPostProcessBlock.js +2 -2
  79. package/FrameGraph/Node/Blocks/PostProcesses/grainPostProcessBlock.js.map +1 -1
  80. package/FrameGraph/Node/Blocks/PostProcesses/imageProcessingPostProcessBlock.d.ts +2 -2
  81. package/FrameGraph/Node/Blocks/PostProcesses/imageProcessingPostProcessBlock.js +3 -3
  82. package/FrameGraph/Node/Blocks/PostProcesses/imageProcessingPostProcessBlock.js.map +1 -1
  83. package/FrameGraph/Node/Blocks/PostProcesses/motionBlurPostProcessBlock.d.ts +2 -2
  84. package/FrameGraph/Node/Blocks/PostProcesses/motionBlurPostProcessBlock.js +2 -2
  85. package/FrameGraph/Node/Blocks/PostProcesses/motionBlurPostProcessBlock.js.map +1 -1
  86. package/FrameGraph/Node/Blocks/PostProcesses/passPostProcessBlock.d.ts +3 -3
  87. package/FrameGraph/Node/Blocks/PostProcesses/passPostProcessBlock.js +3 -3
  88. package/FrameGraph/Node/Blocks/PostProcesses/passPostProcessBlock.js.map +1 -1
  89. package/FrameGraph/Node/Blocks/PostProcesses/screenSpaceCurvaturePostProcessBlock.d.ts +2 -2
  90. package/FrameGraph/Node/Blocks/PostProcesses/screenSpaceCurvaturePostProcessBlock.js +2 -2
  91. package/FrameGraph/Node/Blocks/PostProcesses/screenSpaceCurvaturePostProcessBlock.js.map +1 -1
  92. package/FrameGraph/Node/Blocks/PostProcesses/sharpenPostProcessBlock.d.ts +2 -2
  93. package/FrameGraph/Node/Blocks/PostProcesses/sharpenPostProcessBlock.js +4 -4
  94. package/FrameGraph/Node/Blocks/PostProcesses/sharpenPostProcessBlock.js.map +1 -1
  95. package/FrameGraph/Node/Blocks/PostProcesses/taaPostProcessBlock.d.ts +2 -2
  96. package/FrameGraph/Node/Blocks/PostProcesses/taaPostProcessBlock.js +2 -2
  97. package/FrameGraph/Node/Blocks/PostProcesses/taaPostProcessBlock.js.map +1 -1
  98. package/FrameGraph/Node/Blocks/PostProcesses/tonemapPostProcessBlock.d.ts +2 -2
  99. package/FrameGraph/Node/Blocks/PostProcesses/tonemapPostProcessBlock.js +2 -2
  100. package/FrameGraph/Node/Blocks/PostProcesses/tonemapPostProcessBlock.js.map +1 -1
  101. package/FrameGraph/Node/Blocks/Textures/copyTextureBlock.d.ts +17 -1
  102. package/FrameGraph/Node/Blocks/Textures/copyTextureBlock.js +70 -0
  103. package/FrameGraph/Node/Blocks/Textures/copyTextureBlock.js.map +1 -1
  104. package/FrameGraph/Node/Blocks/computeShaderBlock.d.ts +42 -0
  105. package/FrameGraph/Node/Blocks/computeShaderBlock.js +74 -0
  106. package/FrameGraph/Node/Blocks/computeShaderBlock.js.map +1 -0
  107. package/FrameGraph/Node/Blocks/executeBlock.d.ts +11 -1
  108. package/FrameGraph/Node/Blocks/executeBlock.js +18 -0
  109. package/FrameGraph/Node/Blocks/executeBlock.js.map +1 -1
  110. package/FrameGraph/Node/Blocks/index.d.ts +1 -0
  111. package/FrameGraph/Node/Blocks/index.js +1 -0
  112. package/FrameGraph/Node/Blocks/index.js.map +1 -1
  113. package/FrameGraph/Node/Blocks/inputBlock.js +2 -0
  114. package/FrameGraph/Node/Blocks/inputBlock.js.map +1 -1
  115. package/FrameGraph/Node/Blocks/outputBlock.js +1 -0
  116. package/FrameGraph/Node/Blocks/outputBlock.js.map +1 -1
  117. package/FrameGraph/Node/nodeRenderGraph.d.ts +1 -1
  118. package/FrameGraph/Node/nodeRenderGraph.js +7 -3
  119. package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
  120. package/FrameGraph/Node/nodeRenderGraphBlock.js +7 -0
  121. package/FrameGraph/Node/nodeRenderGraphBlock.js.map +1 -1
  122. package/FrameGraph/Passes/pass.d.ts +11 -1
  123. package/FrameGraph/Passes/pass.js +11 -1
  124. package/FrameGraph/Passes/pass.js.map +1 -1
  125. package/FrameGraph/Tasks/Misc/computeShaderTask.d.ts +115 -0
  126. package/FrameGraph/Tasks/Misc/computeShaderTask.js +174 -0
  127. package/FrameGraph/Tasks/Misc/computeShaderTask.js.map +1 -0
  128. package/FrameGraph/Tasks/Misc/executeTask.d.ts +5 -0
  129. package/FrameGraph/Tasks/Misc/executeTask.js +3 -0
  130. package/FrameGraph/Tasks/Misc/executeTask.js.map +1 -1
  131. package/FrameGraph/Tasks/PostProcesses/bloomTask.d.ts +1 -1
  132. package/FrameGraph/Tasks/PostProcesses/bloomTask.js +1 -1
  133. package/FrameGraph/Tasks/PostProcesses/bloomTask.js.map +1 -1
  134. package/FrameGraph/Tasks/PostProcesses/postProcessTask.d.ts +7 -1
  135. package/FrameGraph/Tasks/PostProcesses/postProcessTask.js +8 -2
  136. package/FrameGraph/Tasks/PostProcesses/postProcessTask.js.map +1 -1
  137. package/FrameGraph/Tasks/PostProcesses/ssao2Task.d.ts +1 -0
  138. package/FrameGraph/Tasks/PostProcesses/ssao2Task.js +7 -0
  139. package/FrameGraph/Tasks/PostProcesses/ssao2Task.js.map +1 -1
  140. package/FrameGraph/Tasks/PostProcesses/taaTask.d.ts +1 -1
  141. package/FrameGraph/Tasks/PostProcesses/taaTask.js.map +1 -1
  142. package/FrameGraph/Tasks/Rendering/objectRendererTask.d.ts +4 -4
  143. package/FrameGraph/Tasks/Rendering/objectRendererTask.js +3 -3
  144. package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
  145. package/FrameGraph/Tasks/Texture/copyToTextureTask.d.ts +7 -1
  146. package/FrameGraph/Tasks/Texture/copyToTextureTask.js +4 -1
  147. package/FrameGraph/Tasks/Texture/copyToTextureTask.js.map +1 -1
  148. package/FrameGraph/frameGraph.d.ts +1 -1
  149. package/FrameGraph/frameGraph.js +3 -6
  150. package/FrameGraph/frameGraph.js.map +1 -1
  151. package/FrameGraph/frameGraphContext.d.ts +8 -1
  152. package/FrameGraph/frameGraphContext.js +9 -0
  153. package/FrameGraph/frameGraphContext.js.map +1 -1
  154. package/FrameGraph/frameGraphRenderContext.d.ts +4 -2
  155. package/FrameGraph/frameGraphRenderContext.js +11 -5
  156. package/FrameGraph/frameGraphRenderContext.js.map +1 -1
  157. package/FrameGraph/frameGraphTask.d.ts +11 -2
  158. package/FrameGraph/frameGraphTask.js +17 -2
  159. package/FrameGraph/frameGraphTask.js.map +1 -1
  160. package/FrameGraph/frameGraphTextureManager.js +2 -2
  161. package/FrameGraph/frameGraphTextureManager.js.map +1 -1
  162. package/FrameGraph/index.d.ts +1 -0
  163. package/FrameGraph/index.js +1 -0
  164. package/FrameGraph/index.js.map +1 -1
  165. package/Lights/directionalLight.js +1 -4
  166. package/Lights/directionalLight.js.map +1 -1
  167. package/Lights/pointLight.js +2 -5
  168. package/Lights/pointLight.js.map +1 -1
  169. package/Materials/Textures/mirrorTexture.js +4 -1
  170. package/Materials/Textures/mirrorTexture.js.map +1 -1
  171. package/Materials/clipPlaneMaterialHelper.js +11 -1
  172. package/Materials/clipPlaneMaterialHelper.js.map +1 -1
  173. package/Materials/floatingOriginMatrixOverrides.d.ts +4 -1
  174. package/Materials/floatingOriginMatrixOverrides.js +14 -2
  175. package/Materials/floatingOriginMatrixOverrides.js.map +1 -1
  176. package/Materials/index.d.ts +1 -0
  177. package/Materials/index.js +1 -0
  178. package/Materials/index.js.map +1 -1
  179. package/Materials/materialHelper.functions.d.ts +8 -0
  180. package/Materials/materialHelper.functions.js +31 -0
  181. package/Materials/materialHelper.functions.js.map +1 -1
  182. package/Materials/shaderMaterial.js +21 -1
  183. package/Materials/shaderMaterial.js.map +1 -1
  184. package/Maths/math.vector.functions.d.ts +55 -16
  185. package/Maths/math.vector.functions.js +68 -10
  186. package/Maths/math.vector.functions.js.map +1 -1
  187. package/Misc/copyTextureToTexture.d.ts +10 -0
  188. package/Misc/copyTextureToTexture.js +15 -0
  189. package/Misc/copyTextureToTexture.js.map +1 -1
  190. package/Misc/decorators.d.ts +1 -1
  191. package/Misc/decorators.js.map +1 -1
  192. package/Misc/dumpTools.d.ts +20 -0
  193. package/Misc/dumpTools.js +60 -49
  194. package/Misc/dumpTools.js.map +1 -1
  195. package/Misc/index.d.ts +1 -2
  196. package/Misc/index.js +1 -2
  197. package/Misc/index.js.map +1 -1
  198. package/Particles/Node/Blocks/Emitters/boxShapeBlock.js +7 -7
  199. package/Particles/Node/Blocks/Emitters/boxShapeBlock.js.map +1 -1
  200. package/Particles/Node/Blocks/Emitters/coneShapeBlock.d.ts +57 -0
  201. package/Particles/Node/Blocks/Emitters/coneShapeBlock.js +163 -0
  202. package/Particles/Node/Blocks/Emitters/coneShapeBlock.js.map +1 -0
  203. package/Particles/Node/Blocks/Emitters/createParticleBlock.d.ts +4 -0
  204. package/Particles/Node/Blocks/Emitters/createParticleBlock.js +18 -2
  205. package/Particles/Node/Blocks/Emitters/createParticleBlock.js.map +1 -1
  206. package/Particles/Node/Blocks/Emitters/customShapeBlock.js +7 -7
  207. package/Particles/Node/Blocks/Emitters/customShapeBlock.js.map +1 -1
  208. package/Particles/Node/Blocks/Emitters/cylinderShapeBlock.js +8 -8
  209. package/Particles/Node/Blocks/Emitters/cylinderShapeBlock.js.map +1 -1
  210. package/Particles/Node/Blocks/Emitters/index.d.ts +5 -4
  211. package/Particles/Node/Blocks/Emitters/index.js +5 -4
  212. package/Particles/Node/Blocks/Emitters/index.js.map +1 -1
  213. package/Particles/Node/Blocks/Emitters/meshShapeBlock.js +9 -9
  214. package/Particles/Node/Blocks/Emitters/meshShapeBlock.js.map +1 -1
  215. package/Particles/Node/Blocks/Emitters/pointShapeBlock.js +6 -6
  216. package/Particles/Node/Blocks/Emitters/pointShapeBlock.js.map +1 -1
  217. package/Particles/Node/Blocks/Emitters/sphereShapeBlock.js +7 -7
  218. package/Particles/Node/Blocks/Emitters/sphereShapeBlock.js.map +1 -1
  219. package/Particles/Node/Blocks/particleInputBlock.js +2 -0
  220. package/Particles/Node/Blocks/particleInputBlock.js.map +1 -1
  221. package/Particles/Node/Blocks/systemBlock.d.ts +33 -1
  222. package/Particles/Node/Blocks/systemBlock.js +82 -3
  223. package/Particles/Node/Blocks/systemBlock.js.map +1 -1
  224. package/Particles/Node/Enums/nodeParticleContextualSources.d.ts +5 -1
  225. package/Particles/Node/Enums/nodeParticleContextualSources.js +4 -0
  226. package/Particles/Node/Enums/nodeParticleContextualSources.js.map +1 -1
  227. package/Particles/Node/nodeParticleBuildState.d.ts +2 -7
  228. package/Particles/Node/nodeParticleBuildState.js +12 -22
  229. package/Particles/Node/nodeParticleBuildState.js.map +1 -1
  230. package/Particles/Node/nodeParticleSystemSet.helper.d.ts +4 -3
  231. package/Particles/Node/nodeParticleSystemSet.helper.js +344 -112
  232. package/Particles/Node/nodeParticleSystemSet.helper.js.map +1 -1
  233. package/Particles/thinParticleSystem.js +1 -0
  234. package/Particles/thinParticleSystem.js.map +1 -1
  235. package/Physics/physicsRaycastResult.d.ts +3 -0
  236. package/Physics/physicsRaycastResult.js.map +1 -1
  237. package/Physics/v2/IPhysicsEnginePlugin.d.ts +1 -1
  238. package/Physics/v2/IPhysicsEnginePlugin.js.map +1 -1
  239. package/Physics/v2/Plugins/havokPlugin.d.ts +27 -4
  240. package/Physics/v2/Plugins/havokPlugin.js +73 -9
  241. package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
  242. package/Physics/v2/physicsEngine.d.ts +12 -2
  243. package/Physics/v2/physicsEngine.js +15 -1
  244. package/Physics/v2/physicsEngine.js.map +1 -1
  245. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.d.ts +1 -0
  246. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js +9 -1
  247. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
  248. package/PostProcesses/thinSSAO2PostProcess.d.ts +1 -0
  249. package/PostProcesses/thinSSAO2PostProcess.js +18 -6
  250. package/PostProcesses/thinSSAO2PostProcess.js.map +1 -1
  251. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js +4 -0
  252. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js.map +1 -1
  253. package/Shaders/ShadersInclude/openpbrDirectLighting.js +5 -2
  254. package/Shaders/ShadersInclude/openpbrDirectLighting.js.map +1 -1
  255. package/Shaders/ShadersInclude/openpbrEnvironmentLighting.js +1 -1
  256. package/Shaders/ShadersInclude/openpbrEnvironmentLighting.js.map +1 -1
  257. package/Shaders/particles.vertex.js +1 -1
  258. package/Shaders/particles.vertex.js.map +1 -1
  259. package/Shaders/picking.fragment.js +1 -1
  260. package/Shaders/picking.fragment.js.map +1 -1
  261. package/Shaders/picking.vertex.js +1 -1
  262. package/Shaders/picking.vertex.js.map +1 -1
  263. package/ShadersWGSL/ShadersInclude/bonesDeclaration.js +2 -2
  264. package/ShadersWGSL/ShadersInclude/bonesDeclaration.js.map +1 -1
  265. package/ShadersWGSL/ShadersInclude/openpbrDirectLighting.js +5 -2
  266. package/ShadersWGSL/ShadersInclude/openpbrDirectLighting.js.map +1 -1
  267. package/ShadersWGSL/ShadersInclude/openpbrEnvironmentLighting.js +2 -2
  268. package/ShadersWGSL/ShadersInclude/openpbrEnvironmentLighting.js.map +1 -1
  269. package/ShadersWGSL/iblVoxelGrid.vertex.js +78 -4
  270. package/ShadersWGSL/iblVoxelGrid.vertex.js.map +1 -1
  271. package/ShadersWGSL/particles.vertex.js +1 -1
  272. package/ShadersWGSL/particles.vertex.js.map +1 -1
  273. package/ShadersWGSL/picking.fragment.js +1 -1
  274. package/ShadersWGSL/picking.fragment.js.map +1 -1
  275. package/ShadersWGSL/picking.vertex.js +1 -1
  276. package/ShadersWGSL/picking.vertex.js.map +1 -1
  277. package/Sprites/spriteRenderer.js +10 -8
  278. package/Sprites/spriteRenderer.js.map +1 -1
  279. package/XR/features/WebXRLightEstimation.d.ts +8 -0
  280. package/XR/features/WebXRLightEstimation.js +6 -1
  281. package/XR/features/WebXRLightEstimation.js.map +1 -1
  282. package/assetContainer.d.ts +1 -1
  283. package/assetContainer.js +1 -1
  284. package/assetContainer.js.map +1 -1
  285. package/package.json +1 -1
  286. package/scene.d.ts +7 -2
  287. package/scene.js +11 -8
  288. package/scene.js.map +1 -1
@@ -1,147 +1,379 @@
1
+ import { Vector2, Vector3 } from "../../Maths/math.vector.js";
2
+ import { NodeParticleBlockConnectionPointTypes } from "./Enums/nodeParticleBlockConnectionPointTypes.js";
1
3
  import { NodeParticleSystemSet } from "./nodeParticleSystemSet.js";
4
+ import { NodeParticleContextualSources } from "./Enums/nodeParticleContextualSources.js";
5
+ import { NodeParticleSystemSources } from "./Enums/nodeParticleSystemSources.js";
6
+ import { ParticleConverterBlock } from "./Blocks/particleConverterBlock.js";
7
+ import { ParticleGradientBlock } from "./Blocks/particleGradientBlock.js";
8
+ import { ParticleGradientValueBlock } from "./Blocks/particleGradientValueBlock.js";
9
+ import { ParticleInputBlock } from "./Blocks/particleInputBlock.js";
10
+ import { ParticleMathBlock, ParticleMathBlockOperations } from "./Blocks/particleMathBlock.js";
11
+ import { ParticleRandomBlock, ParticleRandomBlockLocks } from "./Blocks/particleRandomBlock.js";
12
+ import { ParticleTextureSourceBlock } from "./Blocks/particleSourceTextureBlock.js";
2
13
  import { SystemBlock } from "./Blocks/systemBlock.js";
3
14
  import { CreateParticleBlock } from "./Blocks/Emitters/createParticleBlock.js";
4
15
  import { BoxShapeBlock } from "./Blocks/Emitters/boxShapeBlock.js";
5
- import { ParticleInputBlock } from "./Blocks/particleInputBlock.js";
6
- import { PointShapeBlock } from "./Blocks/Emitters/pointShapeBlock.js";
7
- import { SphereShapeBlock } from "./Blocks/Emitters/sphereShapeBlock.js";
16
+ import { ConeShapeBlock } from "./Blocks/Emitters/coneShapeBlock.js";
8
17
  import { CylinderShapeBlock } from "./Blocks/Emitters/cylinderShapeBlock.js";
9
18
  import { MeshShapeBlock } from "./Blocks/Emitters/meshShapeBlock.js";
10
- import { ParticleTextureSourceBlock } from "./Blocks/particleSourceTextureBlock.js";
11
- import { BasicPositionUpdateBlock } from "./Blocks/Update/basicPositionUpdateBlock.js";
12
- import { BasicColorUpdateBlock } from "./Blocks/Update/basicColorUpdateBlock.js";
13
- import { ParticleRandomBlock } from "./Blocks/particleRandomBlock.js";
14
- function _CreateAndConnectInput(connectionPoint, name, defaultValue) {
15
- const input = new ParticleInputBlock(name);
16
- input.value = defaultValue;
17
- input.output.connectTo(connectionPoint);
18
- }
19
- async function _ExtractDatafromParticleSystemAsync(particleSystem, target) {
20
- // Main system
21
- const system = new SystemBlock(particleSystem.name);
22
- system.capacity = particleSystem.getCapacity();
23
- system.emitRate = particleSystem.emitRate;
19
+ import { PointShapeBlock } from "./Blocks/Emitters/pointShapeBlock.js";
20
+ import { SphereShapeBlock } from "./Blocks/Emitters/sphereShapeBlock.js";
21
+ import { UpdateAngleBlock } from "./Blocks/Update/updateAngleBlock.js";
22
+ import { UpdateColorBlock } from "./Blocks/Update/updateColorBlock.js";
23
+ import { UpdateDirectionBlock } from "./Blocks/Update/updateDirectionBlock.js";
24
+ import { UpdatePositionBlock } from "./Blocks/Update/updatePositionBlock.js";
25
+ /**
26
+ * Converts a ParticleSystem to a NodeParticleSystemSet.
27
+ * @param name The name of the node particle system set.
28
+ * @param particleSystemsList The particle systems to convert.
29
+ * @returns The converted node particle system set or null if conversion failed.
30
+ * #0K3AQ2#3672
31
+ * #7J0NXA#4
32
+ */
33
+ export async function ConvertToNodeParticleSystemSetAsync(name, particleSystemsList) {
34
+ if (!particleSystemsList || !particleSystemsList.length) {
35
+ return null;
36
+ }
37
+ const nodeParticleSystemSet = new NodeParticleSystemSet(name);
38
+ const promises = [];
39
+ for (const particleSystem of particleSystemsList) {
40
+ promises.push(_ExtractDatafromParticleSystemAsync(nodeParticleSystemSet, particleSystem));
41
+ }
42
+ await Promise.all(promises);
43
+ return nodeParticleSystemSet;
44
+ }
45
+ async function _ExtractDatafromParticleSystemAsync(newSet, oldSystem) {
46
+ // CreateParticle block
47
+ const createParticleBlock = _CreateCreateParticleBlock(oldSystem);
48
+ // Emitter Shape block
49
+ const shapeBlock = _CreateEmitterShapeBlock(oldSystem);
50
+ createParticleBlock.particle.connectTo(shapeBlock.particle);
51
+ // Update the particle position
52
+ const positionUpdatedParticle = _CreateUpdateSystem(shapeBlock.output, oldSystem);
53
+ // Color update
54
+ const colorUpdateBlock = _CreateColorUpdateBlock(oldSystem, createParticleBlock);
55
+ positionUpdatedParticle.connectTo(colorUpdateBlock.particle);
56
+ // System block
57
+ const newSystem = _CreateSystemBlock(oldSystem);
58
+ colorUpdateBlock.output.connectTo(newSystem.particle);
59
+ // Register
60
+ newSet.systemBlocks.push(newSystem);
61
+ }
62
+ function _CreateSystemBlock(oldSystem) {
63
+ const newSystem = new SystemBlock(oldSystem.name);
64
+ // Translation pivot
65
+ _CreateAndConnectInput("Translation pivot", oldSystem.translationPivot, newSystem.translationPivot);
66
+ newSystem.emitRate = oldSystem.emitRate;
67
+ newSystem.manualEmitCount = oldSystem.manualEmitCount;
68
+ newSystem.blendMode = oldSystem.blendMode;
69
+ newSystem.capacity = oldSystem.getCapacity();
70
+ newSystem.targetStopDuration = oldSystem.targetStopDuration;
71
+ newSystem.startDelay = oldSystem.startDelay;
72
+ newSystem.targetStopDuration = oldSystem.targetStopDuration;
73
+ newSystem.updateSpeed = oldSystem.updateSpeed;
74
+ newSystem.preWarmCycles = oldSystem.preWarmCycles;
75
+ newSystem.preWarmStepOffset = oldSystem.preWarmStepOffset;
76
+ newSystem.isBillboardBased = oldSystem.isBillboardBased;
77
+ newSystem.isLocal = oldSystem.isLocal;
78
+ newSystem.disposeOnStop = oldSystem.disposeOnStop;
79
+ // Texture
80
+ const textureBlock = new ParticleTextureSourceBlock("Texture");
81
+ const url = oldSystem.particleTexture.url || "";
82
+ if (url) {
83
+ textureBlock.url = url;
84
+ }
85
+ else {
86
+ textureBlock.sourceTexture = oldSystem.particleTexture;
87
+ }
88
+ textureBlock.texture.connectTo(newSystem.texture);
89
+ return newSystem;
90
+ }
91
+ function _CreateCreateParticleBlock(oldSystem) {
24
92
  // Create particle
25
- const createParticleBlock = new CreateParticleBlock("Create particle");
26
- // Shape
93
+ const createParticleBlock = new CreateParticleBlock("Create Particle");
94
+ // Size
95
+ const randomSizeBlock = new ParticleRandomBlock("Random size");
96
+ _CreateAndConnectInput("Min size", oldSystem.minSize, randomSizeBlock.min);
97
+ _CreateAndConnectInput("Max size", oldSystem.maxSize, randomSizeBlock.max);
98
+ randomSizeBlock.output.connectTo(createParticleBlock.size);
99
+ // Scale
100
+ const randomScaleBlock = new ParticleRandomBlock("Random Scale");
101
+ _CreateAndConnectInput("Min Scale", new Vector2(oldSystem.minScaleX, oldSystem.minScaleY), randomScaleBlock.min);
102
+ _CreateAndConnectInput("Max Scale", new Vector2(oldSystem.maxScaleX, oldSystem.maxScaleY), randomScaleBlock.max);
103
+ randomScaleBlock.output.connectTo(createParticleBlock.scale);
104
+ // Color is handled when we do the color update block to manage gradients
105
+ // Dead color
106
+ _CreateAndConnectInput("Dead Color", oldSystem.colorDead, createParticleBlock.colorDead);
107
+ // Emit power (Speed)
108
+ const randomEmitPowerBlock = new ParticleRandomBlock("Random Emit Power");
109
+ _CreateAndConnectInput("Min Emit Power", oldSystem.minEmitPower, randomEmitPowerBlock.min);
110
+ _CreateAndConnectInput("Max Emit Power", oldSystem.maxEmitPower, randomEmitPowerBlock.max);
111
+ randomEmitPowerBlock.output.connectTo(createParticleBlock.emitPower);
112
+ // Angle (rotation)
113
+ const randomRotationBlock = new ParticleRandomBlock("Random Rotation");
114
+ _CreateAndConnectInput("Min Rotation", oldSystem.minInitialRotation, randomRotationBlock.min);
115
+ _CreateAndConnectInput("Max Rotation", oldSystem.maxInitialRotation, randomRotationBlock.max);
116
+ randomRotationBlock.output.connectTo(createParticleBlock.angle);
117
+ // Lifetime
118
+ const randomLifetimeBlock = new ParticleRandomBlock("Random Lifetime");
119
+ _CreateAndConnectInput("Min Lifetime", oldSystem.minLifeTime, randomLifetimeBlock.min);
120
+ _CreateAndConnectInput("Max Lifetime", oldSystem.maxLifeTime, randomLifetimeBlock.max);
121
+ randomLifetimeBlock.output.connectTo(createParticleBlock.lifeTime);
122
+ return createParticleBlock;
123
+ }
124
+ function _CreateEmitterShapeBlock(oldSystem) {
125
+ const emitter = oldSystem.particleEmitterType;
126
+ if (!emitter) {
127
+ throw new Error("Particle system has no emitter type.");
128
+ }
27
129
  let shapeBlock = null;
28
- switch (particleSystem.particleEmitterType.getClassName()) {
130
+ switch (emitter.getClassName()) {
29
131
  case "BoxParticleEmitter": {
30
- const source = particleSystem.particleEmitterType;
31
- shapeBlock = new BoxShapeBlock("Box shape");
132
+ const source = emitter;
133
+ shapeBlock = new BoxShapeBlock("Box Shape");
32
134
  const target = shapeBlock;
33
- _CreateAndConnectInput(target.direction1, "Direction 1", source.direction1);
34
- _CreateAndConnectInput(target.direction2, "Direction 2", source.direction2);
35
- _CreateAndConnectInput(target.minEmitBox, "Min Emit Box", source.minEmitBox);
36
- _CreateAndConnectInput(target.maxEmitBox, "Max Emit Box", source.maxEmitBox);
135
+ _CreateAndConnectInput("Direction 1", source.direction1, target.direction1);
136
+ _CreateAndConnectInput("Direction 2", source.direction2, target.direction2);
137
+ _CreateAndConnectInput("Min Emit Box", source.minEmitBox, target.minEmitBox);
138
+ _CreateAndConnectInput("Max Emit Box", source.maxEmitBox, target.maxEmitBox);
37
139
  break;
38
140
  }
39
- case "PointParticleEmitter": {
40
- const source = particleSystem.particleEmitterType;
41
- shapeBlock = new PointShapeBlock("Point shape");
141
+ case "ConeParticleEmitter": {
142
+ const source = emitter;
143
+ shapeBlock = new ConeShapeBlock("Cone Shape");
42
144
  const target = shapeBlock;
43
- _CreateAndConnectInput(target.direction1, "Direction 1", source.direction1);
44
- _CreateAndConnectInput(target.direction2, "Direction 2", source.direction2);
145
+ _CreateAndConnectInput("Radius", source.radius, target.radius);
146
+ _CreateAndConnectInput("Angle", source.angle, target.angle);
147
+ _CreateAndConnectInput("Radius Range", source.radiusRange, target.radiusRange);
148
+ _CreateAndConnectInput("Height Range", source.heightRange, target.heightRange);
149
+ _CreateAndConnectInput("Emit From Spawn Point Only", source.emitFromSpawnPointOnly ? 1 : 0, target.emitFromSpawnPointOnly, NodeParticleBlockConnectionPointTypes.Int);
150
+ _CreateAndConnectInput("Direction Randomizer", source.directionRandomizer, target.directionRandomizer);
45
151
  break;
46
152
  }
47
- case "SphereParticleEmitter": {
48
- const source = particleSystem.particleEmitterType;
49
- shapeBlock = new SphereShapeBlock("Sphere shape");
50
- const target = shapeBlock;
51
- _CreateAndConnectInput(target.radius, "Radius", source.radius);
52
- _CreateAndConnectInput(target.radiusRange, "Radius Range", source.radiusRange);
53
- _CreateAndConnectInput(target.directionRandomizer, "Direction Randomizer", source.directionRandomizer);
54
- break;
153
+ case "CustomParticleEmitter": {
154
+ // Custom emitter is not supported in nodes yet
155
+ throw new Error("CustomParticleEmitter is not supported in Node Particle System.");
55
156
  }
56
157
  case "CylinderParticleEmitter": {
57
- const source = particleSystem.particleEmitterType;
58
- shapeBlock = new CylinderShapeBlock("Cylinder shape");
158
+ const source = emitter;
159
+ shapeBlock = new CylinderShapeBlock("Cylinder Shape");
59
160
  const target = shapeBlock;
60
- _CreateAndConnectInput(target.height, "Height", source.height);
61
- _CreateAndConnectInput(target.radius, "Radius", source.radius);
62
- _CreateAndConnectInput(target.radiusRange, "Radius Range", source.radiusRange);
63
- _CreateAndConnectInput(target.directionRandomizer, "Direction Randomizer", source.directionRandomizer);
161
+ _CreateAndConnectInput("Height", source.height, target.height);
162
+ _CreateAndConnectInput("Radius", source.radius, target.radius);
163
+ _CreateAndConnectInput("Radius Range", source.radiusRange, target.radiusRange);
164
+ _CreateAndConnectInput("Direction Randomizer", source.directionRandomizer, target.directionRandomizer);
64
165
  break;
65
166
  }
167
+ case "HemisphericParticleEmitter": {
168
+ // Hemispheric emitter is not supported in nodes yet
169
+ throw new Error("HemisphericParticleEmitter is not supported in Node Particle System.");
170
+ }
66
171
  case "MeshParticleEmitter": {
67
- const source = particleSystem.particleEmitterType;
68
- shapeBlock = new MeshShapeBlock("Mesh shape");
172
+ const source = emitter;
173
+ shapeBlock = new MeshShapeBlock("Mesh Shape");
69
174
  const target = shapeBlock;
70
- _CreateAndConnectInput(target.direction1, "Direction 1", source.direction1);
71
- _CreateAndConnectInput(target.direction2, "Direction 2", source.direction2);
175
+ _CreateAndConnectInput("Direction 1", source.direction1, target.direction1);
176
+ _CreateAndConnectInput("Direction 2", source.direction2, target.direction2);
72
177
  target.mesh = source.mesh;
73
178
  break;
74
179
  }
180
+ case "PointParticleEmitter": {
181
+ const source = emitter;
182
+ shapeBlock = new PointShapeBlock("Point Shape");
183
+ const target = shapeBlock;
184
+ _CreateAndConnectInput("Direction 1", source.direction1, target.direction1);
185
+ _CreateAndConnectInput("Direction 2", source.direction2, target.direction2);
186
+ break;
187
+ }
188
+ case "SphereParticleEmitter": {
189
+ const source = emitter;
190
+ shapeBlock = new SphereShapeBlock("Sphere Shape");
191
+ const target = shapeBlock;
192
+ _CreateAndConnectInput("Radius", source.radius, target.radius);
193
+ _CreateAndConnectInput("Radius Range", source.radiusRange, target.radiusRange);
194
+ _CreateAndConnectInput("Direction Randomizer", source.directionRandomizer, target.directionRandomizer);
195
+ break;
196
+ }
75
197
  }
76
198
  if (!shapeBlock) {
77
- throw new Error(`Unsupported particle emitter type: ${particleSystem.particleEmitterType.getClassName()}`);
199
+ throw new Error(`Unsupported particle emitter type: ${emitter.getClassName()}`);
78
200
  }
79
- createParticleBlock.particle.connectTo(shapeBlock.particle);
80
- createParticleBlock.colorDead.value = particleSystem.colorDead;
81
- // Color
82
- const color0Block = new ParticleInputBlock("Color0");
83
- color0Block.value = particleSystem.color1;
84
- const color1Block = new ParticleInputBlock("Color1");
85
- color1Block.value = particleSystem.color2;
86
- const randomColorBlock = new ParticleRandomBlock("Random Color");
87
- color0Block.output.connectTo(randomColorBlock.min);
88
- color1Block.output.connectTo(randomColorBlock.max);
89
- randomColorBlock.output.connectTo(createParticleBlock.color);
90
- // Emit power
91
- const minEmitPowerBlock = new ParticleInputBlock("Min Emit Power");
92
- minEmitPowerBlock.value = particleSystem.minEmitPower;
93
- const maxEmitPowerBlock = new ParticleInputBlock("Max Emit Power");
94
- maxEmitPowerBlock.value = particleSystem.maxEmitPower;
95
- const randomEmitPowerBlock = new ParticleRandomBlock("Random Emit Power");
96
- minEmitPowerBlock.output.connectTo(randomEmitPowerBlock.min);
97
- maxEmitPowerBlock.output.connectTo(randomEmitPowerBlock.max);
98
- randomEmitPowerBlock.output.connectTo(createParticleBlock.emitPower);
99
- // Lifetime
100
- const minLifetimeBlock = new ParticleInputBlock("Min Lifetime");
101
- minLifetimeBlock.value = particleSystem.minLifeTime;
102
- const maxLifetimeBlock = new ParticleInputBlock("Max Lifetime");
103
- maxLifetimeBlock.value = particleSystem.maxLifeTime;
104
- const randomLifetimeBlock = new ParticleRandomBlock("Random Lifetime");
105
- minLifetimeBlock.output.connectTo(randomLifetimeBlock.min);
106
- maxLifetimeBlock.output.connectTo(randomLifetimeBlock.max);
107
- randomLifetimeBlock.output.connectTo(createParticleBlock.lifeTime);
108
- // Texture
109
- const textureBlock = new ParticleTextureSourceBlock("Texture");
110
- const url = particleSystem.particleTexture.url || "";
111
- if (url) {
112
- textureBlock.url = url;
201
+ return shapeBlock;
202
+ }
203
+ function _CreateUpdateSystem(inputParticle, oldSystem) {
204
+ let outputUpdate = inputParticle;
205
+ if (oldSystem.minAngularSpeed !== 0 || oldSystem.maxAngularSpeed !== 0) {
206
+ outputUpdate = _CreateAngularSpeedUpdate(outputUpdate, oldSystem.minAngularSpeed, oldSystem.maxAngularSpeed);
207
+ }
208
+ outputUpdate = _CreatePositionUpdate(outputUpdate);
209
+ if (oldSystem.gravity.equalsToFloats(0, 0, 0) === false) {
210
+ outputUpdate = _CreateGravityUpdate(outputUpdate, oldSystem.gravity);
211
+ }
212
+ return outputUpdate;
213
+ }
214
+ function _CreateAngularSpeedUpdate(inputParticle, minAngularSpeed, maxAngularSpeed) {
215
+ // Random value between for the angular speed of the particle
216
+ const randomAngularSpeedBlock = new ParticleRandomBlock("Random Angular Speed");
217
+ _CreateAndConnectInput("Min Angular Speed", minAngularSpeed, randomAngularSpeedBlock.min);
218
+ _CreateAndConnectInput("Max Angular Speed", maxAngularSpeed, randomAngularSpeedBlock.max);
219
+ // Create the angular speed delta
220
+ const angleSpeedDeltaOutput = _CreateDeltaModifiedInput("Angular Speed", randomAngularSpeedBlock.output);
221
+ // Add it to the angle
222
+ const addAngle = new ParticleMathBlock("Add Angular Speed to Angle");
223
+ addAngle.operation = ParticleMathBlockOperations.Add;
224
+ _CreateAndConnectContextualSource("Angle", NodeParticleContextualSources.Angle, addAngle.left);
225
+ angleSpeedDeltaOutput.connectTo(addAngle.right);
226
+ // Update the particle angle
227
+ const updateAngle = new UpdateAngleBlock("Angle Update with Angular Speed");
228
+ inputParticle.connectTo(updateAngle.particle);
229
+ addAngle.output.connectTo(updateAngle.angle);
230
+ return updateAngle.output;
231
+ }
232
+ function _CreatePositionUpdate(inputParticle) {
233
+ // Calculate the new position
234
+ const addPositionBlock = new ParticleMathBlock("Add Position");
235
+ addPositionBlock.operation = ParticleMathBlockOperations.Add;
236
+ _CreateAndConnectContextualSource("Position", NodeParticleContextualSources.Position, addPositionBlock.left);
237
+ _CreateAndConnectContextualSource("Scaled Direction", NodeParticleContextualSources.ScaledDirection, addPositionBlock.right);
238
+ // Update the particle position
239
+ const updatePosition = new UpdatePositionBlock("Position Update");
240
+ inputParticle.connectTo(updatePosition.particle);
241
+ addPositionBlock.output.connectTo(updatePosition.position);
242
+ return updatePosition.output;
243
+ }
244
+ function _CreateGravityUpdate(inputParticle, gravity) {
245
+ // Create the gravity delta
246
+ const gravityDeltaOutput = _CreateDeltaModifiedInput("Gravity", gravity);
247
+ // Add it to the direction
248
+ const addDirectionBlock = new ParticleMathBlock("Add Gravity to Direction");
249
+ addDirectionBlock.operation = ParticleMathBlockOperations.Add;
250
+ _CreateAndConnectContextualSource("Direction", NodeParticleContextualSources.Direction, addDirectionBlock.left);
251
+ gravityDeltaOutput.connectTo(addDirectionBlock.right);
252
+ // Update the particle direction
253
+ const updateDirection = new UpdateDirectionBlock("Direction Update with Gravity");
254
+ inputParticle.connectTo(updateDirection.particle);
255
+ addDirectionBlock.output.connectTo(updateDirection.direction);
256
+ return updateDirection.output;
257
+ }
258
+ function _CreateColorUpdateBlock(oldSystem, createParticleBlock) {
259
+ if (!oldSystem) {
260
+ throw new Error("Invalid particle system");
261
+ }
262
+ // Calculate the color
263
+ const colorGradients = oldSystem.getColorGradients();
264
+ let colorBlock = null;
265
+ if (colorGradients && colorGradients.length > 0) {
266
+ colorBlock = _CreateGradientColorUpdate(oldSystem, colorGradients, createParticleBlock);
113
267
  }
114
268
  else {
115
- textureBlock.sourceTexture = particleSystem.particleTexture;
116
- }
117
- textureBlock.texture.connectTo(system.texture);
118
- // Default position update
119
- const basicPositionUpdateBlock = new BasicPositionUpdateBlock("Position update");
120
- shapeBlock.output.connectTo(basicPositionUpdateBlock.particle);
121
- // Default color update
122
- const basicColorUpdateBlock = new BasicColorUpdateBlock("Color update");
123
- basicPositionUpdateBlock.output.connectTo(basicColorUpdateBlock.particle);
124
- basicColorUpdateBlock.output.connectTo(system.particle);
125
- // Register
126
- target.systemBlocks.push(system);
269
+ colorBlock = _CreateBasicColorUpdate();
270
+ }
271
+ // Clamp alpha >= 0
272
+ const clampedColor = _ClampUpdateColorAlpha(colorBlock);
273
+ // Create the color update block
274
+ const colorUpdateBlock = new UpdateColorBlock("Color update");
275
+ clampedColor.colorOut.connectTo(colorUpdateBlock.color);
276
+ return colorUpdateBlock;
127
277
  }
128
- /**
129
- * Converts a ParticleSystem to a NodeParticleSystemSet.
130
- * @param name The name of the node particle system set.
131
- * @param particleSystems The particle systems to convert.
132
- * @returns The converted node particle system set or null if conversion failed.
133
- * #0K3AQ2#3627
134
- */
135
- export async function ConvertToNodeParticleSystemSetAsync(name, particleSystems) {
136
- if (!particleSystems || !particleSystems.length) {
137
- return null;
278
+ function _CreateGradientColorUpdate(oldSystem, gradient, createParticleBlock) {
279
+ const colorGradientBlock = new ParticleGradientBlock("Color Gradient");
280
+ _CreateAndConnectContextualSource("gradient", NodeParticleContextualSources.Age, colorGradientBlock.gradient);
281
+ let tempColor = null;
282
+ let colorStart = null;
283
+ let colorEnd = null;
284
+ for (let i = 0; i < gradient.length; i++) {
285
+ const gradientStep = gradient[i];
286
+ const gradientValueBlock = new ParticleGradientValueBlock("Color Gradient Value " + i);
287
+ gradientValueBlock.reference = gradientStep.gradient;
288
+ if (gradientStep.color2) {
289
+ // Create a random between color1 and color2
290
+ const randomColorBlock = new ParticleRandomBlock("Random Color for Gradient " + i);
291
+ randomColorBlock.lockMode = ParticleRandomBlockLocks.PerSystem;
292
+ _CreateAndConnectInput("Color 1", gradientStep.color1, randomColorBlock.min);
293
+ _CreateAndConnectInput("Color 2", gradientStep.color2, randomColorBlock.max);
294
+ randomColorBlock.output.connectTo(gradientValueBlock.value);
295
+ tempColor = randomColorBlock;
296
+ }
297
+ else {
298
+ // Single color
299
+ const input = new ParticleInputBlock("Color " + i);
300
+ input.value = gradientStep.color1;
301
+ input.output.connectTo(gradientValueBlock.value);
302
+ tempColor = input;
303
+ }
304
+ if (gradientStep.gradient === 0) {
305
+ colorStart = tempColor;
306
+ }
307
+ else if (gradientStep.gradient === 1) {
308
+ colorEnd = tempColor;
309
+ }
310
+ gradientValueBlock.output.connectTo(colorGradientBlock.inputs[i + 1]);
138
311
  }
139
- const nodeParticleSystemSet = new NodeParticleSystemSet(name);
140
- const promises = [];
141
- for (const particleSystem of particleSystems) {
142
- promises.push(_ExtractDatafromParticleSystemAsync(particleSystem, nodeParticleSystemSet));
312
+ _UpdateCreateParticleColor(oldSystem, colorStart, colorEnd, createParticleBlock);
313
+ return colorGradientBlock;
314
+ }
315
+ function _CreateBasicColorUpdate() {
316
+ const addColorBlock = new ParticleMathBlock("Add Color");
317
+ addColorBlock.operation = ParticleMathBlockOperations.Add;
318
+ _CreateAndConnectContextualSource("Color", NodeParticleContextualSources.Color, addColorBlock.left);
319
+ _CreateAndConnectContextualSource("Scaled Color Step", NodeParticleContextualSources.ScaledColorStep, addColorBlock.right);
320
+ return addColorBlock;
321
+ }
322
+ function _UpdateCreateParticleColor(oldSystem, colorStart, colorEnd, createParticleBlock) {
323
+ if (colorStart === null) {
324
+ colorStart = new ParticleInputBlock("Color Start");
325
+ colorStart.value = oldSystem.color1;
143
326
  }
144
- await Promise.all(promises);
145
- return nodeParticleSystemSet;
327
+ if (colorEnd === null) {
328
+ colorEnd = new ParticleInputBlock("Color End");
329
+ colorEnd.value = oldSystem.color2;
330
+ }
331
+ const randomColorBlock = new ParticleRandomBlock("Random color");
332
+ randomColorBlock.lockMode = ParticleRandomBlockLocks.PerSystem;
333
+ colorStart.output.connectTo(randomColorBlock.min);
334
+ colorEnd.output.connectTo(randomColorBlock.max);
335
+ randomColorBlock.output.connectTo(createParticleBlock.color);
336
+ }
337
+ function _ClampUpdateColorAlpha(colorBlock) {
338
+ // Decompose color to clamp alpha
339
+ const decomposeColorBlock = new ParticleConverterBlock("Decompose Color");
340
+ colorBlock.outputs[0].connectTo(decomposeColorBlock.colorIn);
341
+ // Clamp alpha to be >= 0
342
+ const maxAlphaBlock = new ParticleMathBlock("Alpha >= 0");
343
+ maxAlphaBlock.operation = ParticleMathBlockOperations.Max;
344
+ decomposeColorBlock.wOut.connectTo(maxAlphaBlock.left);
345
+ _CreateAndConnectInput("Zero", 0, maxAlphaBlock.right);
346
+ // Recompose color
347
+ const composeColorBlock = new ParticleConverterBlock("Compose Color");
348
+ decomposeColorBlock.xyzOut.connectTo(composeColorBlock.xyzIn);
349
+ maxAlphaBlock.output.connectTo(composeColorBlock.wIn);
350
+ return composeColorBlock;
351
+ }
352
+ function _CreateDeltaModifiedInput(name, value) {
353
+ const multiplyBlock = new ParticleMathBlock("Multiply by Delta");
354
+ multiplyBlock.operation = ParticleMathBlockOperations.Multiply;
355
+ if (value instanceof Vector3) {
356
+ _CreateAndConnectInput(name, value, multiplyBlock.left);
357
+ }
358
+ else {
359
+ value.connectTo(multiplyBlock.left);
360
+ }
361
+ _CreateAndConnectSystemSource("Delta", NodeParticleSystemSources.Delta, multiplyBlock.right);
362
+ return multiplyBlock.output;
363
+ }
364
+ function _CreateAndConnectInput(inputBlockName, value, targetToConnectTo, inputType) {
365
+ const input = new ParticleInputBlock(inputBlockName, inputType);
366
+ input.value = value;
367
+ input.output.connectTo(targetToConnectTo);
368
+ }
369
+ function _CreateAndConnectContextualSource(contextualBlockName, contextSource, targetToConnectTo) {
370
+ const input = new ParticleInputBlock(contextualBlockName);
371
+ input.contextualValue = contextSource;
372
+ input.output.connectTo(targetToConnectTo);
373
+ }
374
+ function _CreateAndConnectSystemSource(systemBlockName, systemSource, targetToConnectTo) {
375
+ const input = new ParticleInputBlock(systemBlockName);
376
+ input.systemSource = systemSource;
377
+ input.output.connectTo(targetToConnectTo);
146
378
  }
147
379
  //# sourceMappingURL=nodeParticleSystemSet.helper.js.map