@onerjs/core 8.30.8 → 8.31.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 (137) hide show
  1. package/Behaviors/Cameras/interpolatingBehavior.d.ts +52 -0
  2. package/Behaviors/Cameras/interpolatingBehavior.js +105 -0
  3. package/Behaviors/Cameras/interpolatingBehavior.js.map +1 -0
  4. package/Cameras/Inputs/arcRotateCameraPointersInput.d.ts +5 -20
  5. package/Cameras/Inputs/arcRotateCameraPointersInput.js +9 -69
  6. package/Cameras/Inputs/arcRotateCameraPointersInput.js.map +1 -1
  7. package/Cameras/Inputs/geospatialCameraPointersInput.d.ts +10 -2
  8. package/Cameras/Inputs/geospatialCameraPointersInput.js +20 -2
  9. package/Cameras/Inputs/geospatialCameraPointersInput.js.map +1 -1
  10. package/Cameras/Inputs/orbitCameraPointersInput.d.ts +49 -0
  11. package/Cameras/Inputs/orbitCameraPointersInput.js +105 -0
  12. package/Cameras/Inputs/orbitCameraPointersInput.js.map +1 -0
  13. package/Cameras/camera.js +1 -0
  14. package/Cameras/camera.js.map +1 -1
  15. package/Cameras/cameraMovement.d.ts +150 -0
  16. package/Cameras/cameraMovement.js +190 -0
  17. package/Cameras/cameraMovement.js.map +1 -0
  18. package/Cameras/targetCamera.js +0 -4
  19. package/Cameras/targetCamera.js.map +1 -1
  20. package/Culling/ray.core.js +1 -1
  21. package/Culling/ray.core.js.map +1 -1
  22. package/Decorators/nodeDecorator.d.ts +9 -7
  23. package/Decorators/nodeDecorator.js +9 -7
  24. package/Decorators/nodeDecorator.js.map +1 -1
  25. package/Engines/WebGPU/webgpuTextureManager.js +2 -2
  26. package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
  27. package/Engines/abstractEngine.js +2 -2
  28. package/Engines/abstractEngine.js.map +1 -1
  29. package/FrameGraph/Node/Blocks/Layers/glowLayerBlock.js +1 -1
  30. package/FrameGraph/Node/Blocks/Layers/glowLayerBlock.js.map +1 -1
  31. package/FrameGraph/Node/Blocks/Layers/highlightLayerBlock.js +1 -1
  32. package/FrameGraph/Node/Blocks/Layers/highlightLayerBlock.js.map +1 -1
  33. package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.js +1 -1
  34. package/FrameGraph/Node/Blocks/PostProcesses/baseWithPropertiesPostProcessBlock.js +1 -1
  35. package/FrameGraph/Node/Blocks/PostProcesses/circleOfConfusionPostProcessBlock.js +1 -1
  36. package/FrameGraph/Node/Blocks/PostProcesses/colorCorrectionPostProcessBlock.js +1 -1
  37. package/FrameGraph/Node/Blocks/PostProcesses/depthOfFieldPostProcessBlock.js +1 -1
  38. package/FrameGraph/Node/Blocks/PostProcesses/filterPostProcessBlock.js +1 -1
  39. package/FrameGraph/Node/Blocks/PostProcesses/imageProcessingPostProcessBlock.js +1 -1
  40. package/FrameGraph/Node/Blocks/PostProcesses/ssao2PostProcessBlock.js +1 -1
  41. package/FrameGraph/Node/Blocks/PostProcesses/ssao2PostProcessBlock.js.map +1 -1
  42. package/FrameGraph/Node/Blocks/PostProcesses/ssrPostProcessBlock.js +1 -1
  43. package/FrameGraph/Node/Blocks/PostProcesses/ssrPostProcessBlock.js.map +1 -1
  44. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.d.ts +6 -0
  45. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js +26 -0
  46. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
  47. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.d.ts +6 -0
  48. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.js +48 -22
  49. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.js.map +1 -1
  50. package/FrameGraph/Node/Blocks/Textures/clearBlock.js +3 -3
  51. package/FrameGraph/Node/Blocks/Textures/clearBlock.js.map +1 -1
  52. package/FrameGraph/Node/Blocks/Textures/copyTextureBlock.js +1 -1
  53. package/FrameGraph/Node/Blocks/Textures/generateMipmapsBlock.js +1 -1
  54. package/FrameGraph/Node/Blocks/Textures/generateMipmapsBlock.js.map +1 -1
  55. package/FrameGraph/Node/nodeRenderGraph.js +2 -1
  56. package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
  57. package/FrameGraph/Passes/{cullPass.d.ts → objectListPass.d.ts} +8 -8
  58. package/FrameGraph/Passes/{cullPass.js → objectListPass.js} +9 -9
  59. package/FrameGraph/Passes/objectListPass.js.map +1 -0
  60. package/FrameGraph/Passes/renderPass.d.ts +6 -2
  61. package/FrameGraph/Passes/renderPass.js +14 -2
  62. package/FrameGraph/Passes/renderPass.js.map +1 -1
  63. package/FrameGraph/Tasks/Misc/cullObjectsTask.js +2 -2
  64. package/FrameGraph/Tasks/Misc/cullObjectsTask.js.map +1 -1
  65. package/FrameGraph/Tasks/Rendering/geometryRendererTask.d.ts +8 -0
  66. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +10 -0
  67. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
  68. package/FrameGraph/Tasks/Rendering/objectRendererTask.d.ts +8 -0
  69. package/FrameGraph/Tasks/Rendering/objectRendererTask.js +13 -0
  70. package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
  71. package/FrameGraph/Tasks/Texture/clearTextureTask.d.ts +1 -1
  72. package/FrameGraph/Tasks/Texture/clearTextureTask.js +7 -5
  73. package/FrameGraph/Tasks/Texture/clearTextureTask.js.map +1 -1
  74. package/FrameGraph/frameGraph.d.ts +10 -4
  75. package/FrameGraph/frameGraph.js +22 -9
  76. package/FrameGraph/frameGraph.js.map +1 -1
  77. package/FrameGraph/frameGraphTask.js +3 -3
  78. package/FrameGraph/frameGraphTask.js.map +1 -1
  79. package/FrameGraph/index.d.ts +1 -1
  80. package/FrameGraph/index.js +1 -1
  81. package/FrameGraph/index.js.map +1 -1
  82. package/Materials/floatingOriginMatrixOverrides.js +19 -0
  83. package/Materials/floatingOriginMatrixOverrides.js.map +1 -1
  84. package/Materials/shaderMaterial.d.ts +9 -0
  85. package/Materials/shaderMaterial.js +35 -0
  86. package/Materials/shaderMaterial.js.map +1 -1
  87. package/Particles/EmitterTypes/coneParticleEmitter.d.ts +6 -4
  88. package/Particles/EmitterTypes/coneParticleEmitter.js +18 -12
  89. package/Particles/EmitterTypes/coneParticleEmitter.js.map +1 -1
  90. package/Particles/EmitterTypes/customParticleEmitter.d.ts +5 -3
  91. package/Particles/EmitterTypes/customParticleEmitter.js +8 -6
  92. package/Particles/EmitterTypes/customParticleEmitter.js.map +1 -1
  93. package/Particles/Node/Blocks/Emitters/coneShapeBlock.d.ts +15 -4
  94. package/Particles/Node/Blocks/Emitters/coneShapeBlock.js +66 -36
  95. package/Particles/Node/Blocks/Emitters/coneShapeBlock.js.map +1 -1
  96. package/Particles/Node/Blocks/Emitters/customShapeBlock.d.ts +13 -9
  97. package/Particles/Node/Blocks/Emitters/customShapeBlock.js +36 -23
  98. package/Particles/Node/Blocks/Emitters/customShapeBlock.js.map +1 -1
  99. package/Particles/Node/Blocks/Emitters/sphereShapeBlock.d.ts +6 -0
  100. package/Particles/Node/Blocks/Emitters/sphereShapeBlock.js +22 -1
  101. package/Particles/Node/Blocks/Emitters/sphereShapeBlock.js.map +1 -1
  102. package/Particles/Node/Blocks/Update/basicColorUpdateBlock.d.ts +1 -1
  103. package/Particles/Node/Blocks/Update/basicColorUpdateBlock.js +1 -1
  104. package/Particles/Node/Blocks/Update/basicColorUpdateBlock.js.map +1 -1
  105. package/Particles/Node/Blocks/Update/basicPositionUpdateBlock.d.ts +1 -1
  106. package/Particles/Node/Blocks/Update/basicPositionUpdateBlock.js +1 -1
  107. package/Particles/Node/Blocks/Update/basicPositionUpdateBlock.js.map +1 -1
  108. package/Particles/Node/Blocks/Update/updateSizeBlock.d.ts +35 -0
  109. package/Particles/Node/Blocks/Update/updateSizeBlock.js +73 -0
  110. package/Particles/Node/Blocks/Update/updateSizeBlock.js.map +1 -0
  111. package/Particles/Node/Blocks/index.d.ts +1 -0
  112. package/Particles/Node/Blocks/index.js +1 -0
  113. package/Particles/Node/Blocks/index.js.map +1 -1
  114. package/Particles/Node/Blocks/particleInputBlock.js +1 -0
  115. package/Particles/Node/Blocks/particleInputBlock.js.map +1 -1
  116. package/Particles/Node/Blocks/particleRandomBlock.d.ts +5 -2
  117. package/Particles/Node/Blocks/particleRandomBlock.js +32 -14
  118. package/Particles/Node/Blocks/particleRandomBlock.js.map +1 -1
  119. package/Particles/Node/Blocks/systemBlock.d.ts +12 -4
  120. package/Particles/Node/Blocks/systemBlock.js +16 -12
  121. package/Particles/Node/Blocks/systemBlock.js.map +1 -1
  122. package/Particles/Node/Enums/nodeParticleContextualSources.d.ts +3 -1
  123. package/Particles/Node/Enums/nodeParticleContextualSources.js +2 -0
  124. package/Particles/Node/Enums/nodeParticleContextualSources.js.map +1 -1
  125. package/Particles/Node/nodeParticleBuildState.js +2 -0
  126. package/Particles/Node/nodeParticleBuildState.js.map +1 -1
  127. package/Particles/Node/nodeParticleSystemSet.helper.d.ts +0 -2
  128. package/Particles/Node/nodeParticleSystemSet.helper.js +293 -44
  129. package/Particles/Node/nodeParticleSystemSet.helper.js.map +1 -1
  130. package/Particles/thinParticleSystem.d.ts +3 -3
  131. package/Particles/thinParticleSystem.js +4 -4
  132. package/Particles/thinParticleSystem.js.map +1 -1
  133. package/package.json +1 -1
  134. package/scene.d.ts +1 -3
  135. package/scene.js +8 -7
  136. package/scene.js.map +1 -1
  137. package/FrameGraph/Passes/cullPass.js.map +0 -1
@@ -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 { 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 { CylinderDirectedParticleEmitter, 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 { 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\n\r\nimport { Vector2, Vector3 } 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 { 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 { 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 _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 \"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 // 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 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"]}
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, FactorGradient } 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 { ConeDirectedParticleEmitter, 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\nimport { UpdateSizeBlock } from \"./Blocks/Update/updateSizeBlock\";\r\n\r\n/** Represents blocks or groups of blocks that can be used in multiple places in the graph, so they are stored in this context to be reused */\r\ntype ConversionContext = {\r\n targetStopDurationBlockOutput: NodeParticleConnectionPoint;\r\n timeToStopTimeRatioBlockGroupOutput: NodeParticleConnectionPoint;\r\n sizeGradientValue0Output: NodeParticleConnectionPoint;\r\n ageToLifeTimeRatioBlockGroupOutput: NodeParticleConnectionPoint;\r\n};\r\n\r\ntype RuntimeConversionContext = Partial<ConversionContext>;\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 */\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, context: RuntimeConversionContext): Promise<void> {\r\n // CreateParticle block\r\n const createParticleBlock = _CreateParticleBlockGroup(oldSystem, context);\r\n\r\n // Emitter Shape block\r\n const shapeBlock = _EmitterShapeBlock(oldSystem);\r\n createParticleBlock.particle.connectTo(shapeBlock.particle);\r\n\r\n // Update the particle position\r\n const positionUpdatedParticle = _UpdateParticleBlockGroup(shapeBlock.output, oldSystem, context);\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 = _SystemBlockGroup(oldSystem, context);\r\n colorUpdateBlock.output.connectTo(newSystem.particle);\r\n\r\n // Register\r\n newSet.systemBlocks.push(newSystem);\r\n}\r\n\r\n// ------------- SYSTEM FUNCTIONS -------------\r\n\r\nfunction _SystemBlockGroup(oldSystem: ParticleSystem, context: RuntimeConversionContext): 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 _CreateTargetStopDurationInputBlock(oldSystem, context).connectTo(newSystem.targetStopDuration);\r\n\r\n newSystem.emitRate = oldSystem.emitRate;\r\n newSystem.manualEmitCount = oldSystem.manualEmitCount;\r\n newSystem.blendMode = oldSystem.blendMode;\r\n newSystem.capacity = oldSystem.getCapacity();\r\n newSystem.startDelay = oldSystem.startDelay;\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\n// ------------- CREATE PARTICLE FUNCTIONS -------------\r\n\r\n// The creation of the different properties follows the order they are added to the CreationQueue in ThinParticleSystem:\r\n// Lifetime, Position, Direction, Emit, Size, Scale/StartSize, Angle, Velocity, VelocityLimit, Color, Drag, Noise, ColorDead, Ramp, Sheet\r\nfunction _CreateParticleBlockGroup(oldSystem: ParticleSystem, context: RuntimeConversionContext): CreateParticleBlock {\r\n // Create particle\r\n const createParticleBlock = new CreateParticleBlock(\"Create Particle\");\r\n\r\n // Lifetime\r\n _CreateParticleLifetimeBlockGroup(oldSystem, context).connectTo(createParticleBlock.lifeTime);\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 // Size\r\n _CreateParticleSizeBlockGroup(oldSystem, context).connectTo(createParticleBlock.size);\r\n\r\n // Scale/Start Size\r\n _CreateParticleScaleBlockGroup(oldSystem, context).connectTo(createParticleBlock.scale);\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 // 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 return createParticleBlock;\r\n}\r\n\r\n/**\r\n * Creates the group of blocks that represent the particle lifetime\r\n * @param oldSystem The old particle system to convert\r\n * @param context The context of the current conversion\r\n * @returns The output of the group of blocks that represent the particle lifetime\r\n */\r\nfunction _CreateParticleLifetimeBlockGroup(oldSystem: ParticleSystem, context: RuntimeConversionContext): NodeParticleConnectionPoint {\r\n if (oldSystem.targetStopDuration && oldSystem._lifeTimeGradients && oldSystem._lifeTimeGradients.length > 0) {\r\n context.timeToStopTimeRatioBlockGroupOutput = _CreateTimeToStopTimeRatioBlockGroup(oldSystem, context);\r\n const gradientBlockGroupOutput = _CreateGradientBlockGroup(\r\n context.timeToStopTimeRatioBlockGroupOutput,\r\n oldSystem._lifeTimeGradients,\r\n ParticleRandomBlockLocks.PerParticle,\r\n \"Lifetime\"\r\n );\r\n return gradientBlockGroupOutput;\r\n } else {\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 return randomLifetimeBlock.output;\r\n }\r\n}\r\n\r\n/**\r\n * Creates the group of blocks that represent the particle size\r\n * @param oldSystem The old particle system to convert\r\n * @param context The context of the current conversion\r\n * @returns The output of the group of blocks that represent the particle lifetime\r\n */\r\nfunction _CreateParticleSizeBlockGroup(oldSystem: ParticleSystem, context: RuntimeConversionContext): NodeParticleConnectionPoint {\r\n if (oldSystem._sizeGradients && oldSystem._sizeGradients.length > 0) {\r\n const sizeGradientBlockGroupOutput = _CreateParticleSizeGradientBlockGroup(oldSystem._sizeGradients, context);\r\n return sizeGradientBlockGroupOutput;\r\n } else {\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 return randomSizeBlock.output;\r\n }\r\n}\r\n\r\nfunction _CreateParticleScaleBlockGroup(oldSystem: ParticleSystem, context: RuntimeConversionContext): NodeParticleConnectionPoint {\r\n // Create the random 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\r\n if (oldSystem.targetStopDuration && oldSystem._startSizeGradients && oldSystem._startSizeGradients.length > 0) {\r\n // Create the start size gradient\r\n context.timeToStopTimeRatioBlockGroupOutput = _CreateTimeToStopTimeRatioBlockGroup(oldSystem, context);\r\n const gradientBlockGroupOutput = _CreateGradientBlockGroup(\r\n context.timeToStopTimeRatioBlockGroupOutput,\r\n oldSystem._startSizeGradients,\r\n ParticleRandomBlockLocks.PerParticle,\r\n \"Start Size\"\r\n );\r\n\r\n // Multiply the initial random scale by the start size gradient\r\n const multiplyScaleBlock = new ParticleMathBlock(\"Multiply Scale by Start Size Gradient\");\r\n multiplyScaleBlock.operation = ParticleMathBlockOperations.Multiply;\r\n randomScaleBlock.output.connectTo(multiplyScaleBlock.left);\r\n gradientBlockGroupOutput.connectTo(multiplyScaleBlock.right);\r\n\r\n return multiplyScaleBlock.output;\r\n } else {\r\n return randomScaleBlock.output;\r\n }\r\n}\r\n\r\nfunction _CreateParticleSizeGradientBlockGroup(sizeGradients: Array<FactorGradient>, context: RuntimeConversionContext): NodeParticleConnectionPoint {\r\n if (sizeGradients.length === 0) {\r\n throw new Error(\"No size gradients provided.\");\r\n }\r\n\r\n const initialParticleSize = _CreateSizeFromGradientStep(sizeGradients[0], 0);\r\n context.sizeGradientValue0Output = initialParticleSize;\r\n return initialParticleSize;\r\n}\r\n\r\nfunction _CreateSizeFromGradientStep(gradientStep: FactorGradient, index: number): NodeParticleConnectionPoint {\r\n if (gradientStep.factor2 !== undefined) {\r\n // Create a random between value1 and value2\r\n const randomBlock = new ParticleRandomBlock(\"Random Value \" + index);\r\n randomBlock.lockMode = ParticleRandomBlockLocks.OncePerParticle;\r\n _CreateAndConnectInput(\"Value 1\", gradientStep.factor1, randomBlock.min);\r\n _CreateAndConnectInput(\"Value 2\", gradientStep.factor2, randomBlock.max);\r\n return randomBlock.output;\r\n } else {\r\n // Single value\r\n const sizeBlock = new ParticleInputBlock(\"Value\");\r\n sizeBlock.value = gradientStep.factor1;\r\n return sizeBlock.output;\r\n }\r\n}\r\n\r\n// ------------- EMITTER SHAPE FUNCTIONS -------------\r\n\r\nfunction _EmitterShapeBlock(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 \"ConeDirectedParticleEmitter\": {\r\n const source = emitter as ConeDirectedParticleEmitter;\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 1\", source.direction1, target.direction1);\r\n _CreateAndConnectInput(\"Direction 2\", source.direction2, target.direction2);\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\n// ------------- UPDATE PARTICLE FUNCTIONS -------------\r\n\r\n/**\r\n * Creates the group of blocks that represent the particle system update\r\n * The creation of the different properties follows the order they are added to the ProcessQueue in ThinParticleSystem:\r\n * Color, AngularSpeedGradients, AngularSpeed, VelocityGradients, Direction, LimitVelocityGradients, DragGradients, Position, Noise, SizeGradients, Gravity, RemapGradients\r\n * @param inputParticle The particle input connection point\r\n * @param oldSystem The old particle system to convert\r\n * @param context The runtime conversion context\r\n * @returns The output connection point after all updates have been applied\r\n */\r\nfunction _UpdateParticleBlockGroup(inputParticle: NodeParticleConnectionPoint, oldSystem: ParticleSystem, context: RuntimeConversionContext): NodeParticleConnectionPoint {\r\n let outputUpdate: NodeParticleConnectionPoint = inputParticle;\r\n\r\n if (oldSystem.minAngularSpeed !== 0 || oldSystem.maxAngularSpeed !== 0) {\r\n outputUpdate = _UpdateParticleAngularSpeedBlockGroup(outputUpdate, oldSystem.minAngularSpeed, oldSystem.maxAngularSpeed);\r\n }\r\n\r\n outputUpdate = _UpdateParticlePositionBlockGroup(outputUpdate, oldSystem.isLocal);\r\n\r\n if (oldSystem._sizeGradients && oldSystem._sizeGradients.length > 0) {\r\n outputUpdate = _UpdateParticleSizeGradientBlockGroup(outputUpdate, oldSystem._sizeGradients, context);\r\n }\r\n\r\n if (oldSystem.gravity.equalsToFloats(0, 0, 0) === false) {\r\n outputUpdate = _UpdateParticleGravityBlockGroup(outputUpdate, oldSystem.gravity);\r\n }\r\n\r\n return outputUpdate;\r\n}\r\n\r\nfunction _UpdateParticleAngularSpeedBlockGroup(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 _UpdateParticlePositionBlockGroup(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 _UpdateParticleSizeGradientBlockGroup(\r\n inputParticle: NodeParticleConnectionPoint,\r\n sizeGradients: Array<FactorGradient>,\r\n context: RuntimeConversionContext\r\n): NodeParticleConnectionPoint {\r\n if (context.sizeGradientValue0Output === undefined) {\r\n throw new Error(\"Initial size gradient values not found in context.\");\r\n }\r\n\r\n context.ageToLifeTimeRatioBlockGroupOutput = _CreateAgeToLifeTimeRatioBlockGroup(context);\r\n\r\n // Generate the gradient\r\n const sizeValueOutput = _CreateGradientBlockGroup(context.ageToLifeTimeRatioBlockGroupOutput, sizeGradients, ParticleRandomBlockLocks.OncePerParticle, \"Size\", [\r\n context.sizeGradientValue0Output,\r\n ]);\r\n\r\n // Create the update size\r\n const updateSizeBlock = new UpdateSizeBlock(\"Size Update\");\r\n inputParticle.connectTo(updateSizeBlock.particle);\r\n sizeValueOutput.connectTo(updateSizeBlock.size);\r\n\r\n return updateSizeBlock.output;\r\n}\r\n\r\nfunction _UpdateParticleGravityBlockGroup(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\n// ------------- UTILITY FUNCTIONS -------------\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\r\n/**\r\n * Creates the target stop duration input block, as it can be shared in multiple places\r\n * This block is stored in the context so the same block is shared in the graph\r\n * @param oldSystem The old particle system to convert\r\n * @param context The context of the current conversion\r\n * @returns\r\n */\r\nfunction _CreateTargetStopDurationInputBlock(oldSystem: ParticleSystem, context: RuntimeConversionContext): NodeParticleConnectionPoint {\r\n // If we have already created the target stop duration input block, return it\r\n if (context.targetStopDurationBlockOutput) {\r\n return context.targetStopDurationBlockOutput;\r\n }\r\n\r\n // Create the target stop duration input block if not already created\r\n const targetStopDurationInputBlock = new ParticleInputBlock(\"Target Stop Duration\");\r\n targetStopDurationInputBlock.value = oldSystem.targetStopDuration;\r\n\r\n // Save the output in our context to avoid regenerating it again\r\n context.targetStopDurationBlockOutput = targetStopDurationInputBlock.output;\r\n return context.targetStopDurationBlockOutput;\r\n}\r\n\r\n/**\r\n * Create a group of blocks that calculates the ratio between the actual frame and the target stop duration, clamped between 0 and 1.\r\n * This is used to simulate the behavior of the old particle system where several particle gradient values are affected by the target stop duration.\r\n * This block group is stored in the context so the same group is shared in the graph\r\n * @param oldSystem The old particle system to convert\r\n * @param context The context of the current conversion\r\n * @returns The ratio block output connection point\r\n */\r\nfunction _CreateTimeToStopTimeRatioBlockGroup(oldSystem: ParticleSystem, context: RuntimeConversionContext): NodeParticleConnectionPoint {\r\n // If we have already generated this group, return it\r\n if (context.timeToStopTimeRatioBlockGroupOutput) {\r\n return context.timeToStopTimeRatioBlockGroupOutput;\r\n }\r\n\r\n context.targetStopDurationBlockOutput = _CreateTargetStopDurationInputBlock(oldSystem, context);\r\n\r\n // Find the ratio between the actual frame and the target stop duration\r\n const ratio = new ParticleMathBlock(\"Frame/Stop Ratio\");\r\n ratio.operation = ParticleMathBlockOperations.Divide;\r\n _CreateAndConnectSystemSource(\"Actual Frame\", NodeParticleSystemSources.Time, ratio.left);\r\n context.targetStopDurationBlockOutput.connectTo(ratio.right);\r\n\r\n // Make sure values is >=0\r\n const clampMin = new ParticleMathBlock(\"Clamp Min 0\");\r\n clampMin.operation = ParticleMathBlockOperations.Max;\r\n _CreateAndConnectInput(\"Zero\", 0, clampMin.left);\r\n ratio.output.connectTo(clampMin.right);\r\n\r\n // Make sure values is <=1\r\n const clampMax = new ParticleMathBlock(\"Clamp Max 1\");\r\n clampMax.operation = ParticleMathBlockOperations.Min;\r\n _CreateAndConnectInput(\"One\", 1, clampMax.left);\r\n clampMin.output.connectTo(clampMax.right);\r\n\r\n // Save the group output in our context to avoid regenerating it again\r\n context.timeToStopTimeRatioBlockGroupOutput = clampMax.output;\r\n return context.timeToStopTimeRatioBlockGroupOutput;\r\n}\r\n\r\nfunction _CreateAgeToLifeTimeRatioBlockGroup(context: RuntimeConversionContext): NodeParticleConnectionPoint {\r\n // If we have already generated this group, return it\r\n if (context.ageToLifeTimeRatioBlockGroupOutput) {\r\n return context.ageToLifeTimeRatioBlockGroupOutput;\r\n }\r\n\r\n // Find the ratio between the age and the lifetime\r\n const ratio = new ParticleMathBlock(\"Age/LifeTime Ratio\");\r\n ratio.operation = ParticleMathBlockOperations.Divide;\r\n _CreateAndConnectContextualSource(\"Age\", NodeParticleContextualSources.Age, ratio.left);\r\n _CreateAndConnectContextualSource(\"LifeTime\", NodeParticleContextualSources.Lifetime, ratio.right);\r\n\r\n // Save the group output in our context to avoid regenerating it again\r\n context.ageToLifeTimeRatioBlockGroupOutput = ratio.output;\r\n return ratio.output;\r\n}\r\n\r\n/**\r\n * Creates the blocks that represent a gradient\r\n * @param gradientSelector The value that determines which gradient to use\r\n * @param gradientValues The list of gradient values\r\n * @param randomLockMode The type of random to use for the gradient values\r\n * @param prefix The prefix to use for naming the blocks\r\n * @param initialValues Optional initial values to connect to the gradient inputs that were calculated during other steps of the conversion\r\n * @returns The output connection point of the gradient block\r\n */\r\nfunction _CreateGradientBlockGroup(\r\n gradientSelector: NodeParticleConnectionPoint,\r\n gradientValues: Array<FactorGradient>,\r\n randomLockMode: ParticleRandomBlockLocks,\r\n prefix: string,\r\n initialValues: NodeParticleConnectionPoint[] = []\r\n): NodeParticleConnectionPoint {\r\n // Create the gradient block and connect the value that controls the gradient selection\r\n const gradientBlock = new ParticleGradientBlock(prefix + \" Gradient Block\");\r\n gradientSelector.connectTo(gradientBlock.gradient);\r\n\r\n // If initial values are provided, we use them instead of the values in the gradientValues array\r\n // These means this values were already transformed into blocks on a previous step of the conversion and we must reuse them\r\n for (let i = 0; i < initialValues.length; i++) {\r\n const reference = i < gradientValues.length ? gradientValues[i].gradient : 1;\r\n const gradientValueBlock = new ParticleGradientValueBlock(prefix + \" Gradient Value \" + i);\r\n gradientValueBlock.reference = reference;\r\n initialValues[i].connectTo(gradientValueBlock.value);\r\n gradientValueBlock.output.connectTo(gradientBlock.inputs[i + 1]);\r\n }\r\n\r\n // Create the gradient values\r\n for (let i = 0 + initialValues.length; i < gradientValues.length; i++) {\r\n const gradientValueBlockGroupOutput = _CreateGradientValueBlockGroup(gradientValues[i], randomLockMode, prefix, i);\r\n gradientValueBlockGroupOutput.connectTo(gradientBlock.inputs[i + 1]);\r\n }\r\n\r\n return gradientBlock.output;\r\n}\r\n\r\n/**\r\n * Creates the blocks that represent a gradient value\r\n * This can be either a single value or a random between two values\r\n * @param gradientStep The gradient step data\r\n * @param randomLockMode The lock mode to use for random values\r\n * @param prefix The prefix to use for naming the blocks\r\n * @param index The index of the gradient step\r\n * @returns The output connection point of the gradient value block\r\n */\r\nfunction _CreateGradientValueBlockGroup(gradientStep: FactorGradient, randomLockMode: ParticleRandomBlockLocks, prefix: string, index: number): NodeParticleConnectionPoint {\r\n const gradientValueBlock = new ParticleGradientValueBlock(prefix + \" Gradient Value \" + index);\r\n gradientValueBlock.reference = gradientStep.gradient;\r\n\r\n if (gradientStep.factor2 !== undefined) {\r\n // Create a random between value1 and value2\r\n const randomBlock = new ParticleRandomBlock(\"Random Value \" + index);\r\n randomBlock.lockMode = randomLockMode;\r\n _CreateAndConnectInput(\"Value 1\", gradientStep.factor1, randomBlock.min);\r\n _CreateAndConnectInput(\"Value 2\", gradientStep.factor2, randomBlock.max);\r\n randomBlock.output.connectTo(gradientValueBlock.value);\r\n } else {\r\n // Single value\r\n _CreateAndConnectInput(\"Value\", gradientStep.factor1, gradientValueBlock.value);\r\n }\r\n\r\n return gradientValueBlock.output;\r\n}\r\n"]}
@@ -286,14 +286,14 @@ export declare class ThinParticleSystem extends BaseParticleSystem implements ID
286
286
  constructor(name: string, capacity: number, sceneOrEngine: Scene | AbstractEngine, customEffect?: Nullable<Effect>, isAnimationSheetEnabled?: boolean, epsilon?: number, noUpdateQueue?: boolean);
287
287
  /** @internal */
288
288
  _emitFromParticle: (particle: Particle) => void;
289
- serialize(serializeTexture: boolean): void;
289
+ serialize(_serializeTexture: boolean): void;
290
290
  /**
291
291
  * Clones the particle system.
292
292
  * @param name The name of the cloned object
293
293
  * @param newEmitter The new emitter to use
294
- * @param cloneTexture Also clone the textures if true
294
+ * @param _cloneTexture Also clone the textures if true
295
295
  */
296
- clone(name: string, newEmitter: any, cloneTexture?: boolean): ThinParticleSystem;
296
+ clone(name: string, newEmitter: any, _cloneTexture?: boolean): ThinParticleSystem;
297
297
  private _addFactorGradient;
298
298
  private _removeFactorGradient;
299
299
  private _syncLifeTimeCreation;
@@ -351,7 +351,7 @@ export class ThinParticleSystem extends BaseParticleSystem {
351
351
  /** @internal */
352
352
  this._onBeforeDrawParticlesObservable = null;
353
353
  /** @internal */
354
- this._emitFromParticle = (particle) => {
354
+ this._emitFromParticle = (_particle) => {
355
355
  // Do nothing
356
356
  };
357
357
  // start of sub system methods
@@ -551,16 +551,16 @@ export class ThinParticleSystem extends BaseParticleSystem {
551
551
  }
552
552
  };
553
553
  }
554
- serialize(serializeTexture) {
554
+ serialize(_serializeTexture) {
555
555
  throw new Error("Method not implemented.");
556
556
  }
557
557
  /**
558
558
  * Clones the particle system.
559
559
  * @param name The name of the cloned object
560
560
  * @param newEmitter The new emitter to use
561
- * @param cloneTexture Also clone the textures if true
561
+ * @param _cloneTexture Also clone the textures if true
562
562
  */
563
- clone(name, newEmitter, cloneTexture = false) {
563
+ clone(name, newEmitter, _cloneTexture = false) {
564
564
  throw new Error("Method not implemented.");
565
565
  }
566
566
  _addFactorGradient(factorGradients, gradient, factor, factor2) {