@onerjs/core 8.56.3 → 9.0.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 (484) hide show
  1. package/Animations/animatable.core.js +36 -0
  2. package/Animations/animatable.core.js.map +1 -1
  3. package/Animations/animationGroup.pure.d.ts +61 -1
  4. package/Animations/animationGroup.pure.js +191 -2
  5. package/Animations/animationGroup.pure.js.map +1 -1
  6. package/Animations/index.d.ts +1 -0
  7. package/Animations/index.js +1 -0
  8. package/Animations/index.js.map +1 -1
  9. package/Animations/pure.d.ts +1 -0
  10. package/Animations/pure.js +1 -0
  11. package/Animations/pure.js.map +1 -1
  12. package/Animations/rootMotion.d.ts +560 -0
  13. package/Animations/rootMotion.js +1709 -0
  14. package/Animations/rootMotion.js.map +1 -0
  15. package/Animations/runtimeAnimation.d.ts +57 -0
  16. package/Animations/runtimeAnimation.js +127 -3
  17. package/Animations/runtimeAnimation.js.map +1 -1
  18. package/Cameras/arcRotateCamera.pure.d.ts +2 -0
  19. package/Cameras/arcRotateCamera.pure.js +2 -0
  20. package/Cameras/arcRotateCamera.pure.js.map +1 -1
  21. package/Cameras/camera.pure.js +4 -0
  22. package/Cameras/camera.pure.js.map +1 -1
  23. package/Cameras/targetCamera.pure.d.ts +2 -0
  24. package/Cameras/targetCamera.pure.js +7 -1
  25. package/Cameras/targetCamera.pure.js.map +1 -1
  26. package/Collisions/gpuPicker.js +5 -5
  27. package/Collisions/gpuPicker.js.map +1 -1
  28. package/Engines/AbstractEngine/abstractEngine.query.pure.js +4 -2
  29. package/Engines/AbstractEngine/abstractEngine.query.pure.js.map +1 -1
  30. package/Engines/AbstractEngine/abstractEngine.query.types.d.ts +11 -2
  31. package/Engines/AbstractEngine/abstractEngine.query.types.js.map +1 -1
  32. package/Engines/AbstractEngine/abstractEngine.renderPass.pure.js +1 -0
  33. package/Engines/AbstractEngine/abstractEngine.renderPass.pure.js.map +1 -1
  34. package/Engines/Extensions/engine.multiRender.pure.js +63 -0
  35. package/Engines/Extensions/engine.multiRender.pure.js.map +1 -1
  36. package/Engines/Extensions/engine.multiRender.types.d.ts +13 -0
  37. package/Engines/Extensions/engine.multiRender.types.js.map +1 -1
  38. package/Engines/Extensions/engine.prefilteredCubeTexture.pure.js +2 -2
  39. package/Engines/Extensions/engine.prefilteredCubeTexture.pure.js.map +1 -1
  40. package/Engines/Extensions/engine.prefilteredCubeTexture.types.d.ts +2 -1
  41. package/Engines/Extensions/engine.prefilteredCubeTexture.types.js.map +1 -1
  42. package/Engines/Extensions/index.d.ts +1 -0
  43. package/Engines/Extensions/index.js +1 -0
  44. package/Engines/Extensions/index.js.map +1 -1
  45. package/Engines/Extensions/pure.d.ts +1 -1
  46. package/Engines/Extensions/pure.js +1 -1
  47. package/Engines/Extensions/pure.js.map +1 -1
  48. package/Engines/Native/Extensions/nativeEngine.cubeTexture.pure.js +88 -39
  49. package/Engines/Native/Extensions/nativeEngine.cubeTexture.pure.js.map +1 -1
  50. package/Engines/Native/Extensions/nativeEngine.cubeTexture.types.d.ts +20 -2
  51. package/Engines/Native/Extensions/nativeEngine.cubeTexture.types.js.map +1 -1
  52. package/Engines/WebGPU/Extensions/engine.multiRender.pure.js +4 -0
  53. package/Engines/WebGPU/Extensions/engine.multiRender.pure.js.map +1 -1
  54. package/Engines/WebGPU/Extensions/engine.multiRender.types.d.ts +13 -0
  55. package/Engines/WebGPU/Extensions/engine.multiRender.types.js.map +1 -1
  56. package/Engines/WebGPU/Extensions/engine.query.pure.js +11 -3
  57. package/Engines/WebGPU/Extensions/engine.query.pure.js.map +1 -1
  58. package/Engines/WebGPU/Extensions/index.d.ts +1 -0
  59. package/Engines/WebGPU/Extensions/index.js +1 -0
  60. package/Engines/WebGPU/Extensions/index.js.map +1 -1
  61. package/Engines/WebGPU/Extensions/pure.d.ts +1 -1
  62. package/Engines/WebGPU/Extensions/pure.js +1 -1
  63. package/Engines/WebGPU/Extensions/pure.js.map +1 -1
  64. package/Engines/WebGPU/webgpuBundleList.d.ts +2 -0
  65. package/Engines/WebGPU/webgpuBundleList.js +4 -0
  66. package/Engines/WebGPU/webgpuBundleList.js.map +1 -1
  67. package/Engines/WebGPU/webgpuCacheRenderPipeline.js +5 -2
  68. package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
  69. package/Engines/WebGPU/webgpuHardwareTexture.js +3 -1
  70. package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
  71. package/Engines/WebGPU/webgpuOcclusionQuery.js +1 -1
  72. package/Engines/WebGPU/webgpuOcclusionQuery.js.map +1 -1
  73. package/Engines/WebGPU/webgpuSnapshotRendering.d.ts +4 -0
  74. package/Engines/WebGPU/webgpuSnapshotRendering.js +40 -7
  75. package/Engines/WebGPU/webgpuSnapshotRendering.js.map +1 -1
  76. package/Engines/WebGPU/webgpuTextureHelper.d.ts +1 -1
  77. package/Engines/WebGPU/webgpuTextureHelper.js +2 -2
  78. package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
  79. package/Engines/WebGPU/webgpuTextureManager.d.ts +2 -0
  80. package/Engines/WebGPU/webgpuTextureManager.js +286 -13
  81. package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
  82. package/Engines/abstractEngine.pure.d.ts +2 -0
  83. package/Engines/abstractEngine.pure.js +7 -3
  84. package/Engines/abstractEngine.pure.js.map +1 -1
  85. package/Engines/constants.d.ts +4 -0
  86. package/Engines/constants.js +4 -0
  87. package/Engines/constants.js.map +1 -1
  88. package/Engines/thinEngine.pure.d.ts +14 -0
  89. package/Engines/thinEngine.pure.js +48 -12
  90. package/Engines/thinEngine.pure.js.map +1 -1
  91. package/Engines/thinNativeEngine.pure.d.ts +1 -0
  92. package/Engines/thinNativeEngine.pure.js +7 -1
  93. package/Engines/thinNativeEngine.pure.js.map +1 -1
  94. package/Engines/thinWebGPUEngine.d.ts +4 -0
  95. package/Engines/thinWebGPUEngine.js +10 -1
  96. package/Engines/thinWebGPUEngine.js.map +1 -1
  97. package/Engines/webgpuEngine.pure.d.ts +5 -2
  98. package/Engines/webgpuEngine.pure.js +48 -13
  99. package/Engines/webgpuEngine.pure.js.map +1 -1
  100. package/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.pure.js +2 -2
  101. package/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.pure.js.map +1 -1
  102. package/FlowGraph/Blocks/Data/Utils/flowGraphArrayIndexBlock.pure.d.ts +11 -2
  103. package/FlowGraph/Blocks/Data/Utils/flowGraphArrayIndexBlock.pure.js +1 -1
  104. package/FlowGraph/Blocks/Data/Utils/flowGraphArrayIndexBlock.pure.js.map +1 -1
  105. package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.pure.d.ts +9 -1
  106. package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.pure.js +6 -8
  107. package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.pure.js.map +1 -1
  108. package/FlowGraph/Blocks/Event/flowGraphPointerOutEventBlock.pure.d.ts +2 -0
  109. package/FlowGraph/Blocks/Event/flowGraphPointerOutEventBlock.pure.js +5 -1
  110. package/FlowGraph/Blocks/Event/flowGraphPointerOutEventBlock.pure.js.map +1 -1
  111. package/FlowGraph/Blocks/Event/flowGraphPointerOverEventBlock.pure.d.ts +2 -0
  112. package/FlowGraph/Blocks/Event/flowGraphPointerOverEventBlock.pure.js +5 -1
  113. package/FlowGraph/Blocks/Event/flowGraphPointerOverEventBlock.pure.js.map +1 -1
  114. package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.pure.d.ts +9 -0
  115. package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.pure.js +34 -9
  116. package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.pure.js.map +1 -1
  117. package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.pure.d.ts +2 -0
  118. package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.pure.js +4 -0
  119. package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.pure.js.map +1 -1
  120. package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.pure.d.ts +2 -0
  121. package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.pure.js +4 -0
  122. package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.pure.js.map +1 -1
  123. package/FlowGraph/Blocks/Event/flowGraphSendCustomEventBlock.pure.js +19 -7
  124. package/FlowGraph/Blocks/Event/flowGraphSendCustomEventBlock.pure.js.map +1 -1
  125. package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.pure.d.ts +20 -2
  126. package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.pure.js +53 -10
  127. package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.pure.js.map +1 -1
  128. package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.pure.d.ts +16 -1
  129. package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.pure.js +64 -14
  130. package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.pure.js.map +1 -1
  131. package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.pure.js +64 -16
  132. package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.pure.js.map +1 -1
  133. package/FlowGraph/flowGraph.d.ts +4 -0
  134. package/FlowGraph/flowGraph.js +38 -7
  135. package/FlowGraph/flowGraph.js.map +1 -1
  136. package/FlowGraph/flowGraphBlock.js +3 -0
  137. package/FlowGraph/flowGraphBlock.js.map +1 -1
  138. package/FlowGraph/flowGraphConnection.d.ts +7 -0
  139. package/FlowGraph/flowGraphConnection.js +7 -0
  140. package/FlowGraph/flowGraphConnection.js.map +1 -1
  141. package/FlowGraph/flowGraphContext.d.ts +2 -1
  142. package/FlowGraph/flowGraphContext.js +4 -3
  143. package/FlowGraph/flowGraphContext.js.map +1 -1
  144. package/FlowGraph/flowGraphCoordinator.d.ts +15 -1
  145. package/FlowGraph/flowGraphCoordinator.js +47 -16
  146. package/FlowGraph/flowGraphCoordinator.js.map +1 -1
  147. package/FlowGraph/flowGraphEventBlock.d.ts +5 -0
  148. package/FlowGraph/flowGraphEventBlock.js +7 -0
  149. package/FlowGraph/flowGraphEventBlock.js.map +1 -1
  150. package/FlowGraph/flowGraphHostResolver.d.ts +2 -1
  151. package/FlowGraph/flowGraphHostResolver.js.map +1 -1
  152. package/FlowGraph/flowGraphParser.js +60 -2
  153. package/FlowGraph/flowGraphParser.js.map +1 -1
  154. package/FlowGraph/serialization.d.ts +2 -0
  155. package/FlowGraph/serialization.js +10 -22
  156. package/FlowGraph/serialization.js.map +1 -1
  157. package/FlowGraph/typeDefinitions.d.ts +8 -0
  158. package/FlowGraph/typeDefinitions.js.map +1 -1
  159. package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.d.ts +5 -0
  160. package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.js +8 -0
  161. package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.js.map +1 -0
  162. package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.pure.d.ts +87 -0
  163. package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.pure.js +295 -0
  164. package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.pure.js.map +1 -0
  165. package/FrameGraph/Node/Blocks/PostProcesses/pure.d.ts +1 -0
  166. package/FrameGraph/Node/Blocks/PostProcesses/pure.js +1 -0
  167. package/FrameGraph/Node/Blocks/PostProcesses/pure.js.map +1 -1
  168. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js +4 -4
  169. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
  170. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.d.ts +5 -1
  171. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.js +13 -1
  172. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.js.map +1 -1
  173. package/FrameGraph/Node/Blocks/allBlocks.pure.js +2 -0
  174. package/FrameGraph/Node/Blocks/allBlocks.pure.js.map +1 -1
  175. package/FrameGraph/Node/Blocks/index.d.ts +1 -0
  176. package/FrameGraph/Node/Blocks/index.js +1 -0
  177. package/FrameGraph/Node/Blocks/index.js.map +1 -1
  178. package/FrameGraph/Node/Blocks/inputBlock.pure.js +20 -1
  179. package/FrameGraph/Node/Blocks/inputBlock.pure.js.map +1 -1
  180. package/FrameGraph/Node/Blocks/pure.d.ts +1 -0
  181. package/FrameGraph/Node/Blocks/pure.js +1 -0
  182. package/FrameGraph/Node/Blocks/pure.js.map +1 -1
  183. package/FrameGraph/Node/Types/nodeRenderGraphTypes.d.ts +4 -2
  184. package/FrameGraph/Node/Types/nodeRenderGraphTypes.js +4 -2
  185. package/FrameGraph/Node/Types/nodeRenderGraphTypes.js.map +1 -1
  186. package/FrameGraph/Node/nodeRenderGraph.js +1 -1
  187. package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
  188. package/FrameGraph/Tasks/Layers/selectionOutlineTask.js +1 -0
  189. package/FrameGraph/Tasks/Layers/selectionOutlineTask.js.map +1 -1
  190. package/FrameGraph/Tasks/Misc/cullObjectsTask.js +5 -1
  191. package/FrameGraph/Tasks/Misc/cullObjectsTask.js.map +1 -1
  192. package/FrameGraph/Tasks/Misc/lightingVolumeTask.js +1 -0
  193. package/FrameGraph/Tasks/Misc/lightingVolumeTask.js.map +1 -1
  194. package/FrameGraph/Tasks/PostProcesses/meshBlendingTask.d.ts +69 -0
  195. package/FrameGraph/Tasks/PostProcesses/meshBlendingTask.js +223 -0
  196. package/FrameGraph/Tasks/PostProcesses/meshBlendingTask.js.map +1 -0
  197. package/FrameGraph/Tasks/Rendering/geometryRendererTask.d.ts +25 -3
  198. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +69 -33
  199. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
  200. package/FrameGraph/Tasks/Rendering/objectRendererTask.js +3 -1
  201. package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
  202. package/FrameGraph/frameGraphObjectList.d.ts +6 -1
  203. package/FrameGraph/frameGraphObjectList.js.map +1 -1
  204. package/FrameGraph/frameGraphRenderContext.d.ts +3 -1
  205. package/FrameGraph/frameGraphRenderContext.js +5 -5
  206. package/FrameGraph/frameGraphRenderContext.js.map +1 -1
  207. package/FrameGraph/index.d.ts +1 -0
  208. package/FrameGraph/index.js +1 -0
  209. package/FrameGraph/index.js.map +1 -1
  210. package/FrameGraph/pure.d.ts +1 -0
  211. package/FrameGraph/pure.js +1 -0
  212. package/FrameGraph/pure.js.map +1 -1
  213. package/Inputs/scene.inputManager.d.ts +4 -0
  214. package/Inputs/scene.inputManager.js +50 -8
  215. package/Inputs/scene.inputManager.js.map +1 -1
  216. package/Materials/GaussianSplatting/gaussianSplattingDebugMaterialPlugin.pure.js +5 -5
  217. package/Materials/GaussianSplatting/gaussianSplattingDebugMaterialPlugin.pure.js.map +1 -1
  218. package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.js +5 -5
  219. package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.js.map +1 -1
  220. package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.d.ts +26 -1
  221. package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js +151 -47
  222. package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js.map +1 -1
  223. package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.pure.js +5 -5
  224. package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.pure.js.map +1 -1
  225. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.js +11 -1
  226. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.js.map +1 -1
  227. package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js +17 -2
  228. package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js.map +1 -1
  229. package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.pure.js +2 -2
  230. package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.pure.js.map +1 -1
  231. package/Materials/Node/nodeMaterial.pure.d.ts +4 -0
  232. package/Materials/Node/nodeMaterial.pure.js +4 -0
  233. package/Materials/Node/nodeMaterial.pure.js.map +1 -1
  234. package/Materials/Node/nodeMaterialBuildState.d.ts +1 -1
  235. package/Materials/Node/nodeMaterialBuildState.js +25 -3
  236. package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
  237. package/Materials/PBR/openpbrMaterial.pure.d.ts +2 -0
  238. package/Materials/PBR/pbrBaseMaterial.pure.d.ts +2 -0
  239. package/Materials/Textures/Procedurals/proceduralTexture.pure.d.ts +13 -14
  240. package/Materials/Textures/Procedurals/proceduralTexture.pure.js +6 -6
  241. package/Materials/Textures/Procedurals/proceduralTexture.pure.js.map +1 -1
  242. package/Materials/Textures/baseTexture.pure.js +3 -0
  243. package/Materials/Textures/baseTexture.pure.js.map +1 -1
  244. package/Materials/Textures/cubeTexture.pure.js +1 -1
  245. package/Materials/Textures/cubeTexture.pure.js.map +1 -1
  246. package/Materials/Textures/internalTexture.d.ts +8 -1
  247. package/Materials/Textures/internalTexture.js +9 -2
  248. package/Materials/Textures/internalTexture.js.map +1 -1
  249. package/Materials/Textures/rawTexture2DArray.functions.d.ts +3 -3
  250. package/Materials/Textures/rawTexture2DArray.functions.js.map +1 -1
  251. package/Materials/Textures/rawTexture3D.d.ts +1 -1
  252. package/Materials/Textures/rawTexture3D.js +1 -1
  253. package/Materials/Textures/rawTexture3D.js.map +1 -1
  254. package/Materials/Textures/textureHelper.functions.d.ts +14 -0
  255. package/Materials/Textures/textureHelper.functions.js +24 -0
  256. package/Materials/Textures/textureHelper.functions.js.map +1 -1
  257. package/Materials/ditheredTileFadeMaterialPlugin.d.ts +210 -0
  258. package/Materials/ditheredTileFadeMaterialPlugin.js +509 -0
  259. package/Materials/ditheredTileFadeMaterialPlugin.js.map +1 -0
  260. package/Materials/index.d.ts +1 -0
  261. package/Materials/index.js +1 -0
  262. package/Materials/index.js.map +1 -1
  263. package/Materials/materialHelper.geometryrendering.d.ts +46 -1
  264. package/Materials/materialHelper.geometryrendering.js +105 -8
  265. package/Materials/materialHelper.geometryrendering.js.map +1 -1
  266. package/Materials/prepass.defines.d.ts +2 -0
  267. package/Materials/prepass.defines.js +2 -0
  268. package/Materials/prepass.defines.js.map +1 -1
  269. package/Materials/pure.d.ts +1 -0
  270. package/Materials/pure.js +1 -0
  271. package/Materials/pure.js.map +1 -1
  272. package/Materials/standardMaterial.pure.d.ts +2 -0
  273. package/Materials/standardMaterial.pure.js +6 -3
  274. package/Materials/standardMaterial.pure.js.map +1 -1
  275. package/Meshes/Builders/polygonBuilder.pure.d.ts +4 -0
  276. package/Meshes/Builders/polygonBuilder.pure.js +4 -1
  277. package/Meshes/Builders/polygonBuilder.pure.js.map +1 -1
  278. package/Meshes/GaussianSplatting/gaussianSplatting.functions.d.ts +19 -0
  279. package/Meshes/GaussianSplatting/gaussianSplatting.functions.js +23 -0
  280. package/Meshes/GaussianSplatting/gaussianSplatting.functions.js.map +1 -0
  281. package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.d.ts +3 -14
  282. package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js +20 -24
  283. package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js.map +1 -1
  284. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.d.ts +2 -0
  285. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js +11 -4
  286. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js.map +1 -1
  287. package/Meshes/abstractMesh.pure.d.ts +18 -0
  288. package/Meshes/abstractMesh.pure.js +22 -0
  289. package/Meshes/abstractMesh.pure.js.map +1 -1
  290. package/Meshes/index.d.ts +1 -0
  291. package/Meshes/index.js +1 -0
  292. package/Meshes/index.js.map +1 -1
  293. package/Meshes/instancedMesh.pure.d.ts +5 -0
  294. package/Meshes/instancedMesh.pure.js +12 -0
  295. package/Meshes/instancedMesh.pure.js.map +1 -1
  296. package/Meshes/mesh.pure.js +23 -8
  297. package/Meshes/mesh.pure.js.map +1 -1
  298. package/Meshes/meshBlendingTag.d.ts +47 -0
  299. package/Meshes/meshBlendingTag.js +64 -0
  300. package/Meshes/meshBlendingTag.js.map +1 -0
  301. package/Meshes/polygonMesh.js +2 -2
  302. package/Meshes/polygonMesh.js.map +1 -1
  303. package/Meshes/pure.d.ts +1 -0
  304. package/Meshes/pure.js +1 -0
  305. package/Meshes/pure.js.map +1 -1
  306. package/Misc/fileTools.pure.js +21 -0
  307. package/Misc/fileTools.pure.js.map +1 -1
  308. package/Misc/snapshotRenderingHelper.js +2 -2
  309. package/Misc/snapshotRenderingHelper.js.map +1 -1
  310. package/Misc/tools.pure.js +1 -1
  311. package/Misc/tools.pure.js.map +1 -1
  312. package/Particles/gpuParticleSystem.pure.d.ts +2 -0
  313. package/Particles/gpuParticleSystem.pure.js +89 -28
  314. package/Particles/gpuParticleSystem.pure.js.map +1 -1
  315. package/Particles/thinParticleSystem.pure.d.ts +2 -0
  316. package/Particles/thinParticleSystem.pure.js +84 -19
  317. package/Particles/thinParticleSystem.pure.js.map +1 -1
  318. package/Particles/webgl2ParticleSystem.pure.d.ts +1 -0
  319. package/Particles/webgl2ParticleSystem.pure.js +12 -4
  320. package/Particles/webgl2ParticleSystem.pure.js.map +1 -1
  321. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.pure.js +7 -0
  322. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.pure.js.map +1 -1
  323. package/PostProcesses/index.d.ts +2 -0
  324. package/PostProcesses/index.js +2 -0
  325. package/PostProcesses/index.js.map +1 -1
  326. package/PostProcesses/meshBlendingBlueNoise.d.ts +15 -0
  327. package/PostProcesses/meshBlendingBlueNoise.js +77 -0
  328. package/PostProcesses/meshBlendingBlueNoise.js.map +1 -0
  329. package/PostProcesses/meshBlendingPostProcess.d.ts +131 -0
  330. package/PostProcesses/meshBlendingPostProcess.js +315 -0
  331. package/PostProcesses/meshBlendingPostProcess.js.map +1 -0
  332. package/PostProcesses/pure.d.ts +2 -0
  333. package/PostProcesses/pure.js +2 -0
  334. package/PostProcesses/pure.js.map +1 -1
  335. package/PostProcesses/thinMeshBlendingPostProcess.d.ts +339 -0
  336. package/PostProcesses/thinMeshBlendingPostProcess.js +771 -0
  337. package/PostProcesses/thinMeshBlendingPostProcess.js.map +1 -0
  338. package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js +6 -6
  339. package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js.map +1 -1
  340. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js +8 -8
  341. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js.map +1 -1
  342. package/Rendering/boundingBoxRenderer.pure.js +2 -1
  343. package/Rendering/boundingBoxRenderer.pure.js.map +1 -1
  344. package/Rendering/depthRenderer.pure.js +3 -4
  345. package/Rendering/depthRenderer.pure.js.map +1 -1
  346. package/Rendering/edgesRenderer.pure.d.ts +4 -2
  347. package/Rendering/edgesRenderer.pure.js +11 -2
  348. package/Rendering/edgesRenderer.pure.js.map +1 -1
  349. package/Rendering/fluidRenderer/fluidRenderingObject.d.ts +10 -0
  350. package/Rendering/fluidRenderer/fluidRenderingObject.js +20 -0
  351. package/Rendering/fluidRenderer/fluidRenderingObject.js.map +1 -1
  352. package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.d.ts +9 -3
  353. package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js +14 -9
  354. package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js.map +1 -1
  355. package/Rendering/geometryBufferRenderer.pure.d.ts +38 -4
  356. package/Rendering/geometryBufferRenderer.pure.js +126 -17
  357. package/Rendering/geometryBufferRenderer.pure.js.map +1 -1
  358. package/Rendering/objectRenderer.d.ts +7 -1
  359. package/Rendering/objectRenderer.js +45 -7
  360. package/Rendering/objectRenderer.js.map +1 -1
  361. package/Rendering/outlineRenderer.pure.js +6 -2
  362. package/Rendering/outlineRenderer.pure.js.map +1 -1
  363. package/Rendering/renderingManager.d.ts +1 -1
  364. package/Rendering/renderingManager.js +5 -4
  365. package/Rendering/renderingManager.js.map +1 -1
  366. package/Shaders/ShadersInclude/defaultFragmentAlpha.d.ts +5 -0
  367. package/Shaders/ShadersInclude/defaultFragmentAlpha.js +34 -0
  368. package/Shaders/ShadersInclude/defaultFragmentAlpha.js.map +1 -0
  369. package/Shaders/ShadersInclude/gaussianSplattingVertexDeclaration.js +5 -1
  370. package/Shaders/ShadersInclude/gaussianSplattingVertexDeclaration.js.map +1 -1
  371. package/Shaders/ShadersInclude/geometryRenderingFragment.d.ts +5 -0
  372. package/Shaders/ShadersInclude/geometryRenderingFragment.js +74 -0
  373. package/Shaders/ShadersInclude/geometryRenderingFragment.js.map +1 -0
  374. package/Shaders/ShadersInclude/mrtFragmentDeclaration.js +89 -0
  375. package/Shaders/ShadersInclude/mrtFragmentDeclaration.js.map +1 -1
  376. package/Shaders/ShadersInclude/openpbrBlockPrePass.js +24 -17
  377. package/Shaders/ShadersInclude/openpbrBlockPrePass.js.map +1 -1
  378. package/Shaders/ShadersInclude/pbrBlockPrePass.js +27 -20
  379. package/Shaders/ShadersInclude/pbrBlockPrePass.js.map +1 -1
  380. package/Shaders/ShadersInclude/pbrDebug.js +6 -2
  381. package/Shaders/ShadersInclude/pbrDebug.js.map +1 -1
  382. package/Shaders/ShadersInclude/prePassDeclaration.js +95 -2
  383. package/Shaders/ShadersInclude/prePassDeclaration.js.map +1 -1
  384. package/Shaders/default.fragment.js +31 -40
  385. package/Shaders/default.fragment.js.map +1 -1
  386. package/Shaders/depthOfField.fragment.js +13 -9
  387. package/Shaders/depthOfField.fragment.js.map +1 -1
  388. package/Shaders/fluidRenderingParticleDepth.vertex.js +16 -1
  389. package/Shaders/fluidRenderingParticleDepth.vertex.js.map +1 -1
  390. package/Shaders/fluidRenderingParticleThickness.vertex.js +16 -1
  391. package/Shaders/fluidRenderingParticleThickness.vertex.js.map +1 -1
  392. package/Shaders/gaussianSplatting.fragment.js +63 -3
  393. package/Shaders/gaussianSplatting.fragment.js.map +1 -1
  394. package/Shaders/gaussianSplatting.vertex.js +80 -0
  395. package/Shaders/gaussianSplatting.vertex.js.map +1 -1
  396. package/Shaders/geometry.fragment.js +17 -11
  397. package/Shaders/geometry.fragment.js.map +1 -1
  398. package/Shaders/gpuRenderParticles.fragment.js +43 -1
  399. package/Shaders/gpuRenderParticles.fragment.js.map +1 -1
  400. package/Shaders/gpuRenderParticles.vertex.js +96 -16
  401. package/Shaders/gpuRenderParticles.vertex.js.map +1 -1
  402. package/Shaders/meshBlending.fragment.d.ts +5 -0
  403. package/Shaders/meshBlending.fragment.js +519 -0
  404. package/Shaders/meshBlending.fragment.js.map +1 -0
  405. package/Shaders/particles.fragment.js +43 -1
  406. package/Shaders/particles.fragment.js.map +1 -1
  407. package/Shaders/particles.vertex.js +84 -3
  408. package/Shaders/particles.vertex.js.map +1 -1
  409. package/Shaders/sprites.fragment.js +52 -2
  410. package/Shaders/sprites.fragment.js.map +1 -1
  411. package/Shaders/sprites.vertex.js +62 -1
  412. package/Shaders/sprites.vertex.js.map +1 -1
  413. package/ShadersWGSL/ShadersInclude/defaultFragmentAlpha.d.ts +5 -0
  414. package/ShadersWGSL/ShadersInclude/defaultFragmentAlpha.js +33 -0
  415. package/ShadersWGSL/ShadersInclude/defaultFragmentAlpha.js.map +1 -0
  416. package/ShadersWGSL/ShadersInclude/geometryRenderingFragment.d.ts +6 -0
  417. package/ShadersWGSL/ShadersInclude/geometryRenderingFragment.js +76 -0
  418. package/ShadersWGSL/ShadersInclude/geometryRenderingFragment.js.map +1 -0
  419. package/ShadersWGSL/ShadersInclude/lightFragment.js +1 -1
  420. package/ShadersWGSL/ShadersInclude/lightFragment.js.map +1 -1
  421. package/ShadersWGSL/ShadersInclude/meshBlendTagFragmentOutput.d.ts +5 -0
  422. package/ShadersWGSL/ShadersInclude/meshBlendTagFragmentOutput.js +18 -0
  423. package/ShadersWGSL/ShadersInclude/meshBlendTagFragmentOutput.js.map +1 -0
  424. package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.d.ts +1 -0
  425. package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.js +11 -25
  426. package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.js.map +1 -1
  427. package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.d.ts +1 -0
  428. package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.js +11 -25
  429. package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.js.map +1 -1
  430. package/ShadersWGSL/ShadersInclude/pbrDebug.js +5 -1
  431. package/ShadersWGSL/ShadersInclude/pbrDebug.js.map +1 -1
  432. package/ShadersWGSL/ShadersInclude/prePassDeclaration.js +6 -1
  433. package/ShadersWGSL/ShadersInclude/prePassDeclaration.js.map +1 -1
  434. package/ShadersWGSL/default.fragment.js +17 -48
  435. package/ShadersWGSL/default.fragment.js.map +1 -1
  436. package/ShadersWGSL/fluidRenderingParticleDepth.vertex.js +15 -2
  437. package/ShadersWGSL/fluidRenderingParticleDepth.vertex.js.map +1 -1
  438. package/ShadersWGSL/fluidRenderingParticleThickness.vertex.js +15 -2
  439. package/ShadersWGSL/fluidRenderingParticleThickness.vertex.js.map +1 -1
  440. package/ShadersWGSL/gaussianSplatting.fragment.js +63 -2
  441. package/ShadersWGSL/gaussianSplatting.fragment.js.map +1 -1
  442. package/ShadersWGSL/gaussianSplatting.vertex.js +80 -0
  443. package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
  444. package/ShadersWGSL/geometry.fragment.js +37 -2
  445. package/ShadersWGSL/geometry.fragment.js.map +1 -1
  446. package/ShadersWGSL/gpuRenderParticles.fragment.js +47 -2
  447. package/ShadersWGSL/gpuRenderParticles.fragment.js.map +1 -1
  448. package/ShadersWGSL/gpuRenderParticles.vertex.js +110 -7
  449. package/ShadersWGSL/gpuRenderParticles.vertex.js.map +1 -1
  450. package/ShadersWGSL/meshBlending.fragment.d.ts +5 -0
  451. package/ShadersWGSL/meshBlending.fragment.js +576 -0
  452. package/ShadersWGSL/meshBlending.fragment.js.map +1 -0
  453. package/ShadersWGSL/openpbr.fragment.js +2 -1
  454. package/ShadersWGSL/openpbr.fragment.js.map +1 -1
  455. package/ShadersWGSL/particles.fragment.js +45 -1
  456. package/ShadersWGSL/particles.fragment.js.map +1 -1
  457. package/ShadersWGSL/particles.vertex.js +86 -4
  458. package/ShadersWGSL/particles.vertex.js.map +1 -1
  459. package/ShadersWGSL/pbr.fragment.js +2 -1
  460. package/ShadersWGSL/pbr.fragment.js.map +1 -1
  461. package/ShadersWGSL/sprites.fragment.js +56 -2
  462. package/ShadersWGSL/sprites.fragment.js.map +1 -1
  463. package/ShadersWGSL/sprites.vertex.js +62 -1
  464. package/ShadersWGSL/sprites.vertex.js.map +1 -1
  465. package/Sprites/spriteManager.d.ts +13 -0
  466. package/Sprites/spriteManager.js +15 -0
  467. package/Sprites/spriteManager.js.map +1 -1
  468. package/Sprites/spriteRenderer.d.ts +24 -1
  469. package/Sprites/spriteRenderer.js +368 -50
  470. package/Sprites/spriteRenderer.js.map +1 -1
  471. package/Sprites/thinSprite.d.ts +4 -0
  472. package/Sprites/thinSprite.js +4 -0
  473. package/Sprites/thinSprite.js.map +1 -1
  474. package/States/alphaCullingState.d.ts +3 -1
  475. package/States/alphaCullingState.js +18 -3
  476. package/States/alphaCullingState.js.map +1 -1
  477. package/XR/webXRDefaultExperience.d.ts +5 -1
  478. package/XR/webXRDefaultExperience.js.map +1 -1
  479. package/XR/webXREnterExitUI.d.ts +2 -1
  480. package/XR/webXREnterExitUI.js.map +1 -1
  481. package/package.json +1 -1
  482. package/scene.pure.d.ts +23 -0
  483. package/scene.pure.js +35 -0
  484. package/scene.pure.js.map +1 -1
@@ -1081,8 +1081,8 @@ function CountOnes(n) {
1081
1081
  // This zeroes out all bits except for the least significant one.
1082
1082
  // So if the bit is set, it will be 1, otherwise it will be 0.
1083
1083
  result += n & 1;
1084
- // This shifts n's bits to the right by one
1085
- n >>= 1;
1084
+ // Unsigned shifting is required so negative int32 values converge to zero.
1085
+ n >>>= 1;
1086
1086
  }
1087
1087
  return result;
1088
1088
  }
@@ -1 +1 @@
1
- {"version":3,"file":"flowGraphMathBlocks.pure.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { FlowGraphBlock, type IFlowGraphBlockConfiguration } from \"../../../flowGraphBlock\";\r\nimport { FlowGraphTypes, getRichTypeByFlowGraphType, RichTypeAny, RichTypeBoolean, RichTypeFlowGraphInteger, RichTypeNumber } from \"../../../flowGraphRichTypes.pure\";\r\nimport { FlowGraphBinaryOperationBlock } from \"../flowGraphBinaryOperationBlock\";\r\nimport { FlowGraphConstantOperationBlock } from \"../flowGraphConstantOperationBlock\";\r\nimport { Quaternion, Matrix, Vector2, Vector3, Vector4 } from \"../../../../Maths/math.vector.pure\";\r\nimport { FlowGraphUnaryOperationBlock } from \"../flowGraphUnaryOperationBlock\";\r\nimport { FlowGraphTernaryOperationBlock } from \"../flowGraphTernaryOperationBlock\";\r\nimport { FlowGraphInteger } from \"../../../CustomTypes/flowGraphInteger.pure\";\r\nimport { FlowGraphBlockNames } from \"../../flowGraphBlockNames\";\r\nimport { type FlowGraphDataConnection } from \"core/FlowGraph/flowGraphDataConnection.pure\";\r\nimport { type FlowGraphContext } from \"core/FlowGraph/flowGraphContext\";\r\nimport { FlowGraphMatrix2D, FlowGraphMatrix3D } from \"core/FlowGraph/CustomTypes/flowGraphMatrix\";\r\nimport {\r\n type FlowGraphMathOperationType,\r\n type FlowGraphNumber,\r\n _AreSameIntegerClass,\r\n _AreSameMatrixClass,\r\n _AreSameVectorOrQuaternionClass,\r\n _GetClassNameOf,\r\n getNumericValue,\r\n isNumeric,\r\n} from \"core/FlowGraph/utils\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\n\r\n/**\r\n * A configuration interface for math blocks\r\n */\r\nexport interface IFlowGraphMathBlockConfiguration extends IFlowGraphBlockConfiguration {\r\n /**\r\n * If true, the multiplication is done per component.\r\n * This is the behavior in glTF interactivity.\r\n */\r\n useMatrixPerComponent?: boolean;\r\n\r\n /**\r\n * The type of the variable.\r\n */\r\n type?: FlowGraphTypes;\r\n\r\n /**\r\n * If true, the block will not allow integer and float arithmetic.\r\n * This is the behavior in glTF interactivity.\r\n */\r\n preventIntegerFloatArithmetic?: boolean;\r\n}\r\n\r\n/**\r\n * Polymorphic add block.\r\n */\r\nexport class FlowGraphAddBlock extends FlowGraphBinaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n /**\r\n * Construct a new add block.\r\n * @param config optional configuration\r\n */\r\n constructor(config?: IFlowGraphMathBlockConfiguration) {\r\n super(\r\n getRichTypeByFlowGraphType(config?.type),\r\n getRichTypeByFlowGraphType(config?.type),\r\n getRichTypeByFlowGraphType(config?.type),\r\n (a, b) => this._polymorphicAdd(a, b),\r\n FlowGraphBlockNames.Add,\r\n config\r\n );\r\n }\r\n\r\n private _polymorphicAdd(a: FlowGraphMathOperationType, b: FlowGraphMathOperationType) {\r\n const aClassName = _GetClassNameOf(a);\r\n const bClassName = _GetClassNameOf(b);\r\n if (_AreSameVectorOrQuaternionClass(aClassName, bClassName) || _AreSameMatrixClass(aClassName, bClassName) || _AreSameIntegerClass(aClassName, bClassName)) {\r\n // cast to vector3, but any other cast will be fine\r\n return (a as Vector3).add(b as Vector3);\r\n } else if (aClassName === FlowGraphTypes.Quaternion || bClassName === FlowGraphTypes.Vector4) {\r\n return new Vector4((a as Quaternion).x, (a as Quaternion).y, (a as Quaternion).z, (a as Quaternion).w).addInPlace(b as Vector4);\r\n } else if (aClassName === FlowGraphTypes.Vector4 || bClassName === FlowGraphTypes.Quaternion) {\r\n return (a as Vector4).add(b as Quaternion);\r\n } else {\r\n // at this point at least one of the variables is a number.\r\n if (this.config?.preventIntegerFloatArithmetic && typeof a !== typeof b) {\r\n throw new Error(\"Cannot add different types of numbers.\");\r\n }\r\n return getNumericValue(a as number) + getNumericValue(b as number);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Polymorphic subtract block.\r\n */\r\nexport class FlowGraphSubtractBlock extends FlowGraphBinaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n /**\r\n * Construct a new subtract block.\r\n * @param config optional configuration\r\n */\r\n constructor(config?: IFlowGraphMathBlockConfiguration) {\r\n super(\r\n getRichTypeByFlowGraphType(config?.type),\r\n getRichTypeByFlowGraphType(config?.type),\r\n getRichTypeByFlowGraphType(config?.type),\r\n (a, b) => this._polymorphicSubtract(a, b),\r\n FlowGraphBlockNames.Subtract,\r\n config\r\n );\r\n }\r\n\r\n private _polymorphicSubtract(a: FlowGraphMathOperationType, b: FlowGraphMathOperationType) {\r\n const aClassName = _GetClassNameOf(a);\r\n const bClassName = _GetClassNameOf(b);\r\n if (_AreSameVectorOrQuaternionClass(aClassName, bClassName) || _AreSameIntegerClass(aClassName, bClassName) || _AreSameMatrixClass(aClassName, bClassName)) {\r\n // cast to vector3, but it can be casted to any vector type\r\n return (a as Vector3).subtract(b as Vector3);\r\n } else if (aClassName === FlowGraphTypes.Quaternion || bClassName === FlowGraphTypes.Vector4) {\r\n return new Vector4((a as Quaternion).x, (a as Quaternion).y, (a as Quaternion).z, (a as Quaternion).w).subtractInPlace(b as Vector4);\r\n } else if (aClassName === FlowGraphTypes.Vector4 || bClassName === FlowGraphTypes.Quaternion) {\r\n return (a as Vector4).subtract(b as Quaternion);\r\n } else {\r\n // at this point at least one of the variables is a number.\r\n if (this.config?.preventIntegerFloatArithmetic && typeof a !== typeof b) {\r\n throw new Error(\"Cannot add different types of numbers.\");\r\n }\r\n return getNumericValue(a as number) - getNumericValue(b as number);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Polymorphic multiply block.\r\n * In case of matrix, it is configurable whether the multiplication is done per component.\r\n */\r\nexport class FlowGraphMultiplyBlock extends FlowGraphBinaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphMathBlockConfiguration) {\r\n super(\r\n getRichTypeByFlowGraphType(config?.type),\r\n getRichTypeByFlowGraphType(config?.type),\r\n getRichTypeByFlowGraphType(config?.type),\r\n (a, b) => this._polymorphicMultiply(a, b),\r\n FlowGraphBlockNames.Multiply,\r\n config\r\n );\r\n }\r\n\r\n private _polymorphicMultiply(a: FlowGraphMathOperationType, b: FlowGraphMathOperationType) {\r\n const aClassName = _GetClassNameOf(a);\r\n const bClassName = _GetClassNameOf(b);\r\n if (_AreSameVectorOrQuaternionClass(aClassName, bClassName) || _AreSameIntegerClass(aClassName, bClassName)) {\r\n // cast to vector3, but it can be casted to any vector type\r\n return (a as Vector3).multiply(b as Vector3);\r\n } else if (aClassName === FlowGraphTypes.Quaternion || bClassName === FlowGraphTypes.Vector4) {\r\n return new Vector4((a as Quaternion).x, (a as Quaternion).y, (a as Quaternion).z, (a as Quaternion).w).multiplyInPlace(b as Vector4);\r\n } else if (aClassName === FlowGraphTypes.Vector4 || bClassName === FlowGraphTypes.Quaternion) {\r\n return (a as Vector4).multiply(b as Quaternion);\r\n } else if (_AreSameMatrixClass(aClassName, bClassName)) {\r\n if (this.config?.useMatrixPerComponent) {\r\n // this is the definition of multiplication of glTF interactivity\r\n // get a's m as array, and multiply each component with b's m\r\n const aM = (a as FlowGraphMatrix2D).m;\r\n for (let i = 0; i < aM.length; i++) {\r\n aM[i] *= (b as FlowGraphMatrix2D).m[i];\r\n }\r\n if (aClassName === FlowGraphTypes.Matrix2D) {\r\n return new FlowGraphMatrix2D(aM);\r\n } else if (aClassName === FlowGraphTypes.Matrix3D) {\r\n return new FlowGraphMatrix3D(aM);\r\n } else {\r\n return Matrix.FromArray(aM);\r\n }\r\n } else {\r\n a = a as Matrix;\r\n b = b as Matrix;\r\n return b.multiply(a);\r\n }\r\n } else {\r\n // at this point at least one of the variables is a number.\r\n if (this.config?.preventIntegerFloatArithmetic && typeof a !== typeof b) {\r\n throw new Error(\"Cannot add different types of numbers.\");\r\n }\r\n return getNumericValue(a as number) * getNumericValue(b as number);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Polymorphic division block.\r\n */\r\nexport class FlowGraphDivideBlock extends FlowGraphBinaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n /**\r\n * Construct a new divide block.\r\n * @param config - Optional configuration\r\n */\r\n constructor(config?: IFlowGraphMathBlockConfiguration) {\r\n super(\r\n getRichTypeByFlowGraphType(config?.type),\r\n getRichTypeByFlowGraphType(config?.type),\r\n getRichTypeByFlowGraphType(config?.type),\r\n (a, b) => this._polymorphicDivide(a, b),\r\n FlowGraphBlockNames.Divide,\r\n config\r\n );\r\n }\r\n\r\n private _polymorphicDivide(a: FlowGraphMathOperationType, b: FlowGraphMathOperationType) {\r\n const aClassName = _GetClassNameOf(a);\r\n const bClassName = _GetClassNameOf(b);\r\n if (_AreSameVectorOrQuaternionClass(aClassName, bClassName) || _AreSameIntegerClass(aClassName, bClassName)) {\r\n // cast to vector3, but it can be casted to any vector type\r\n return (a as Vector3).divide(b as Vector3);\r\n } else if (aClassName === FlowGraphTypes.Quaternion || bClassName === FlowGraphTypes.Quaternion) {\r\n // this is a simple division (per component!), and should be also supported between Quat and Vector4. Therefore -\r\n const aClone = (a as Quaternion).clone();\r\n aClone.x /= (b as Quaternion).x;\r\n aClone.y /= (b as Quaternion).y;\r\n aClone.z /= (b as Quaternion).z;\r\n aClone.w /= (b as Quaternion).w;\r\n return aClone;\r\n } else if (aClassName === FlowGraphTypes.Quaternion || bClassName === FlowGraphTypes.Vector4) {\r\n return new Vector4((a as Quaternion).x, (a as Quaternion).y, (a as Quaternion).z, (a as Quaternion).w).divideInPlace(b as Vector4);\r\n } else if (aClassName === FlowGraphTypes.Vector4 || bClassName === FlowGraphTypes.Quaternion) {\r\n return (a as Vector4).divide(b as Quaternion);\r\n } else if (_AreSameMatrixClass(aClassName, bClassName)) {\r\n if (this.config?.useMatrixPerComponent) {\r\n // get a's m as array, and divide each component with b's m\r\n const aM = (a as FlowGraphMatrix2D).m;\r\n for (let i = 0; i < aM.length; i++) {\r\n aM[i] /= (b as FlowGraphMatrix2D).m[i];\r\n }\r\n if (aClassName === FlowGraphTypes.Matrix2D) {\r\n return new FlowGraphMatrix2D(aM);\r\n } else if (aClassName === FlowGraphTypes.Matrix3D) {\r\n return new FlowGraphMatrix3D(aM);\r\n } else {\r\n return Matrix.FromArray(aM);\r\n }\r\n } else {\r\n a = a as Matrix;\r\n b = b as Matrix;\r\n return a.divide(b);\r\n }\r\n } else {\r\n // at this point at least one of the variables is a number.\r\n if (this.config?.preventIntegerFloatArithmetic && typeof a !== typeof b) {\r\n throw new Error(\"Cannot add different types of numbers.\");\r\n }\r\n return getNumericValue(a as number) / getNumericValue(b as number);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Configuration interface for the random block.\r\n */\r\nexport interface IFlowGraphRandomBlockConfiguration extends IFlowGraphBlockConfiguration {\r\n /**\r\n * The minimum value. defaults to 0.\r\n */\r\n min?: number;\r\n /**\r\n * The maximum value. defaults to 1.\r\n */\r\n max?: number;\r\n\r\n /**\r\n * The seed for the random number generator for deterministic random values.\r\n * If not set, Math.random() is used.\r\n */\r\n seed?: number;\r\n}\r\n\r\n/**\r\n * Random number between min and max (defaults to 0 to 1)\r\n *\r\n * This node will cache the result for he same node reference. i.e., a Math.eq that references the SAME random node will always return true.\r\n */\r\nexport class FlowGraphRandomBlock extends FlowGraphConstantOperationBlock<FlowGraphMathOperationType> {\r\n /**\r\n * The minimum value. defaults to 0.\r\n */\r\n public readonly min: FlowGraphDataConnection<number>;\r\n /**\r\n * The maximum value. defaults to 1.\r\n */\r\n public readonly max: FlowGraphDataConnection<number>;\r\n\r\n private _seed?: number;\r\n\r\n /**\r\n * Construct a new random block.\r\n * @param config optional configuration\r\n */\r\n constructor(config?: IFlowGraphRandomBlockConfiguration) {\r\n super(RichTypeNumber, (context) => this._random(context), FlowGraphBlockNames.Random, config);\r\n this.min = this.registerDataInput(\"min\", RichTypeNumber, config?.min ?? 0);\r\n this.max = this.registerDataInput(\"max\", RichTypeNumber, config?.max ?? 1);\r\n if (config?.seed) {\r\n this._seed = config.seed;\r\n }\r\n }\r\n\r\n private _isSeed(seed = this._seed): seed is number {\r\n return seed !== undefined;\r\n }\r\n\r\n private _getRandomValue() {\r\n if (this._isSeed(this._seed)) {\r\n // compute seed-based random number, deterministic randomness!\r\n const x = Math.sin(this._seed++) * 10000;\r\n return x - Math.floor(x);\r\n }\r\n return Math.random();\r\n }\r\n\r\n private _random(context: FlowGraphContext) {\r\n const min = this.min.getValue(context);\r\n const max = this.max.getValue(context);\r\n return this._getRandomValue() * (max - min) + min;\r\n }\r\n}\r\n\r\n/**\r\n * E constant.\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class FlowGraphEBlock extends FlowGraphConstantOperationBlock<number> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeNumber, () => Math.E, FlowGraphBlockNames.E, config);\r\n }\r\n}\r\n\r\n/**\r\n * Pi constant.\r\n */\r\nexport class FlowGraphPiBlock extends FlowGraphConstantOperationBlock<number> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeNumber, () => Math.PI, FlowGraphBlockNames.PI, config);\r\n }\r\n}\r\n\r\n/**\r\n * Tau constant (2 * Pi), the ratio of a circle's circumference to its radius.\r\n */\r\nexport class FlowGraphTauBlock extends FlowGraphConstantOperationBlock<number> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeNumber, () => 2 * Math.PI, FlowGraphBlockNames.Tau, config);\r\n }\r\n}\r\n\r\n/**\r\n * Positive inf constant.\r\n */\r\nexport class FlowGraphInfBlock extends FlowGraphConstantOperationBlock<number> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeNumber, () => Number.POSITIVE_INFINITY, FlowGraphBlockNames.Inf, config);\r\n }\r\n}\r\n\r\n/**\r\n * NaN constant.\r\n */\r\nexport class FlowGraphNaNBlock extends FlowGraphConstantOperationBlock<number> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeNumber, () => Number.NaN, FlowGraphBlockNames.NaN, config);\r\n }\r\n}\r\n\r\nfunction ComponentWiseUnaryOperation(a: FlowGraphMathOperationType, op: (a: number) => number) {\r\n const aClassName = _GetClassNameOf(a);\r\n switch (aClassName) {\r\n case \"FlowGraphInteger\":\r\n a = a as FlowGraphInteger;\r\n return new FlowGraphInteger(op(a.value));\r\n case FlowGraphTypes.Vector2:\r\n a = a as Vector2;\r\n return new Vector2(op(a.x), op(a.y));\r\n case FlowGraphTypes.Vector3:\r\n a = a as Vector3;\r\n return new Vector3(op(a.x), op(a.y), op(a.z));\r\n case FlowGraphTypes.Vector4:\r\n a = a as Vector4;\r\n return new Vector4(op(a.x), op(a.y), op(a.z), op(a.w));\r\n case FlowGraphTypes.Quaternion:\r\n a = a as Quaternion;\r\n return new Quaternion(op(a.x), op(a.y), op(a.z), op(a.w));\r\n case FlowGraphTypes.Matrix:\r\n a = a as Matrix;\r\n return Matrix.FromArray(a.m.map(op));\r\n case FlowGraphTypes.Matrix2D:\r\n a = a as FlowGraphMatrix2D;\r\n // reason for not using .map is performance\r\n return new FlowGraphMatrix2D(a.m.map(op));\r\n case FlowGraphTypes.Matrix3D:\r\n a = a as FlowGraphMatrix3D;\r\n return new FlowGraphMatrix3D(a.m.map(op));\r\n default:\r\n a = a as number;\r\n return op(a);\r\n }\r\n}\r\n\r\n/**\r\n * Absolute value block.\r\n */\r\nexport class FlowGraphAbsBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeNumber, RichTypeNumber, (a) => this._polymorphicAbs(a), FlowGraphBlockNames.Abs, config);\r\n }\r\n\r\n private _polymorphicAbs(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Math.abs);\r\n }\r\n}\r\n\r\n/**\r\n * Sign block.\r\n */\r\nexport class FlowGraphSignBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeNumber, RichTypeNumber, (a) => this._polymorphicSign(a), FlowGraphBlockNames.Sign, config);\r\n }\r\n\r\n private _polymorphicSign(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Math.sign);\r\n }\r\n}\r\n\r\n/**\r\n * Truncation block.\r\n */\r\nexport class FlowGraphTruncBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeNumber, RichTypeNumber, (a) => this._polymorphicTrunc(a), FlowGraphBlockNames.Trunc, config);\r\n }\r\n\r\n private _polymorphicTrunc(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Math.trunc);\r\n }\r\n}\r\n\r\n/**\r\n * Floor block.\r\n */\r\nexport class FlowGraphFloorBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeNumber, RichTypeNumber, (a) => this._polymorphicFloor(a), FlowGraphBlockNames.Floor, config);\r\n }\r\n\r\n private _polymorphicFloor(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Math.floor);\r\n }\r\n}\r\n\r\n/**\r\n * Ceiling block.\r\n */\r\nexport class FlowGraphCeilBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeAny, (a) => this._polymorphicCeiling(a), FlowGraphBlockNames.Ceil, config);\r\n }\r\n\r\n private _polymorphicCeiling(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Math.ceil);\r\n }\r\n}\r\n\r\n/**\r\n * Configuration for the round block.\r\n */\r\nexport interface IFlowGraphRoundBlockConfiguration extends IFlowGraphBlockConfiguration {\r\n /**\r\n * If true, the rounding is away from zero, even when negative. i.e. -7.5 goes to -8, and not -7 as Math.round does (it rounds up).\r\n * This is the default when using glTF\r\n */\r\n roundHalfAwayFromZero?: boolean;\r\n}\r\n/**\r\n * Round block.\r\n */\r\nexport class FlowGraphRoundBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphRoundBlockConfiguration) {\r\n super(RichTypeAny, RichTypeAny, (a) => this._polymorphicRound(a), FlowGraphBlockNames.Round, config);\r\n }\r\n\r\n private _polymorphicRound(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, (a) => (a < 0 && this.config?.roundHalfAwayFromZero ? -Math.round(-a) : Math.round(a)));\r\n }\r\n}\r\n\r\n/**\r\n * A block that returns the fractional part of a number.\r\n */\r\nexport class FlowGraphFractionBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeAny, (a) => this._polymorphicFraction(a), FlowGraphBlockNames.Fraction, config);\r\n }\r\n\r\n private _polymorphicFraction(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, (a) => a - Math.floor(a));\r\n }\r\n}\r\n\r\n/**\r\n * Negation block.\r\n */\r\nexport class FlowGraphNegationBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n /**\r\n * construct a new negation block.\r\n * @param config optional configuration\r\n */\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeAny, (a) => this._polymorphicNeg(a), FlowGraphBlockNames.Negation, config);\r\n }\r\n\r\n private _polymorphicNeg(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, (a) => -a);\r\n }\r\n}\r\n\r\nfunction ComponentWiseBinaryOperation(a: FlowGraphMathOperationType, b: FlowGraphMathOperationType, op: (a: number, b: number) => number) {\r\n const aClassName = _GetClassNameOf(a);\r\n switch (aClassName) {\r\n case \"FlowGraphInteger\":\r\n a = a as FlowGraphInteger;\r\n b = b as FlowGraphInteger;\r\n return new FlowGraphInteger(op(a.value, b.value));\r\n case FlowGraphTypes.Vector2:\r\n a = a as Vector2;\r\n b = b as Vector2;\r\n return new Vector2(op(a.x, b.x), op(a.y, b.y));\r\n case FlowGraphTypes.Vector3:\r\n a = a as Vector3;\r\n b = b as Vector3;\r\n return new Vector3(op(a.x, b.x), op(a.y, b.y), op(a.z, b.z));\r\n case FlowGraphTypes.Vector4:\r\n a = a as Vector4;\r\n b = b as Vector4;\r\n return new Vector4(op(a.x, b.x), op(a.y, b.y), op(a.z, b.z), op(a.w, b.w));\r\n case FlowGraphTypes.Quaternion:\r\n a = a as Quaternion;\r\n b = b as Quaternion;\r\n return new Quaternion(op(a.x, b.x), op(a.y, b.y), op(a.z, b.z), op(a.w, b.w));\r\n case FlowGraphTypes.Matrix:\r\n a = a as Matrix;\r\n return Matrix.FromArray(a.m.map((v, i) => op(v, (b as Matrix).m[i])));\r\n case FlowGraphTypes.Matrix2D:\r\n a = a as FlowGraphMatrix2D;\r\n return new FlowGraphMatrix2D(a.m.map((v, i) => op(v, (b as FlowGraphMatrix2D).m[i])));\r\n case FlowGraphTypes.Matrix3D:\r\n a = a as FlowGraphMatrix3D;\r\n return new FlowGraphMatrix3D(a.m.map((v, i) => op(v, (b as FlowGraphMatrix3D).m[i])));\r\n default:\r\n return op(getNumericValue(a as number), getNumericValue(b as number));\r\n }\r\n}\r\n\r\n/**\r\n * Remainder block.\r\n */\r\nexport class FlowGraphModuloBlock extends FlowGraphBinaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeAny, RichTypeAny, (a, b) => this._polymorphicRemainder(a, b), FlowGraphBlockNames.Modulo, config);\r\n }\r\n\r\n private _polymorphicRemainder(a: FlowGraphMathOperationType, b: FlowGraphMathOperationType) {\r\n return ComponentWiseBinaryOperation(a, b, (a, b) => a % b);\r\n }\r\n}\r\n\r\n/**\r\n * Min block.\r\n */\r\nexport class FlowGraphMinBlock extends FlowGraphBinaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeAny, RichTypeAny, (a, b) => this._polymorphicMin(a, b), FlowGraphBlockNames.Min, config);\r\n }\r\n\r\n private _polymorphicMin(a: FlowGraphMathOperationType, b: FlowGraphMathOperationType) {\r\n return ComponentWiseBinaryOperation(a, b, Math.min);\r\n }\r\n}\r\n\r\n/**\r\n * Max block\r\n */\r\nexport class FlowGraphMaxBlock extends FlowGraphBinaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeAny, RichTypeAny, (a, b) => this._polymorphicMax(a, b), FlowGraphBlockNames.Max, config);\r\n }\r\n\r\n private _polymorphicMax(a: FlowGraphMathOperationType, b: FlowGraphMathOperationType) {\r\n return ComponentWiseBinaryOperation(a, b, Math.max);\r\n }\r\n}\r\n\r\nfunction Clamp(a: number, b: number, c: number) {\r\n return Math.min(Math.max(a, Math.min(b, c)), Math.max(b, c));\r\n}\r\n\r\nfunction ComponentWiseTernaryOperation(\r\n a: FlowGraphMathOperationType,\r\n b: FlowGraphMathOperationType,\r\n c: FlowGraphMathOperationType,\r\n op: (a: number, b: number, c: number) => number\r\n) {\r\n const aClassName = _GetClassNameOf(a);\r\n switch (aClassName) {\r\n case \"FlowGraphInteger\":\r\n a = a as FlowGraphInteger;\r\n b = b as FlowGraphInteger;\r\n c = c as FlowGraphInteger;\r\n return new FlowGraphInteger(op(a.value, b.value, c.value));\r\n case FlowGraphTypes.Vector2:\r\n a = a as Vector2;\r\n b = b as Vector2;\r\n c = c as Vector2;\r\n return new Vector2(op(a.x, b.x, c.x), op(a.y, b.y, c.y));\r\n case FlowGraphTypes.Vector3:\r\n a = a as Vector3;\r\n b = b as Vector3;\r\n c = c as Vector3;\r\n return new Vector3(op(a.x, b.x, c.x), op(a.y, b.y, c.y), op(a.z, b.z, c.z));\r\n case FlowGraphTypes.Vector4:\r\n a = a as Vector4;\r\n b = b as Vector4;\r\n c = c as Vector4;\r\n return new Vector4(op(a.x, b.x, c.x), op(a.y, b.y, c.y), op(a.z, b.z, c.z), op(a.w, b.w, c.w));\r\n case FlowGraphTypes.Quaternion:\r\n a = a as Quaternion;\r\n b = b as Quaternion;\r\n c = c as Quaternion;\r\n return new Quaternion(op(a.x, b.x, c.x), op(a.y, b.y, c.y), op(a.z, b.z, c.z), op(a.w, b.w, c.w));\r\n case FlowGraphTypes.Matrix:\r\n return Matrix.FromArray((a as Matrix).m.map((v, i) => op(v, (b as Matrix).m[i], (c as Matrix).m[i])));\r\n case FlowGraphTypes.Matrix2D:\r\n return new FlowGraphMatrix2D((a as FlowGraphMatrix2D).m.map((v, i) => op(v, (b as FlowGraphMatrix2D).m[i], (c as FlowGraphMatrix2D).m[i])));\r\n case FlowGraphTypes.Matrix3D:\r\n return new FlowGraphMatrix3D((a as FlowGraphMatrix3D).m.map((v, i) => op(v, (b as FlowGraphMatrix3D).m[i], (c as FlowGraphMatrix3D).m[i])));\r\n default:\r\n return op(getNumericValue(a as number), getNumericValue(b as number), getNumericValue(c as number));\r\n }\r\n}\r\n\r\n/**\r\n * Clamp block.\r\n */\r\nexport class FlowGraphClampBlock extends FlowGraphTernaryOperationBlock<\r\n FlowGraphMathOperationType,\r\n FlowGraphMathOperationType,\r\n FlowGraphMathOperationType,\r\n FlowGraphMathOperationType\r\n> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeAny, RichTypeAny, RichTypeAny, (a, b, c) => this._polymorphicClamp(a, b, c), FlowGraphBlockNames.Clamp, config);\r\n }\r\n\r\n private _polymorphicClamp(a: FlowGraphMathOperationType, b: FlowGraphMathOperationType, c: FlowGraphMathOperationType) {\r\n return ComponentWiseTernaryOperation(a, b, c, Clamp);\r\n }\r\n}\r\n\r\nfunction Saturate(a: number): number {\r\n return Math.min(Math.max(a, 0), 1);\r\n}\r\n\r\n/**\r\n * Saturate block.\r\n */\r\nexport class FlowGraphSaturateBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeAny, (a) => this._polymorphicSaturate(a), FlowGraphBlockNames.Saturate, config);\r\n }\r\n\r\n private _polymorphicSaturate(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Saturate);\r\n }\r\n}\r\n\r\nfunction Interpolate(a: number, b: number, c: number) {\r\n return (1 - c) * a + c * b;\r\n}\r\n\r\n/**\r\n * Smooth step (Hermite interpolation) coefficient.\r\n * Given the edges `a`/`b` and the value `c`, computes the smooth interpolation\r\n * coefficient `t * t * (3 - 2 * t)` where `t = saturate((c - min(a, b)) / |b - a|)`.\r\n * Note that this returns the coefficient in [0, 1]; it does not interpolate between `a` and `b`.\r\n * @param a first edge\r\n * @param b second edge\r\n * @param c value to interpolate\r\n * @returns the smooth-step interpolation coefficient\r\n */\r\nfunction SmoothStep(a: number, b: number, c: number) {\r\n // Degenerate edges: with a === b the transition is instantaneous, so return a step rather than\r\n // dividing by zero (which would yield NaN and poison downstream math).\r\n if (a === b) {\r\n return c < a ? 0 : 1;\r\n }\r\n const t = Saturate((c - Math.min(a, b)) / Math.abs(b - a));\r\n return t * t * (3 - 2 * t);\r\n}\r\n\r\n/**\r\n * Interpolate block.\r\n */\r\nexport class FlowGraphMathInterpolationBlock extends FlowGraphTernaryOperationBlock<\r\n FlowGraphMathOperationType,\r\n FlowGraphMathOperationType,\r\n FlowGraphMathOperationType,\r\n FlowGraphMathOperationType\r\n> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeAny, RichTypeAny, RichTypeAny, (a, b, c) => this._polymorphicInterpolate(a, b, c), FlowGraphBlockNames.MathInterpolation, config);\r\n }\r\n\r\n private _polymorphicInterpolate(a: FlowGraphMathOperationType, b: FlowGraphMathOperationType, c: FlowGraphMathOperationType) {\r\n return ComponentWiseTernaryOperation(a, b, c, Interpolate);\r\n }\r\n}\r\n\r\n/**\r\n * Spherical linear interpolation between two unit quaternions, matching the\r\n * quaternion slerp operation. The two inputs are treated as\r\n * Babylon `Quaternion` values regardless of their concrete class (the spec\r\n * defines them as `float4`), and the output is a `Quaternion`.\r\n *\r\n * The underlying implementation is `Quaternion.Slerp`, whose algorithm matches\r\n * the spec step-for-step (dot product, conditional sign-flip on `b`, sin-based\r\n * weighting, and a near-identity short-circuit to a linear blend).\r\n */\r\nexport class FlowGraphMathSlerpBlock extends FlowGraphTernaryOperationBlock<Quaternion, Quaternion, number, Quaternion> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeAny, RichTypeNumber, RichTypeAny, (a, b, c) => Quaternion.Slerp(a, b, c), FlowGraphBlockNames.MathSlerp, config);\r\n }\r\n}\r\n\r\n/**\r\n * Smooth-step block, returning the Hermite interpolation coefficient.\r\n * Operates component-wise over floatN inputs (the two edges `a`/`b` and the\r\n * value `c`).\r\n */\r\nexport class FlowGraphMathSmoothStepBlock extends FlowGraphTernaryOperationBlock<\r\n FlowGraphMathOperationType,\r\n FlowGraphMathOperationType,\r\n FlowGraphMathOperationType,\r\n FlowGraphMathOperationType\r\n> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeAny, RichTypeAny, RichTypeAny, (a, b, c) => this._polymorphicSmoothStep(a, b, c), FlowGraphBlockNames.SmoothStep, config);\r\n }\r\n\r\n private _polymorphicSmoothStep(a: FlowGraphMathOperationType, b: FlowGraphMathOperationType, c: FlowGraphMathOperationType) {\r\n return ComponentWiseTernaryOperation(a, b, c, SmoothStep);\r\n }\r\n}\r\n\r\n/**\r\n * Equals block.\r\n */\r\nexport class FlowGraphEqualityBlock extends FlowGraphBinaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType, boolean> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeAny, RichTypeBoolean, (a, b) => this._polymorphicEq(a, b), FlowGraphBlockNames.Equality, config);\r\n }\r\n\r\n private _polymorphicEq(a: FlowGraphMathOperationType, b: FlowGraphMathOperationType) {\r\n const aClassName = _GetClassNameOf(a);\r\n const bClassName = _GetClassNameOf(b);\r\n // A rotation may arrive either as a Quaternion or as a four-component vector, so treat Quaternion and\r\n // Vector4 (both four-component) as comparable so that, for example, a decomposed rotation can be compared\r\n // against a float4 literal.\r\n const isFourComponent = (className?: string) => className === FlowGraphTypes.Vector4 || className === FlowGraphTypes.Quaternion;\r\n if (isFourComponent(aClassName) && isFourComponent(bClassName)) {\r\n return (a as Vector4).equals(b as Vector4);\r\n }\r\n if (_AreSameVectorOrQuaternionClass(aClassName, bClassName) || _AreSameMatrixClass(aClassName, bClassName) || _AreSameIntegerClass(aClassName, bClassName)) {\r\n return (a as Vector3).equals(b as Vector3);\r\n }\r\n // Handle mixed number/FlowGraphInteger comparison\r\n if (isNumeric(a) && isNumeric(b)) {\r\n return getNumericValue(a as FlowGraphNumber) === getNumericValue(b as FlowGraphNumber);\r\n }\r\n if (typeof a !== typeof b) {\r\n return false;\r\n }\r\n return a === b;\r\n }\r\n}\r\n\r\nfunction ComparisonOperators(a: FlowGraphNumber, b: FlowGraphNumber, op: (a: number, b: number) => boolean) {\r\n if (isNumeric(a) && isNumeric(b)) {\r\n return op(getNumericValue(a), getNumericValue(b));\r\n } else {\r\n throw new Error(`Cannot compare ${a} and ${b}`);\r\n }\r\n}\r\n\r\n/**\r\n * Less than block.\r\n */\r\nexport class FlowGraphLessThanBlock extends FlowGraphBinaryOperationBlock<FlowGraphNumber, FlowGraphNumber, boolean> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeAny, RichTypeBoolean, (a, b) => this._polymorphicLessThan(a, b), FlowGraphBlockNames.LessThan, config);\r\n }\r\n\r\n private _polymorphicLessThan(a: FlowGraphNumber, b: FlowGraphNumber) {\r\n return ComparisonOperators(a, b, (a, b) => a < b);\r\n }\r\n}\r\n\r\n/**\r\n * Less than or equal block.\r\n */\r\nexport class FlowGraphLessThanOrEqualBlock extends FlowGraphBinaryOperationBlock<FlowGraphNumber, FlowGraphNumber, boolean> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeAny, RichTypeBoolean, (a, b) => this._polymorphicLessThanOrEqual(a, b), FlowGraphBlockNames.LessThanOrEqual, config);\r\n }\r\n\r\n private _polymorphicLessThanOrEqual(a: FlowGraphNumber, b: FlowGraphNumber) {\r\n return ComparisonOperators(a, b, (a, b) => a <= b);\r\n }\r\n}\r\n\r\n/**\r\n * Greater than block.\r\n */\r\nexport class FlowGraphGreaterThanBlock extends FlowGraphBinaryOperationBlock<FlowGraphNumber, FlowGraphNumber, boolean> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeAny, RichTypeBoolean, (a, b) => this._polymorphicGreaterThan(a, b), FlowGraphBlockNames.GreaterThan, config);\r\n }\r\n\r\n private _polymorphicGreaterThan(a: FlowGraphNumber, b: FlowGraphNumber) {\r\n return ComparisonOperators(a, b, (a, b) => a > b);\r\n }\r\n}\r\n\r\n/**\r\n * Greater than or equal block.\r\n */\r\nexport class FlowGraphGreaterThanOrEqualBlock extends FlowGraphBinaryOperationBlock<FlowGraphNumber, FlowGraphNumber, boolean> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeAny, RichTypeBoolean, (a, b) => this._polymorphicGreaterThanOrEqual(a, b), FlowGraphBlockNames.GreaterThanOrEqual, config);\r\n }\r\n\r\n private _polymorphicGreaterThanOrEqual(a: FlowGraphNumber, b: FlowGraphNumber) {\r\n return ComparisonOperators(a, b, (a, b) => a >= b);\r\n }\r\n}\r\n\r\n/**\r\n * Is NaN block.\r\n */\r\nexport class FlowGraphIsNanBlock extends FlowGraphUnaryOperationBlock<FlowGraphNumber, boolean> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeBoolean, (a) => this._polymorphicIsNan(a), FlowGraphBlockNames.IsNaN, config);\r\n }\r\n\r\n private _polymorphicIsNan(a: FlowGraphNumber) {\r\n if (isNumeric(a, true)) {\r\n return isNaN(getNumericValue(a));\r\n } else {\r\n throw new Error(`Cannot get NaN of ${a}`);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Is Inf block.\r\n */\r\nexport class FlowGraphIsInfinityBlock extends FlowGraphUnaryOperationBlock<FlowGraphNumber, boolean> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeBoolean, (a) => this._polymorphicIsInf(a), FlowGraphBlockNames.IsInfinity, config);\r\n }\r\n\r\n private _polymorphicIsInf(a: FlowGraphNumber) {\r\n if (isNumeric(a)) {\r\n return !isFinite(getNumericValue(a));\r\n } else {\r\n throw new Error(`Cannot get isInf of ${a}`);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Convert degrees to radians block.\r\n */\r\nexport class FlowGraphDegToRadBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n /**\r\n * Constructs a new instance of the flow graph math block.\r\n * @param config - Optional configuration for the flow graph block.\r\n */\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeAny, (a) => this._polymorphicDegToRad(a), FlowGraphBlockNames.DegToRad, config);\r\n }\r\n\r\n private _degToRad(a: number) {\r\n return (a * Math.PI) / 180;\r\n }\r\n\r\n private _polymorphicDegToRad(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, this._degToRad);\r\n }\r\n}\r\n\r\n/**\r\n * Convert radians to degrees block.\r\n */\r\nexport class FlowGraphRadToDegBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeAny, (a) => this._polymorphicRadToDeg(a), FlowGraphBlockNames.RadToDeg, config);\r\n }\r\n\r\n private _radToDeg(a: number) {\r\n return (a * 180) / Math.PI;\r\n }\r\n\r\n private _polymorphicRadToDeg(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, this._radToDeg);\r\n }\r\n}\r\n\r\n/**\r\n * Sin block.\r\n */\r\nexport class FlowGraphSinBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeNumber, RichTypeNumber, (a) => this._polymorphicSin(a), FlowGraphBlockNames.Sin, config);\r\n }\r\n\r\n private _polymorphicSin(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Math.sin);\r\n }\r\n}\r\n\r\n/**\r\n * Cos block.\r\n */\r\nexport class FlowGraphCosBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeNumber, RichTypeNumber, (a) => this._polymorphicCos(a), FlowGraphBlockNames.Cos, config);\r\n }\r\n\r\n private _polymorphicCos(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Math.cos);\r\n }\r\n}\r\n\r\n/**\r\n * Tan block.\r\n */\r\nexport class FlowGraphTanBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeNumber, RichTypeNumber, (a) => this._polymorphicTan(a), FlowGraphBlockNames.Tan, config);\r\n }\r\n\r\n private _polymorphicTan(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Math.tan);\r\n }\r\n}\r\n\r\n/**\r\n * Arcsin block.\r\n */\r\nexport class FlowGraphAsinBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeNumber, RichTypeNumber, (a) => this._polymorphicAsin(a), FlowGraphBlockNames.Asin, config);\r\n }\r\n\r\n private _polymorphicAsin(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Math.asin);\r\n }\r\n}\r\n\r\n/**\r\n * Arccos block.\r\n */\r\nexport class FlowGraphAcosBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeNumber, RichTypeNumber, (a) => this._polymorphicAcos(a), FlowGraphBlockNames.Acos, config);\r\n }\r\n\r\n private _polymorphicAcos(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Math.acos);\r\n }\r\n}\r\n\r\n/**\r\n * Arctan block.\r\n */\r\nexport class FlowGraphAtanBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeNumber, RichTypeNumber, (a) => this._polymorphicAtan(a), FlowGraphBlockNames.Atan, config);\r\n }\r\n\r\n private _polymorphicAtan(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Math.atan);\r\n }\r\n}\r\n\r\n/**\r\n * Arctan2 block.\r\n */\r\nexport class FlowGraphAtan2Block extends FlowGraphBinaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeAny, RichTypeAny, (a, b) => this._polymorphicAtan2(a, b), FlowGraphBlockNames.Atan2, config);\r\n }\r\n\r\n private _polymorphicAtan2(a: any, b: any) {\r\n return ComponentWiseBinaryOperation(a, b, Math.atan2);\r\n }\r\n}\r\n\r\n/**\r\n * Hyperbolic sin block.\r\n */\r\nexport class FlowGraphSinhBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeAny, (a) => this._polymorphicSinh(a), FlowGraphBlockNames.Sinh, config);\r\n }\r\n\r\n private _polymorphicSinh(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Math.sinh);\r\n }\r\n}\r\n\r\n/**\r\n * Hyperbolic cos block.\r\n */\r\nexport class FlowGraphCoshBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeAny, (a) => this._polymorphicCosh(a), FlowGraphBlockNames.Cosh, config);\r\n }\r\n\r\n private _polymorphicCosh(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Math.cosh);\r\n }\r\n}\r\n\r\n/**\r\n * Hyperbolic tan block.\r\n */\r\nexport class FlowGraphTanhBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeAny, (a) => this._polymorphicTanh(a), FlowGraphBlockNames.Tanh, config);\r\n }\r\n\r\n private _polymorphicTanh(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Math.tanh);\r\n }\r\n}\r\n\r\n/**\r\n * Hyperbolic arcsin block.\r\n */\r\nexport class FlowGraphAsinhBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeNumber, (a) => this._polymorphicAsinh(a), FlowGraphBlockNames.Asinh, config);\r\n }\r\n\r\n private _polymorphicAsinh(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Math.asinh);\r\n }\r\n}\r\n\r\n/**\r\n * Hyperbolic arccos block.\r\n */\r\nexport class FlowGraphAcoshBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeNumber, (a) => this._polymorphicAcosh(a), FlowGraphBlockNames.Acosh, config);\r\n }\r\n\r\n private _polymorphicAcosh(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Math.acosh);\r\n }\r\n}\r\n\r\n/**\r\n * Hyperbolic arctan block.\r\n */\r\nexport class FlowGraphAtanhBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeNumber, (a) => this._polymorphicAtanh(a), FlowGraphBlockNames.Atanh, config);\r\n }\r\n\r\n private _polymorphicAtanh(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Math.atanh);\r\n }\r\n}\r\n\r\n/**\r\n * Exponential block.\r\n */\r\nexport class FlowGraphExpBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeNumber, (a) => this._polymorphicExp(a), FlowGraphBlockNames.Exponential, config);\r\n }\r\n\r\n private _polymorphicExp(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Math.exp);\r\n }\r\n}\r\n\r\n/**\r\n * Logarithm block.\r\n */\r\nexport class FlowGraphLogBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeNumber, (a) => this._polymorphicLog(a), FlowGraphBlockNames.Log, config);\r\n }\r\n\r\n private _polymorphicLog(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Math.log);\r\n }\r\n}\r\n\r\n/**\r\n * Base 2 logarithm block.\r\n */\r\nexport class FlowGraphLog2Block extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeNumber, (a) => this._polymorphicLog2(a), FlowGraphBlockNames.Log2, config);\r\n }\r\n\r\n private _polymorphicLog2(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Math.log2);\r\n }\r\n}\r\n\r\n/**\r\n * Base 10 logarithm block.\r\n */\r\nexport class FlowGraphLog10Block extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeNumber, (a) => this._polymorphicLog10(a), FlowGraphBlockNames.Log10, config);\r\n }\r\n\r\n private _polymorphicLog10(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Math.log10);\r\n }\r\n}\r\n\r\n/**\r\n * Square root block.\r\n */\r\nexport class FlowGraphSquareRootBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeNumber, (a) => this._polymorphicSqrt(a), FlowGraphBlockNames.SquareRoot, config);\r\n }\r\n\r\n private _polymorphicSqrt(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Math.sqrt);\r\n }\r\n}\r\n\r\n/**\r\n * Cube root block.\r\n */\r\nexport class FlowGraphCubeRootBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeNumber, (a) => this._polymorphicCubeRoot(a), FlowGraphBlockNames.CubeRoot, config);\r\n }\r\n\r\n private _polymorphicCubeRoot(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Math.cbrt);\r\n }\r\n}\r\n\r\n/**\r\n * Power block.\r\n */\r\nexport class FlowGraphPowerBlock extends FlowGraphBinaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeNumber, RichTypeNumber, (a, b) => this._polymorphicPow(a, b), FlowGraphBlockNames.Power, config);\r\n }\r\n\r\n private _polymorphicPow(a: FlowGraphMathOperationType, b: FlowGraphMathOperationType) {\r\n return ComponentWiseBinaryOperation(a, b, Math.pow);\r\n }\r\n}\r\n\r\n/**\r\n * Configuration for bitwise operators\r\n */\r\nexport interface IFlowGraphBitwiseBlockConfiguration extends IFlowGraphBlockConfiguration {\r\n /**\r\n * The type of the values that will be operated on\r\n * Defaults to FlowGraphInteger, but can be a number or boolean as well.\r\n */\r\n valueType: FlowGraphTypes;\r\n}\r\n\r\ntype FlowGraphBitwiseTypes = FlowGraphInteger | FlowGraphNumber | boolean;\r\n/**\r\n * Bitwise NOT operation\r\n */\r\nexport class FlowGraphBitwiseNotBlock extends FlowGraphUnaryOperationBlock<FlowGraphBitwiseTypes, FlowGraphBitwiseTypes> {\r\n constructor(config?: IFlowGraphBitwiseBlockConfiguration) {\r\n super(\r\n getRichTypeByFlowGraphType(config?.valueType || FlowGraphTypes.Integer),\r\n getRichTypeByFlowGraphType(config?.valueType || FlowGraphTypes.Integer),\r\n (a) => {\r\n if (typeof a === \"boolean\") {\r\n return !a;\r\n } else if (typeof a === \"number\") {\r\n return ~a;\r\n }\r\n return new FlowGraphInteger(~a.value);\r\n },\r\n FlowGraphBlockNames.BitwiseNot,\r\n config\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Bitwise AND operation\r\n */\r\nexport class FlowGraphBitwiseAndBlock extends FlowGraphBinaryOperationBlock<FlowGraphBitwiseTypes, FlowGraphBitwiseTypes, FlowGraphBitwiseTypes> {\r\n constructor(config?: IFlowGraphBitwiseBlockConfiguration) {\r\n super(\r\n getRichTypeByFlowGraphType(config?.valueType || FlowGraphTypes.Integer),\r\n getRichTypeByFlowGraphType(config?.valueType || FlowGraphTypes.Integer),\r\n getRichTypeByFlowGraphType(config?.valueType || FlowGraphTypes.Integer),\r\n (a, b) => {\r\n if (typeof a === \"boolean\" && typeof b === \"boolean\") {\r\n return a && b;\r\n } else if (typeof a === \"number\" && typeof b === \"number\") {\r\n return a & b;\r\n } else if (typeof a === \"object\" && typeof b === \"object\") {\r\n return new FlowGraphInteger(a.value & b.value);\r\n } else {\r\n throw new Error(`Cannot perform bitwise AND on ${a} and ${b}`);\r\n }\r\n },\r\n FlowGraphBlockNames.BitwiseAnd,\r\n config\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Bitwise OR operation\r\n */\r\nexport class FlowGraphBitwiseOrBlock extends FlowGraphBinaryOperationBlock<FlowGraphBitwiseTypes, FlowGraphBitwiseTypes, FlowGraphBitwiseTypes> {\r\n constructor(config?: IFlowGraphBitwiseBlockConfiguration) {\r\n super(\r\n getRichTypeByFlowGraphType(config?.valueType || FlowGraphTypes.Integer),\r\n getRichTypeByFlowGraphType(config?.valueType || FlowGraphTypes.Integer),\r\n getRichTypeByFlowGraphType(config?.valueType || FlowGraphTypes.Integer),\r\n (a, b) => {\r\n if (typeof a === \"boolean\" && typeof b === \"boolean\") {\r\n return a || b;\r\n } else if (typeof a === \"number\" && typeof b === \"number\") {\r\n return a | b;\r\n } else if (typeof a === \"object\" && typeof b === \"object\") {\r\n return new FlowGraphInteger(a.value | b.value);\r\n } else {\r\n throw new Error(`Cannot perform bitwise OR on ${a} and ${b}`);\r\n }\r\n },\r\n FlowGraphBlockNames.BitwiseOr,\r\n config\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Bitwise XOR operation\r\n */\r\nexport class FlowGraphBitwiseXorBlock extends FlowGraphBinaryOperationBlock<FlowGraphBitwiseTypes, FlowGraphBitwiseTypes, FlowGraphBitwiseTypes> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(\r\n getRichTypeByFlowGraphType(config?.valueType || FlowGraphTypes.Integer),\r\n getRichTypeByFlowGraphType(config?.valueType || FlowGraphTypes.Integer),\r\n getRichTypeByFlowGraphType(config?.valueType || FlowGraphTypes.Integer),\r\n (a, b) => {\r\n if (typeof a === \"boolean\" && typeof b === \"boolean\") {\r\n return a !== b;\r\n } else if (typeof a === \"number\" && typeof b === \"number\") {\r\n return a ^ b;\r\n } else if (typeof a === \"object\" && typeof b === \"object\") {\r\n return new FlowGraphInteger(a.value ^ b.value);\r\n } else {\r\n throw new Error(`Cannot perform bitwise XOR on ${a} and ${b}`);\r\n }\r\n },\r\n FlowGraphBlockNames.BitwiseXor,\r\n config\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Bitwise left shift operation\r\n */\r\nexport class FlowGraphBitwiseLeftShiftBlock extends FlowGraphBinaryOperationBlock<FlowGraphInteger, FlowGraphInteger, FlowGraphInteger> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(\r\n RichTypeFlowGraphInteger,\r\n RichTypeFlowGraphInteger,\r\n RichTypeFlowGraphInteger,\r\n (a, b) => new FlowGraphInteger(a.value << b.value),\r\n FlowGraphBlockNames.BitwiseLeftShift,\r\n config\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Bitwise right shift operation\r\n */\r\nexport class FlowGraphBitwiseRightShiftBlock extends FlowGraphBinaryOperationBlock<FlowGraphInteger, FlowGraphInteger, FlowGraphInteger> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(\r\n RichTypeFlowGraphInteger,\r\n RichTypeFlowGraphInteger,\r\n RichTypeFlowGraphInteger,\r\n (a, b) => new FlowGraphInteger(a.value >> b.value),\r\n FlowGraphBlockNames.BitwiseRightShift,\r\n config\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Count leading zeros operation\r\n */\r\nexport class FlowGraphLeadingZerosBlock extends FlowGraphUnaryOperationBlock<FlowGraphInteger, FlowGraphInteger> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeFlowGraphInteger, RichTypeFlowGraphInteger, (a) => new FlowGraphInteger(Math.clz32(a.value)), FlowGraphBlockNames.LeadingZeros, config);\r\n }\r\n}\r\n\r\n/**\r\n * Count trailing zeros operation\r\n */\r\nexport class FlowGraphTrailingZerosBlock extends FlowGraphUnaryOperationBlock<FlowGraphInteger, FlowGraphInteger> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(\r\n RichTypeFlowGraphInteger,\r\n RichTypeFlowGraphInteger,\r\n (a) => new FlowGraphInteger(a.value ? 31 - Math.clz32(a.value & -a.value) : 32),\r\n FlowGraphBlockNames.TrailingZeros,\r\n config\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Given a number (which is converted to a 32-bit integer), return the\r\n * number of bits set to one on that number.\r\n * @param n the number to run the op on\r\n * @returns the number of bits set to one on that number\r\n */\r\nfunction CountOnes(n: number) {\r\n let result = 0;\r\n while (n) {\r\n // This zeroes out all bits except for the least significant one.\r\n // So if the bit is set, it will be 1, otherwise it will be 0.\r\n result += n & 1;\r\n // This shifts n's bits to the right by one\r\n n >>= 1;\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Count one bits operation\r\n */\r\nexport class FlowGraphOneBitsCounterBlock extends FlowGraphUnaryOperationBlock<FlowGraphInteger, FlowGraphInteger> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeFlowGraphInteger, RichTypeFlowGraphInteger, (a) => new FlowGraphInteger(CountOnes(a.value)), FlowGraphBlockNames.OneBitsCounter, config);\r\n }\r\n}\r\n\r\n/**\r\n * Converts a linear sRGB color to OkLCh (the polar form of the Oklab color space).\r\n * Uses Ottosson's original single-precision matrices.\r\n * The RGB inputs are treated as linear; hue is returned in radians.\r\n * @param r linear red component\r\n * @param g linear green component\r\n * @param b linear blue component\r\n * @returns the OkLCh lightness (l), chroma (c) and hue (h, radians)\r\n */\r\nfunction RgbToOkLch(r: number, g: number, b: number): { l: number; c: number; h: number } {\r\n // Linear sRGB -> LMS cone responses.\r\n const long = 0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b;\r\n const medium = 0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b;\r\n const short = 0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b;\r\n // Non-linearity (cube root) then LMS' -> Oklab.\r\n const lRoot = Math.cbrt(long);\r\n const mRoot = Math.cbrt(medium);\r\n const sRoot = Math.cbrt(short);\r\n const okL = 0.2104542553 * lRoot + 0.793617785 * mRoot - 0.0040720468 * sRoot;\r\n const okA = 1.9779984951 * lRoot - 2.428592205 * mRoot + 0.4505937099 * sRoot;\r\n const okB = 0.0259040371 * lRoot + 0.7827717662 * mRoot - 0.808675766 * sRoot;\r\n // Oklab -> OkLCh (polar form).\r\n return { l: okL, c: Math.hypot(okA, okB), h: Math.atan2(okB, okA) };\r\n}\r\n\r\n/**\r\n * Converts an OkLCh color to linear sRGB. Inverse of {@link RgbToOkLch}; hue is in radians.\r\n * @param l OkLCh lightness\r\n * @param c OkLCh chroma\r\n * @param h OkLCh hue in radians\r\n * @returns the linear sRGB red (r), green (g) and blue (b) components\r\n */\r\nfunction OkLchToRgb(l: number, c: number, h: number): { r: number; g: number; b: number } {\r\n // OkLCh -> Oklab.\r\n const okA = c * Math.cos(h);\r\n const okB = c * Math.sin(h);\r\n // Oklab -> LMS' then cube to LMS.\r\n const lPrime = l + 0.3963377774 * okA + 0.2158037573 * okB;\r\n const mPrime = l - 0.1055613458 * okA - 0.0638541728 * okB;\r\n const sPrime = l - 0.0894841775 * okA - 1.291485548 * okB;\r\n const long = lPrime * lPrime * lPrime;\r\n const medium = mPrime * mPrime * mPrime;\r\n const short = sPrime * sPrime * sPrime;\r\n // LMS -> linear sRGB.\r\n return {\r\n r: 4.0767416621 * long - 3.3077115913 * medium + 0.2309699292 * short,\r\n g: -1.2684380046 * long + 2.6097574011 * medium - 0.3413193965 * short,\r\n b: -0.0041960863 * long - 0.7034186147 * medium + 1.707614701 * short,\r\n };\r\n}\r\n\r\n/**\r\n * Block that converts a linear sRGB color (r, g, b) to OkLCh (l, c, h). Hue is in radians.\r\n */\r\nexport class FlowGraphRGBToOkLChBlock extends FlowGraphBlock {\r\n /**\r\n * Input connection: the linear red component.\r\n */\r\n public readonly r: FlowGraphDataConnection<number>;\r\n /**\r\n * Input connection: the linear green component.\r\n */\r\n public readonly g: FlowGraphDataConnection<number>;\r\n /**\r\n * Input connection: the linear blue component.\r\n */\r\n public readonly b: FlowGraphDataConnection<number>;\r\n /**\r\n * Output connection: the OkLCh lightness.\r\n */\r\n public readonly l: FlowGraphDataConnection<number>;\r\n /**\r\n * Output connection: the OkLCh chroma.\r\n */\r\n public readonly c: FlowGraphDataConnection<number>;\r\n /**\r\n * Output connection: the OkLCh hue, in radians.\r\n */\r\n public readonly h: FlowGraphDataConnection<number>;\r\n\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(config);\r\n this.r = this.registerDataInput(\"r\", RichTypeNumber, 0);\r\n this.g = this.registerDataInput(\"g\", RichTypeNumber, 0);\r\n this.b = this.registerDataInput(\"b\", RichTypeNumber, 0);\r\n this.l = this.registerDataOutput(\"l\", RichTypeNumber, 0);\r\n this.c = this.registerDataOutput(\"c\", RichTypeNumber, 0);\r\n this.h = this.registerDataOutput(\"h\", RichTypeNumber, 0);\r\n }\r\n\r\n public override _updateOutputs(context: FlowGraphContext): void {\r\n const { l, c, h } = RgbToOkLch(this.r.getValue(context), this.g.getValue(context), this.b.getValue(context));\r\n this.l.setValue(l, context);\r\n this.c.setValue(c, context);\r\n this.h.setValue(h, context);\r\n }\r\n\r\n public override getClassName(): string {\r\n return FlowGraphBlockNames.RGBToOkLCh;\r\n }\r\n}\r\n\r\n/**\r\n * Block that converts an OkLCh color (l, c, h) to linear sRGB (r, g, b). Hue is in radians.\r\n */\r\nexport class FlowGraphRGBFromOkLChBlock extends FlowGraphBlock {\r\n /**\r\n * Input connection: the OkLCh lightness.\r\n */\r\n public readonly l: FlowGraphDataConnection<number>;\r\n /**\r\n * Input connection: the OkLCh chroma.\r\n */\r\n public readonly c: FlowGraphDataConnection<number>;\r\n /**\r\n * Input connection: the OkLCh hue, in radians.\r\n */\r\n public readonly h: FlowGraphDataConnection<number>;\r\n /**\r\n * Output connection: the linear red component.\r\n */\r\n public readonly r: FlowGraphDataConnection<number>;\r\n /**\r\n * Output connection: the linear green component.\r\n */\r\n public readonly g: FlowGraphDataConnection<number>;\r\n /**\r\n * Output connection: the linear blue component.\r\n */\r\n public readonly b: FlowGraphDataConnection<number>;\r\n\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(config);\r\n this.l = this.registerDataInput(\"l\", RichTypeNumber, 0);\r\n this.c = this.registerDataInput(\"c\", RichTypeNumber, 0);\r\n this.h = this.registerDataInput(\"h\", RichTypeNumber, 0);\r\n this.r = this.registerDataOutput(\"r\", RichTypeNumber, 0);\r\n this.g = this.registerDataOutput(\"g\", RichTypeNumber, 0);\r\n this.b = this.registerDataOutput(\"b\", RichTypeNumber, 0);\r\n }\r\n\r\n public override _updateOutputs(context: FlowGraphContext): void {\r\n const { r, g, b } = OkLchToRgb(this.l.getValue(context), this.c.getValue(context), this.h.getValue(context));\r\n this.r.setValue(r, context);\r\n this.g.setValue(g, context);\r\n this.b.setValue(b, context);\r\n }\r\n\r\n public override getClassName(): string {\r\n return FlowGraphBlockNames.RGBFromOkLCh;\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register side effects for flowGraphMathBlocks.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterFlowGraphMathBlocks(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterClass(FlowGraphBlockNames.Add, FlowGraphAddBlock);\r\n RegisterClass(FlowGraphBlockNames.Subtract, FlowGraphSubtractBlock);\r\n RegisterClass(FlowGraphBlockNames.Multiply, FlowGraphMultiplyBlock);\r\n RegisterClass(FlowGraphBlockNames.Divide, FlowGraphDivideBlock);\r\n RegisterClass(FlowGraphBlockNames.Random, FlowGraphRandomBlock);\r\n RegisterClass(FlowGraphBlockNames.E, FlowGraphEBlock);\r\n RegisterClass(FlowGraphBlockNames.PI, FlowGraphPiBlock);\r\n RegisterClass(FlowGraphBlockNames.Tau, FlowGraphTauBlock);\r\n RegisterClass(FlowGraphBlockNames.Inf, FlowGraphInfBlock);\r\n RegisterClass(FlowGraphBlockNames.NaN, FlowGraphNaNBlock);\r\n RegisterClass(FlowGraphBlockNames.Abs, FlowGraphAbsBlock);\r\n RegisterClass(FlowGraphBlockNames.Sign, FlowGraphSignBlock);\r\n RegisterClass(FlowGraphBlockNames.Trunc, FlowGraphTruncBlock);\r\n RegisterClass(FlowGraphBlockNames.Floor, FlowGraphFloorBlock);\r\n RegisterClass(FlowGraphBlockNames.Ceil, FlowGraphCeilBlock);\r\n RegisterClass(FlowGraphBlockNames.Round, FlowGraphRoundBlock);\r\n RegisterClass(FlowGraphBlockNames.Fraction, FlowGraphFractionBlock);\r\n RegisterClass(FlowGraphBlockNames.Negation, FlowGraphNegationBlock);\r\n RegisterClass(FlowGraphBlockNames.Modulo, FlowGraphModuloBlock);\r\n RegisterClass(FlowGraphBlockNames.Min, FlowGraphMinBlock);\r\n RegisterClass(FlowGraphBlockNames.Max, FlowGraphMaxBlock);\r\n RegisterClass(FlowGraphBlockNames.Clamp, FlowGraphClampBlock);\r\n RegisterClass(FlowGraphBlockNames.Saturate, FlowGraphSaturateBlock);\r\n RegisterClass(FlowGraphBlockNames.MathInterpolation, FlowGraphMathInterpolationBlock);\r\n RegisterClass(FlowGraphBlockNames.MathSlerp, FlowGraphMathSlerpBlock);\r\n RegisterClass(FlowGraphBlockNames.SmoothStep, FlowGraphMathSmoothStepBlock);\r\n RegisterClass(FlowGraphBlockNames.RGBToOkLCh, FlowGraphRGBToOkLChBlock);\r\n RegisterClass(FlowGraphBlockNames.RGBFromOkLCh, FlowGraphRGBFromOkLChBlock);\r\n RegisterClass(FlowGraphBlockNames.Equality, FlowGraphEqualityBlock);\r\n RegisterClass(FlowGraphBlockNames.LessThan, FlowGraphLessThanBlock);\r\n RegisterClass(FlowGraphBlockNames.LessThanOrEqual, FlowGraphLessThanOrEqualBlock);\r\n RegisterClass(FlowGraphBlockNames.GreaterThan, FlowGraphGreaterThanBlock);\r\n RegisterClass(FlowGraphBlockNames.GreaterThanOrEqual, FlowGraphGreaterThanOrEqualBlock);\r\n RegisterClass(FlowGraphBlockNames.IsNaN, FlowGraphIsNanBlock);\r\n RegisterClass(FlowGraphBlockNames.IsInfinity, FlowGraphIsInfinityBlock);\r\n RegisterClass(FlowGraphBlockNames.DegToRad, FlowGraphDegToRadBlock);\r\n RegisterClass(FlowGraphBlockNames.RadToDeg, FlowGraphRadToDegBlock);\r\n RegisterClass(FlowGraphBlockNames.Asin, FlowGraphAsinBlock);\r\n RegisterClass(FlowGraphBlockNames.Acos, FlowGraphAcosBlock);\r\n RegisterClass(FlowGraphBlockNames.Atan, FlowGraphAtanBlock);\r\n RegisterClass(FlowGraphBlockNames.Atan2, FlowGraphAtan2Block);\r\n RegisterClass(FlowGraphBlockNames.Sinh, FlowGraphSinhBlock);\r\n RegisterClass(FlowGraphBlockNames.Cosh, FlowGraphCoshBlock);\r\n RegisterClass(FlowGraphBlockNames.Tanh, FlowGraphTanhBlock);\r\n RegisterClass(FlowGraphBlockNames.Asinh, FlowGraphAsinhBlock);\r\n RegisterClass(FlowGraphBlockNames.Acosh, FlowGraphAcoshBlock);\r\n RegisterClass(FlowGraphBlockNames.Atanh, FlowGraphAtanhBlock);\r\n RegisterClass(FlowGraphBlockNames.Exponential, FlowGraphExpBlock);\r\n RegisterClass(FlowGraphBlockNames.Log, FlowGraphLogBlock);\r\n RegisterClass(FlowGraphBlockNames.Log2, FlowGraphLog2Block);\r\n RegisterClass(FlowGraphBlockNames.Log10, FlowGraphLog10Block);\r\n RegisterClass(FlowGraphBlockNames.SquareRoot, FlowGraphSquareRootBlock);\r\n RegisterClass(FlowGraphBlockNames.CubeRoot, FlowGraphCubeRootBlock);\r\n RegisterClass(FlowGraphBlockNames.Power, FlowGraphPowerBlock);\r\n RegisterClass(FlowGraphBlockNames.BitwiseNot, FlowGraphBitwiseNotBlock);\r\n RegisterClass(FlowGraphBlockNames.BitwiseAnd, FlowGraphBitwiseAndBlock);\r\n RegisterClass(FlowGraphBlockNames.BitwiseOr, FlowGraphBitwiseOrBlock);\r\n RegisterClass(FlowGraphBlockNames.BitwiseXor, FlowGraphBitwiseXorBlock);\r\n RegisterClass(FlowGraphBlockNames.BitwiseLeftShift, FlowGraphBitwiseLeftShiftBlock);\r\n RegisterClass(FlowGraphBlockNames.BitwiseRightShift, FlowGraphBitwiseRightShiftBlock);\r\n RegisterClass(FlowGraphBlockNames.LeadingZeros, FlowGraphLeadingZerosBlock);\r\n RegisterClass(FlowGraphBlockNames.TrailingZeros, FlowGraphTrailingZerosBlock);\r\n RegisterClass(FlowGraphBlockNames.OneBitsCounter, FlowGraphOneBitsCounterBlock);\r\n}\r\n"]}
1
+ {"version":3,"file":"flowGraphMathBlocks.pure.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { FlowGraphBlock, type IFlowGraphBlockConfiguration } from \"../../../flowGraphBlock\";\r\nimport { FlowGraphTypes, getRichTypeByFlowGraphType, RichTypeAny, RichTypeBoolean, RichTypeFlowGraphInteger, RichTypeNumber } from \"../../../flowGraphRichTypes.pure\";\r\nimport { FlowGraphBinaryOperationBlock } from \"../flowGraphBinaryOperationBlock\";\r\nimport { FlowGraphConstantOperationBlock } from \"../flowGraphConstantOperationBlock\";\r\nimport { Quaternion, Matrix, Vector2, Vector3, Vector4 } from \"../../../../Maths/math.vector.pure\";\r\nimport { FlowGraphUnaryOperationBlock } from \"../flowGraphUnaryOperationBlock\";\r\nimport { FlowGraphTernaryOperationBlock } from \"../flowGraphTernaryOperationBlock\";\r\nimport { FlowGraphInteger } from \"../../../CustomTypes/flowGraphInteger.pure\";\r\nimport { FlowGraphBlockNames } from \"../../flowGraphBlockNames\";\r\nimport { type FlowGraphDataConnection } from \"core/FlowGraph/flowGraphDataConnection.pure\";\r\nimport { type FlowGraphContext } from \"core/FlowGraph/flowGraphContext\";\r\nimport { FlowGraphMatrix2D, FlowGraphMatrix3D } from \"core/FlowGraph/CustomTypes/flowGraphMatrix\";\r\nimport {\r\n type FlowGraphMathOperationType,\r\n type FlowGraphNumber,\r\n _AreSameIntegerClass,\r\n _AreSameMatrixClass,\r\n _AreSameVectorOrQuaternionClass,\r\n _GetClassNameOf,\r\n getNumericValue,\r\n isNumeric,\r\n} from \"core/FlowGraph/utils\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\n\r\n/**\r\n * A configuration interface for math blocks\r\n */\r\nexport interface IFlowGraphMathBlockConfiguration extends IFlowGraphBlockConfiguration {\r\n /**\r\n * If true, the multiplication is done per component.\r\n * This is the behavior in glTF interactivity.\r\n */\r\n useMatrixPerComponent?: boolean;\r\n\r\n /**\r\n * The type of the variable.\r\n */\r\n type?: FlowGraphTypes;\r\n\r\n /**\r\n * If true, the block will not allow integer and float arithmetic.\r\n * This is the behavior in glTF interactivity.\r\n */\r\n preventIntegerFloatArithmetic?: boolean;\r\n}\r\n\r\n/**\r\n * Polymorphic add block.\r\n */\r\nexport class FlowGraphAddBlock extends FlowGraphBinaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n /**\r\n * Construct a new add block.\r\n * @param config optional configuration\r\n */\r\n constructor(config?: IFlowGraphMathBlockConfiguration) {\r\n super(\r\n getRichTypeByFlowGraphType(config?.type),\r\n getRichTypeByFlowGraphType(config?.type),\r\n getRichTypeByFlowGraphType(config?.type),\r\n (a, b) => this._polymorphicAdd(a, b),\r\n FlowGraphBlockNames.Add,\r\n config\r\n );\r\n }\r\n\r\n private _polymorphicAdd(a: FlowGraphMathOperationType, b: FlowGraphMathOperationType) {\r\n const aClassName = _GetClassNameOf(a);\r\n const bClassName = _GetClassNameOf(b);\r\n if (_AreSameVectorOrQuaternionClass(aClassName, bClassName) || _AreSameMatrixClass(aClassName, bClassName) || _AreSameIntegerClass(aClassName, bClassName)) {\r\n // cast to vector3, but any other cast will be fine\r\n return (a as Vector3).add(b as Vector3);\r\n } else if (aClassName === FlowGraphTypes.Quaternion || bClassName === FlowGraphTypes.Vector4) {\r\n return new Vector4((a as Quaternion).x, (a as Quaternion).y, (a as Quaternion).z, (a as Quaternion).w).addInPlace(b as Vector4);\r\n } else if (aClassName === FlowGraphTypes.Vector4 || bClassName === FlowGraphTypes.Quaternion) {\r\n return (a as Vector4).add(b as Quaternion);\r\n } else {\r\n // at this point at least one of the variables is a number.\r\n if (this.config?.preventIntegerFloatArithmetic && typeof a !== typeof b) {\r\n throw new Error(\"Cannot add different types of numbers.\");\r\n }\r\n return getNumericValue(a as number) + getNumericValue(b as number);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Polymorphic subtract block.\r\n */\r\nexport class FlowGraphSubtractBlock extends FlowGraphBinaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n /**\r\n * Construct a new subtract block.\r\n * @param config optional configuration\r\n */\r\n constructor(config?: IFlowGraphMathBlockConfiguration) {\r\n super(\r\n getRichTypeByFlowGraphType(config?.type),\r\n getRichTypeByFlowGraphType(config?.type),\r\n getRichTypeByFlowGraphType(config?.type),\r\n (a, b) => this._polymorphicSubtract(a, b),\r\n FlowGraphBlockNames.Subtract,\r\n config\r\n );\r\n }\r\n\r\n private _polymorphicSubtract(a: FlowGraphMathOperationType, b: FlowGraphMathOperationType) {\r\n const aClassName = _GetClassNameOf(a);\r\n const bClassName = _GetClassNameOf(b);\r\n if (_AreSameVectorOrQuaternionClass(aClassName, bClassName) || _AreSameIntegerClass(aClassName, bClassName) || _AreSameMatrixClass(aClassName, bClassName)) {\r\n // cast to vector3, but it can be casted to any vector type\r\n return (a as Vector3).subtract(b as Vector3);\r\n } else if (aClassName === FlowGraphTypes.Quaternion || bClassName === FlowGraphTypes.Vector4) {\r\n return new Vector4((a as Quaternion).x, (a as Quaternion).y, (a as Quaternion).z, (a as Quaternion).w).subtractInPlace(b as Vector4);\r\n } else if (aClassName === FlowGraphTypes.Vector4 || bClassName === FlowGraphTypes.Quaternion) {\r\n return (a as Vector4).subtract(b as Quaternion);\r\n } else {\r\n // at this point at least one of the variables is a number.\r\n if (this.config?.preventIntegerFloatArithmetic && typeof a !== typeof b) {\r\n throw new Error(\"Cannot add different types of numbers.\");\r\n }\r\n return getNumericValue(a as number) - getNumericValue(b as number);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Polymorphic multiply block.\r\n * In case of matrix, it is configurable whether the multiplication is done per component.\r\n */\r\nexport class FlowGraphMultiplyBlock extends FlowGraphBinaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphMathBlockConfiguration) {\r\n super(\r\n getRichTypeByFlowGraphType(config?.type),\r\n getRichTypeByFlowGraphType(config?.type),\r\n getRichTypeByFlowGraphType(config?.type),\r\n (a, b) => this._polymorphicMultiply(a, b),\r\n FlowGraphBlockNames.Multiply,\r\n config\r\n );\r\n }\r\n\r\n private _polymorphicMultiply(a: FlowGraphMathOperationType, b: FlowGraphMathOperationType) {\r\n const aClassName = _GetClassNameOf(a);\r\n const bClassName = _GetClassNameOf(b);\r\n if (_AreSameVectorOrQuaternionClass(aClassName, bClassName) || _AreSameIntegerClass(aClassName, bClassName)) {\r\n // cast to vector3, but it can be casted to any vector type\r\n return (a as Vector3).multiply(b as Vector3);\r\n } else if (aClassName === FlowGraphTypes.Quaternion || bClassName === FlowGraphTypes.Vector4) {\r\n return new Vector4((a as Quaternion).x, (a as Quaternion).y, (a as Quaternion).z, (a as Quaternion).w).multiplyInPlace(b as Vector4);\r\n } else if (aClassName === FlowGraphTypes.Vector4 || bClassName === FlowGraphTypes.Quaternion) {\r\n return (a as Vector4).multiply(b as Quaternion);\r\n } else if (_AreSameMatrixClass(aClassName, bClassName)) {\r\n if (this.config?.useMatrixPerComponent) {\r\n // this is the definition of multiplication of glTF interactivity\r\n // get a's m as array, and multiply each component with b's m\r\n const aM = (a as FlowGraphMatrix2D).m;\r\n for (let i = 0; i < aM.length; i++) {\r\n aM[i] *= (b as FlowGraphMatrix2D).m[i];\r\n }\r\n if (aClassName === FlowGraphTypes.Matrix2D) {\r\n return new FlowGraphMatrix2D(aM);\r\n } else if (aClassName === FlowGraphTypes.Matrix3D) {\r\n return new FlowGraphMatrix3D(aM);\r\n } else {\r\n return Matrix.FromArray(aM);\r\n }\r\n } else {\r\n a = a as Matrix;\r\n b = b as Matrix;\r\n return b.multiply(a);\r\n }\r\n } else {\r\n // at this point at least one of the variables is a number.\r\n if (this.config?.preventIntegerFloatArithmetic && typeof a !== typeof b) {\r\n throw new Error(\"Cannot add different types of numbers.\");\r\n }\r\n return getNumericValue(a as number) * getNumericValue(b as number);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Polymorphic division block.\r\n */\r\nexport class FlowGraphDivideBlock extends FlowGraphBinaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n /**\r\n * Construct a new divide block.\r\n * @param config - Optional configuration\r\n */\r\n constructor(config?: IFlowGraphMathBlockConfiguration) {\r\n super(\r\n getRichTypeByFlowGraphType(config?.type),\r\n getRichTypeByFlowGraphType(config?.type),\r\n getRichTypeByFlowGraphType(config?.type),\r\n (a, b) => this._polymorphicDivide(a, b),\r\n FlowGraphBlockNames.Divide,\r\n config\r\n );\r\n }\r\n\r\n private _polymorphicDivide(a: FlowGraphMathOperationType, b: FlowGraphMathOperationType) {\r\n const aClassName = _GetClassNameOf(a);\r\n const bClassName = _GetClassNameOf(b);\r\n if (_AreSameVectorOrQuaternionClass(aClassName, bClassName) || _AreSameIntegerClass(aClassName, bClassName)) {\r\n // cast to vector3, but it can be casted to any vector type\r\n return (a as Vector3).divide(b as Vector3);\r\n } else if (aClassName === FlowGraphTypes.Quaternion || bClassName === FlowGraphTypes.Quaternion) {\r\n // this is a simple division (per component!), and should be also supported between Quat and Vector4. Therefore -\r\n const aClone = (a as Quaternion).clone();\r\n aClone.x /= (b as Quaternion).x;\r\n aClone.y /= (b as Quaternion).y;\r\n aClone.z /= (b as Quaternion).z;\r\n aClone.w /= (b as Quaternion).w;\r\n return aClone;\r\n } else if (aClassName === FlowGraphTypes.Quaternion || bClassName === FlowGraphTypes.Vector4) {\r\n return new Vector4((a as Quaternion).x, (a as Quaternion).y, (a as Quaternion).z, (a as Quaternion).w).divideInPlace(b as Vector4);\r\n } else if (aClassName === FlowGraphTypes.Vector4 || bClassName === FlowGraphTypes.Quaternion) {\r\n return (a as Vector4).divide(b as Quaternion);\r\n } else if (_AreSameMatrixClass(aClassName, bClassName)) {\r\n if (this.config?.useMatrixPerComponent) {\r\n // get a's m as array, and divide each component with b's m\r\n const aM = (a as FlowGraphMatrix2D).m;\r\n for (let i = 0; i < aM.length; i++) {\r\n aM[i] /= (b as FlowGraphMatrix2D).m[i];\r\n }\r\n if (aClassName === FlowGraphTypes.Matrix2D) {\r\n return new FlowGraphMatrix2D(aM);\r\n } else if (aClassName === FlowGraphTypes.Matrix3D) {\r\n return new FlowGraphMatrix3D(aM);\r\n } else {\r\n return Matrix.FromArray(aM);\r\n }\r\n } else {\r\n a = a as Matrix;\r\n b = b as Matrix;\r\n return a.divide(b);\r\n }\r\n } else {\r\n // at this point at least one of the variables is a number.\r\n if (this.config?.preventIntegerFloatArithmetic && typeof a !== typeof b) {\r\n throw new Error(\"Cannot add different types of numbers.\");\r\n }\r\n return getNumericValue(a as number) / getNumericValue(b as number);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Configuration interface for the random block.\r\n */\r\nexport interface IFlowGraphRandomBlockConfiguration extends IFlowGraphBlockConfiguration {\r\n /**\r\n * The minimum value. defaults to 0.\r\n */\r\n min?: number;\r\n /**\r\n * The maximum value. defaults to 1.\r\n */\r\n max?: number;\r\n\r\n /**\r\n * The seed for the random number generator for deterministic random values.\r\n * If not set, Math.random() is used.\r\n */\r\n seed?: number;\r\n}\r\n\r\n/**\r\n * Random number between min and max (defaults to 0 to 1)\r\n *\r\n * This node will cache the result for he same node reference. i.e., a Math.eq that references the SAME random node will always return true.\r\n */\r\nexport class FlowGraphRandomBlock extends FlowGraphConstantOperationBlock<FlowGraphMathOperationType> {\r\n /**\r\n * The minimum value. defaults to 0.\r\n */\r\n public readonly min: FlowGraphDataConnection<number>;\r\n /**\r\n * The maximum value. defaults to 1.\r\n */\r\n public readonly max: FlowGraphDataConnection<number>;\r\n\r\n private _seed?: number;\r\n\r\n /**\r\n * Construct a new random block.\r\n * @param config optional configuration\r\n */\r\n constructor(config?: IFlowGraphRandomBlockConfiguration) {\r\n super(RichTypeNumber, (context) => this._random(context), FlowGraphBlockNames.Random, config);\r\n this.min = this.registerDataInput(\"min\", RichTypeNumber, config?.min ?? 0);\r\n this.max = this.registerDataInput(\"max\", RichTypeNumber, config?.max ?? 1);\r\n if (config?.seed) {\r\n this._seed = config.seed;\r\n }\r\n }\r\n\r\n private _isSeed(seed = this._seed): seed is number {\r\n return seed !== undefined;\r\n }\r\n\r\n private _getRandomValue() {\r\n if (this._isSeed(this._seed)) {\r\n // compute seed-based random number, deterministic randomness!\r\n const x = Math.sin(this._seed++) * 10000;\r\n return x - Math.floor(x);\r\n }\r\n return Math.random();\r\n }\r\n\r\n private _random(context: FlowGraphContext) {\r\n const min = this.min.getValue(context);\r\n const max = this.max.getValue(context);\r\n return this._getRandomValue() * (max - min) + min;\r\n }\r\n}\r\n\r\n/**\r\n * E constant.\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class FlowGraphEBlock extends FlowGraphConstantOperationBlock<number> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeNumber, () => Math.E, FlowGraphBlockNames.E, config);\r\n }\r\n}\r\n\r\n/**\r\n * Pi constant.\r\n */\r\nexport class FlowGraphPiBlock extends FlowGraphConstantOperationBlock<number> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeNumber, () => Math.PI, FlowGraphBlockNames.PI, config);\r\n }\r\n}\r\n\r\n/**\r\n * Tau constant (2 * Pi), the ratio of a circle's circumference to its radius.\r\n */\r\nexport class FlowGraphTauBlock extends FlowGraphConstantOperationBlock<number> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeNumber, () => 2 * Math.PI, FlowGraphBlockNames.Tau, config);\r\n }\r\n}\r\n\r\n/**\r\n * Positive inf constant.\r\n */\r\nexport class FlowGraphInfBlock extends FlowGraphConstantOperationBlock<number> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeNumber, () => Number.POSITIVE_INFINITY, FlowGraphBlockNames.Inf, config);\r\n }\r\n}\r\n\r\n/**\r\n * NaN constant.\r\n */\r\nexport class FlowGraphNaNBlock extends FlowGraphConstantOperationBlock<number> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeNumber, () => Number.NaN, FlowGraphBlockNames.NaN, config);\r\n }\r\n}\r\n\r\nfunction ComponentWiseUnaryOperation(a: FlowGraphMathOperationType, op: (a: number) => number) {\r\n const aClassName = _GetClassNameOf(a);\r\n switch (aClassName) {\r\n case \"FlowGraphInteger\":\r\n a = a as FlowGraphInteger;\r\n return new FlowGraphInteger(op(a.value));\r\n case FlowGraphTypes.Vector2:\r\n a = a as Vector2;\r\n return new Vector2(op(a.x), op(a.y));\r\n case FlowGraphTypes.Vector3:\r\n a = a as Vector3;\r\n return new Vector3(op(a.x), op(a.y), op(a.z));\r\n case FlowGraphTypes.Vector4:\r\n a = a as Vector4;\r\n return new Vector4(op(a.x), op(a.y), op(a.z), op(a.w));\r\n case FlowGraphTypes.Quaternion:\r\n a = a as Quaternion;\r\n return new Quaternion(op(a.x), op(a.y), op(a.z), op(a.w));\r\n case FlowGraphTypes.Matrix:\r\n a = a as Matrix;\r\n return Matrix.FromArray(a.m.map(op));\r\n case FlowGraphTypes.Matrix2D:\r\n a = a as FlowGraphMatrix2D;\r\n // reason for not using .map is performance\r\n return new FlowGraphMatrix2D(a.m.map(op));\r\n case FlowGraphTypes.Matrix3D:\r\n a = a as FlowGraphMatrix3D;\r\n return new FlowGraphMatrix3D(a.m.map(op));\r\n default:\r\n a = a as number;\r\n return op(a);\r\n }\r\n}\r\n\r\n/**\r\n * Absolute value block.\r\n */\r\nexport class FlowGraphAbsBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeNumber, RichTypeNumber, (a) => this._polymorphicAbs(a), FlowGraphBlockNames.Abs, config);\r\n }\r\n\r\n private _polymorphicAbs(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Math.abs);\r\n }\r\n}\r\n\r\n/**\r\n * Sign block.\r\n */\r\nexport class FlowGraphSignBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeNumber, RichTypeNumber, (a) => this._polymorphicSign(a), FlowGraphBlockNames.Sign, config);\r\n }\r\n\r\n private _polymorphicSign(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Math.sign);\r\n }\r\n}\r\n\r\n/**\r\n * Truncation block.\r\n */\r\nexport class FlowGraphTruncBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeNumber, RichTypeNumber, (a) => this._polymorphicTrunc(a), FlowGraphBlockNames.Trunc, config);\r\n }\r\n\r\n private _polymorphicTrunc(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Math.trunc);\r\n }\r\n}\r\n\r\n/**\r\n * Floor block.\r\n */\r\nexport class FlowGraphFloorBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeNumber, RichTypeNumber, (a) => this._polymorphicFloor(a), FlowGraphBlockNames.Floor, config);\r\n }\r\n\r\n private _polymorphicFloor(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Math.floor);\r\n }\r\n}\r\n\r\n/**\r\n * Ceiling block.\r\n */\r\nexport class FlowGraphCeilBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeAny, (a) => this._polymorphicCeiling(a), FlowGraphBlockNames.Ceil, config);\r\n }\r\n\r\n private _polymorphicCeiling(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Math.ceil);\r\n }\r\n}\r\n\r\n/**\r\n * Configuration for the round block.\r\n */\r\nexport interface IFlowGraphRoundBlockConfiguration extends IFlowGraphBlockConfiguration {\r\n /**\r\n * If true, the rounding is away from zero, even when negative. i.e. -7.5 goes to -8, and not -7 as Math.round does (it rounds up).\r\n * This is the default when using glTF\r\n */\r\n roundHalfAwayFromZero?: boolean;\r\n}\r\n/**\r\n * Round block.\r\n */\r\nexport class FlowGraphRoundBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphRoundBlockConfiguration) {\r\n super(RichTypeAny, RichTypeAny, (a) => this._polymorphicRound(a), FlowGraphBlockNames.Round, config);\r\n }\r\n\r\n private _polymorphicRound(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, (a) => (a < 0 && this.config?.roundHalfAwayFromZero ? -Math.round(-a) : Math.round(a)));\r\n }\r\n}\r\n\r\n/**\r\n * A block that returns the fractional part of a number.\r\n */\r\nexport class FlowGraphFractionBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeAny, (a) => this._polymorphicFraction(a), FlowGraphBlockNames.Fraction, config);\r\n }\r\n\r\n private _polymorphicFraction(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, (a) => a - Math.floor(a));\r\n }\r\n}\r\n\r\n/**\r\n * Negation block.\r\n */\r\nexport class FlowGraphNegationBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n /**\r\n * construct a new negation block.\r\n * @param config optional configuration\r\n */\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeAny, (a) => this._polymorphicNeg(a), FlowGraphBlockNames.Negation, config);\r\n }\r\n\r\n private _polymorphicNeg(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, (a) => -a);\r\n }\r\n}\r\n\r\nfunction ComponentWiseBinaryOperation(a: FlowGraphMathOperationType, b: FlowGraphMathOperationType, op: (a: number, b: number) => number) {\r\n const aClassName = _GetClassNameOf(a);\r\n switch (aClassName) {\r\n case \"FlowGraphInteger\":\r\n a = a as FlowGraphInteger;\r\n b = b as FlowGraphInteger;\r\n return new FlowGraphInteger(op(a.value, b.value));\r\n case FlowGraphTypes.Vector2:\r\n a = a as Vector2;\r\n b = b as Vector2;\r\n return new Vector2(op(a.x, b.x), op(a.y, b.y));\r\n case FlowGraphTypes.Vector3:\r\n a = a as Vector3;\r\n b = b as Vector3;\r\n return new Vector3(op(a.x, b.x), op(a.y, b.y), op(a.z, b.z));\r\n case FlowGraphTypes.Vector4:\r\n a = a as Vector4;\r\n b = b as Vector4;\r\n return new Vector4(op(a.x, b.x), op(a.y, b.y), op(a.z, b.z), op(a.w, b.w));\r\n case FlowGraphTypes.Quaternion:\r\n a = a as Quaternion;\r\n b = b as Quaternion;\r\n return new Quaternion(op(a.x, b.x), op(a.y, b.y), op(a.z, b.z), op(a.w, b.w));\r\n case FlowGraphTypes.Matrix:\r\n a = a as Matrix;\r\n return Matrix.FromArray(a.m.map((v, i) => op(v, (b as Matrix).m[i])));\r\n case FlowGraphTypes.Matrix2D:\r\n a = a as FlowGraphMatrix2D;\r\n return new FlowGraphMatrix2D(a.m.map((v, i) => op(v, (b as FlowGraphMatrix2D).m[i])));\r\n case FlowGraphTypes.Matrix3D:\r\n a = a as FlowGraphMatrix3D;\r\n return new FlowGraphMatrix3D(a.m.map((v, i) => op(v, (b as FlowGraphMatrix3D).m[i])));\r\n default:\r\n return op(getNumericValue(a as number), getNumericValue(b as number));\r\n }\r\n}\r\n\r\n/**\r\n * Remainder block.\r\n */\r\nexport class FlowGraphModuloBlock extends FlowGraphBinaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeAny, RichTypeAny, (a, b) => this._polymorphicRemainder(a, b), FlowGraphBlockNames.Modulo, config);\r\n }\r\n\r\n private _polymorphicRemainder(a: FlowGraphMathOperationType, b: FlowGraphMathOperationType) {\r\n return ComponentWiseBinaryOperation(a, b, (a, b) => a % b);\r\n }\r\n}\r\n\r\n/**\r\n * Min block.\r\n */\r\nexport class FlowGraphMinBlock extends FlowGraphBinaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeAny, RichTypeAny, (a, b) => this._polymorphicMin(a, b), FlowGraphBlockNames.Min, config);\r\n }\r\n\r\n private _polymorphicMin(a: FlowGraphMathOperationType, b: FlowGraphMathOperationType) {\r\n return ComponentWiseBinaryOperation(a, b, Math.min);\r\n }\r\n}\r\n\r\n/**\r\n * Max block\r\n */\r\nexport class FlowGraphMaxBlock extends FlowGraphBinaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeAny, RichTypeAny, (a, b) => this._polymorphicMax(a, b), FlowGraphBlockNames.Max, config);\r\n }\r\n\r\n private _polymorphicMax(a: FlowGraphMathOperationType, b: FlowGraphMathOperationType) {\r\n return ComponentWiseBinaryOperation(a, b, Math.max);\r\n }\r\n}\r\n\r\nfunction Clamp(a: number, b: number, c: number) {\r\n return Math.min(Math.max(a, Math.min(b, c)), Math.max(b, c));\r\n}\r\n\r\nfunction ComponentWiseTernaryOperation(\r\n a: FlowGraphMathOperationType,\r\n b: FlowGraphMathOperationType,\r\n c: FlowGraphMathOperationType,\r\n op: (a: number, b: number, c: number) => number\r\n) {\r\n const aClassName = _GetClassNameOf(a);\r\n switch (aClassName) {\r\n case \"FlowGraphInteger\":\r\n a = a as FlowGraphInteger;\r\n b = b as FlowGraphInteger;\r\n c = c as FlowGraphInteger;\r\n return new FlowGraphInteger(op(a.value, b.value, c.value));\r\n case FlowGraphTypes.Vector2:\r\n a = a as Vector2;\r\n b = b as Vector2;\r\n c = c as Vector2;\r\n return new Vector2(op(a.x, b.x, c.x), op(a.y, b.y, c.y));\r\n case FlowGraphTypes.Vector3:\r\n a = a as Vector3;\r\n b = b as Vector3;\r\n c = c as Vector3;\r\n return new Vector3(op(a.x, b.x, c.x), op(a.y, b.y, c.y), op(a.z, b.z, c.z));\r\n case FlowGraphTypes.Vector4:\r\n a = a as Vector4;\r\n b = b as Vector4;\r\n c = c as Vector4;\r\n return new Vector4(op(a.x, b.x, c.x), op(a.y, b.y, c.y), op(a.z, b.z, c.z), op(a.w, b.w, c.w));\r\n case FlowGraphTypes.Quaternion:\r\n a = a as Quaternion;\r\n b = b as Quaternion;\r\n c = c as Quaternion;\r\n return new Quaternion(op(a.x, b.x, c.x), op(a.y, b.y, c.y), op(a.z, b.z, c.z), op(a.w, b.w, c.w));\r\n case FlowGraphTypes.Matrix:\r\n return Matrix.FromArray((a as Matrix).m.map((v, i) => op(v, (b as Matrix).m[i], (c as Matrix).m[i])));\r\n case FlowGraphTypes.Matrix2D:\r\n return new FlowGraphMatrix2D((a as FlowGraphMatrix2D).m.map((v, i) => op(v, (b as FlowGraphMatrix2D).m[i], (c as FlowGraphMatrix2D).m[i])));\r\n case FlowGraphTypes.Matrix3D:\r\n return new FlowGraphMatrix3D((a as FlowGraphMatrix3D).m.map((v, i) => op(v, (b as FlowGraphMatrix3D).m[i], (c as FlowGraphMatrix3D).m[i])));\r\n default:\r\n return op(getNumericValue(a as number), getNumericValue(b as number), getNumericValue(c as number));\r\n }\r\n}\r\n\r\n/**\r\n * Clamp block.\r\n */\r\nexport class FlowGraphClampBlock extends FlowGraphTernaryOperationBlock<\r\n FlowGraphMathOperationType,\r\n FlowGraphMathOperationType,\r\n FlowGraphMathOperationType,\r\n FlowGraphMathOperationType\r\n> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeAny, RichTypeAny, RichTypeAny, (a, b, c) => this._polymorphicClamp(a, b, c), FlowGraphBlockNames.Clamp, config);\r\n }\r\n\r\n private _polymorphicClamp(a: FlowGraphMathOperationType, b: FlowGraphMathOperationType, c: FlowGraphMathOperationType) {\r\n return ComponentWiseTernaryOperation(a, b, c, Clamp);\r\n }\r\n}\r\n\r\nfunction Saturate(a: number): number {\r\n return Math.min(Math.max(a, 0), 1);\r\n}\r\n\r\n/**\r\n * Saturate block.\r\n */\r\nexport class FlowGraphSaturateBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeAny, (a) => this._polymorphicSaturate(a), FlowGraphBlockNames.Saturate, config);\r\n }\r\n\r\n private _polymorphicSaturate(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Saturate);\r\n }\r\n}\r\n\r\nfunction Interpolate(a: number, b: number, c: number) {\r\n return (1 - c) * a + c * b;\r\n}\r\n\r\n/**\r\n * Smooth step (Hermite interpolation) coefficient.\r\n * Given the edges `a`/`b` and the value `c`, computes the smooth interpolation\r\n * coefficient `t * t * (3 - 2 * t)` where `t = saturate((c - min(a, b)) / |b - a|)`.\r\n * Note that this returns the coefficient in [0, 1]; it does not interpolate between `a` and `b`.\r\n * @param a first edge\r\n * @param b second edge\r\n * @param c value to interpolate\r\n * @returns the smooth-step interpolation coefficient\r\n */\r\nfunction SmoothStep(a: number, b: number, c: number) {\r\n // Degenerate edges: with a === b the transition is instantaneous, so return a step rather than\r\n // dividing by zero (which would yield NaN and poison downstream math).\r\n if (a === b) {\r\n return c < a ? 0 : 1;\r\n }\r\n const t = Saturate((c - Math.min(a, b)) / Math.abs(b - a));\r\n return t * t * (3 - 2 * t);\r\n}\r\n\r\n/**\r\n * Interpolate block.\r\n */\r\nexport class FlowGraphMathInterpolationBlock extends FlowGraphTernaryOperationBlock<\r\n FlowGraphMathOperationType,\r\n FlowGraphMathOperationType,\r\n FlowGraphMathOperationType,\r\n FlowGraphMathOperationType\r\n> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeAny, RichTypeAny, RichTypeAny, (a, b, c) => this._polymorphicInterpolate(a, b, c), FlowGraphBlockNames.MathInterpolation, config);\r\n }\r\n\r\n private _polymorphicInterpolate(a: FlowGraphMathOperationType, b: FlowGraphMathOperationType, c: FlowGraphMathOperationType) {\r\n return ComponentWiseTernaryOperation(a, b, c, Interpolate);\r\n }\r\n}\r\n\r\n/**\r\n * Spherical linear interpolation between two unit quaternions, matching the\r\n * quaternion slerp operation. The two inputs are treated as\r\n * Babylon `Quaternion` values regardless of their concrete class (the spec\r\n * defines them as `float4`), and the output is a `Quaternion`.\r\n *\r\n * The underlying implementation is `Quaternion.Slerp`, whose algorithm matches\r\n * the spec step-for-step (dot product, conditional sign-flip on `b`, sin-based\r\n * weighting, and a near-identity short-circuit to a linear blend).\r\n */\r\nexport class FlowGraphMathSlerpBlock extends FlowGraphTernaryOperationBlock<Quaternion, Quaternion, number, Quaternion> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeAny, RichTypeNumber, RichTypeAny, (a, b, c) => Quaternion.Slerp(a, b, c), FlowGraphBlockNames.MathSlerp, config);\r\n }\r\n}\r\n\r\n/**\r\n * Smooth-step block, returning the Hermite interpolation coefficient.\r\n * Operates component-wise over floatN inputs (the two edges `a`/`b` and the\r\n * value `c`).\r\n */\r\nexport class FlowGraphMathSmoothStepBlock extends FlowGraphTernaryOperationBlock<\r\n FlowGraphMathOperationType,\r\n FlowGraphMathOperationType,\r\n FlowGraphMathOperationType,\r\n FlowGraphMathOperationType\r\n> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeAny, RichTypeAny, RichTypeAny, (a, b, c) => this._polymorphicSmoothStep(a, b, c), FlowGraphBlockNames.SmoothStep, config);\r\n }\r\n\r\n private _polymorphicSmoothStep(a: FlowGraphMathOperationType, b: FlowGraphMathOperationType, c: FlowGraphMathOperationType) {\r\n return ComponentWiseTernaryOperation(a, b, c, SmoothStep);\r\n }\r\n}\r\n\r\n/**\r\n * Equals block.\r\n */\r\nexport class FlowGraphEqualityBlock extends FlowGraphBinaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType, boolean> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeAny, RichTypeBoolean, (a, b) => this._polymorphicEq(a, b), FlowGraphBlockNames.Equality, config);\r\n }\r\n\r\n private _polymorphicEq(a: FlowGraphMathOperationType, b: FlowGraphMathOperationType) {\r\n const aClassName = _GetClassNameOf(a);\r\n const bClassName = _GetClassNameOf(b);\r\n // A rotation may arrive either as a Quaternion or as a four-component vector, so treat Quaternion and\r\n // Vector4 (both four-component) as comparable so that, for example, a decomposed rotation can be compared\r\n // against a float4 literal.\r\n const isFourComponent = (className?: string) => className === FlowGraphTypes.Vector4 || className === FlowGraphTypes.Quaternion;\r\n if (isFourComponent(aClassName) && isFourComponent(bClassName)) {\r\n return (a as Vector4).equals(b as Vector4);\r\n }\r\n if (_AreSameVectorOrQuaternionClass(aClassName, bClassName) || _AreSameMatrixClass(aClassName, bClassName) || _AreSameIntegerClass(aClassName, bClassName)) {\r\n return (a as Vector3).equals(b as Vector3);\r\n }\r\n // Handle mixed number/FlowGraphInteger comparison\r\n if (isNumeric(a) && isNumeric(b)) {\r\n return getNumericValue(a as FlowGraphNumber) === getNumericValue(b as FlowGraphNumber);\r\n }\r\n if (typeof a !== typeof b) {\r\n return false;\r\n }\r\n return a === b;\r\n }\r\n}\r\n\r\nfunction ComparisonOperators(a: FlowGraphNumber, b: FlowGraphNumber, op: (a: number, b: number) => boolean) {\r\n if (isNumeric(a) && isNumeric(b)) {\r\n return op(getNumericValue(a), getNumericValue(b));\r\n } else {\r\n throw new Error(`Cannot compare ${a} and ${b}`);\r\n }\r\n}\r\n\r\n/**\r\n * Less than block.\r\n */\r\nexport class FlowGraphLessThanBlock extends FlowGraphBinaryOperationBlock<FlowGraphNumber, FlowGraphNumber, boolean> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeAny, RichTypeBoolean, (a, b) => this._polymorphicLessThan(a, b), FlowGraphBlockNames.LessThan, config);\r\n }\r\n\r\n private _polymorphicLessThan(a: FlowGraphNumber, b: FlowGraphNumber) {\r\n return ComparisonOperators(a, b, (a, b) => a < b);\r\n }\r\n}\r\n\r\n/**\r\n * Less than or equal block.\r\n */\r\nexport class FlowGraphLessThanOrEqualBlock extends FlowGraphBinaryOperationBlock<FlowGraphNumber, FlowGraphNumber, boolean> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeAny, RichTypeBoolean, (a, b) => this._polymorphicLessThanOrEqual(a, b), FlowGraphBlockNames.LessThanOrEqual, config);\r\n }\r\n\r\n private _polymorphicLessThanOrEqual(a: FlowGraphNumber, b: FlowGraphNumber) {\r\n return ComparisonOperators(a, b, (a, b) => a <= b);\r\n }\r\n}\r\n\r\n/**\r\n * Greater than block.\r\n */\r\nexport class FlowGraphGreaterThanBlock extends FlowGraphBinaryOperationBlock<FlowGraphNumber, FlowGraphNumber, boolean> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeAny, RichTypeBoolean, (a, b) => this._polymorphicGreaterThan(a, b), FlowGraphBlockNames.GreaterThan, config);\r\n }\r\n\r\n private _polymorphicGreaterThan(a: FlowGraphNumber, b: FlowGraphNumber) {\r\n return ComparisonOperators(a, b, (a, b) => a > b);\r\n }\r\n}\r\n\r\n/**\r\n * Greater than or equal block.\r\n */\r\nexport class FlowGraphGreaterThanOrEqualBlock extends FlowGraphBinaryOperationBlock<FlowGraphNumber, FlowGraphNumber, boolean> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeAny, RichTypeBoolean, (a, b) => this._polymorphicGreaterThanOrEqual(a, b), FlowGraphBlockNames.GreaterThanOrEqual, config);\r\n }\r\n\r\n private _polymorphicGreaterThanOrEqual(a: FlowGraphNumber, b: FlowGraphNumber) {\r\n return ComparisonOperators(a, b, (a, b) => a >= b);\r\n }\r\n}\r\n\r\n/**\r\n * Is NaN block.\r\n */\r\nexport class FlowGraphIsNanBlock extends FlowGraphUnaryOperationBlock<FlowGraphNumber, boolean> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeBoolean, (a) => this._polymorphicIsNan(a), FlowGraphBlockNames.IsNaN, config);\r\n }\r\n\r\n private _polymorphicIsNan(a: FlowGraphNumber) {\r\n if (isNumeric(a, true)) {\r\n return isNaN(getNumericValue(a));\r\n } else {\r\n throw new Error(`Cannot get NaN of ${a}`);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Is Inf block.\r\n */\r\nexport class FlowGraphIsInfinityBlock extends FlowGraphUnaryOperationBlock<FlowGraphNumber, boolean> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeBoolean, (a) => this._polymorphicIsInf(a), FlowGraphBlockNames.IsInfinity, config);\r\n }\r\n\r\n private _polymorphicIsInf(a: FlowGraphNumber) {\r\n if (isNumeric(a)) {\r\n return !isFinite(getNumericValue(a));\r\n } else {\r\n throw new Error(`Cannot get isInf of ${a}`);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Convert degrees to radians block.\r\n */\r\nexport class FlowGraphDegToRadBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n /**\r\n * Constructs a new instance of the flow graph math block.\r\n * @param config - Optional configuration for the flow graph block.\r\n */\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeAny, (a) => this._polymorphicDegToRad(a), FlowGraphBlockNames.DegToRad, config);\r\n }\r\n\r\n private _degToRad(a: number) {\r\n return (a * Math.PI) / 180;\r\n }\r\n\r\n private _polymorphicDegToRad(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, this._degToRad);\r\n }\r\n}\r\n\r\n/**\r\n * Convert radians to degrees block.\r\n */\r\nexport class FlowGraphRadToDegBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeAny, (a) => this._polymorphicRadToDeg(a), FlowGraphBlockNames.RadToDeg, config);\r\n }\r\n\r\n private _radToDeg(a: number) {\r\n return (a * 180) / Math.PI;\r\n }\r\n\r\n private _polymorphicRadToDeg(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, this._radToDeg);\r\n }\r\n}\r\n\r\n/**\r\n * Sin block.\r\n */\r\nexport class FlowGraphSinBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeNumber, RichTypeNumber, (a) => this._polymorphicSin(a), FlowGraphBlockNames.Sin, config);\r\n }\r\n\r\n private _polymorphicSin(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Math.sin);\r\n }\r\n}\r\n\r\n/**\r\n * Cos block.\r\n */\r\nexport class FlowGraphCosBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeNumber, RichTypeNumber, (a) => this._polymorphicCos(a), FlowGraphBlockNames.Cos, config);\r\n }\r\n\r\n private _polymorphicCos(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Math.cos);\r\n }\r\n}\r\n\r\n/**\r\n * Tan block.\r\n */\r\nexport class FlowGraphTanBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeNumber, RichTypeNumber, (a) => this._polymorphicTan(a), FlowGraphBlockNames.Tan, config);\r\n }\r\n\r\n private _polymorphicTan(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Math.tan);\r\n }\r\n}\r\n\r\n/**\r\n * Arcsin block.\r\n */\r\nexport class FlowGraphAsinBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeNumber, RichTypeNumber, (a) => this._polymorphicAsin(a), FlowGraphBlockNames.Asin, config);\r\n }\r\n\r\n private _polymorphicAsin(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Math.asin);\r\n }\r\n}\r\n\r\n/**\r\n * Arccos block.\r\n */\r\nexport class FlowGraphAcosBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeNumber, RichTypeNumber, (a) => this._polymorphicAcos(a), FlowGraphBlockNames.Acos, config);\r\n }\r\n\r\n private _polymorphicAcos(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Math.acos);\r\n }\r\n}\r\n\r\n/**\r\n * Arctan block.\r\n */\r\nexport class FlowGraphAtanBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeNumber, RichTypeNumber, (a) => this._polymorphicAtan(a), FlowGraphBlockNames.Atan, config);\r\n }\r\n\r\n private _polymorphicAtan(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Math.atan);\r\n }\r\n}\r\n\r\n/**\r\n * Arctan2 block.\r\n */\r\nexport class FlowGraphAtan2Block extends FlowGraphBinaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeAny, RichTypeAny, (a, b) => this._polymorphicAtan2(a, b), FlowGraphBlockNames.Atan2, config);\r\n }\r\n\r\n private _polymorphicAtan2(a: any, b: any) {\r\n return ComponentWiseBinaryOperation(a, b, Math.atan2);\r\n }\r\n}\r\n\r\n/**\r\n * Hyperbolic sin block.\r\n */\r\nexport class FlowGraphSinhBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeAny, (a) => this._polymorphicSinh(a), FlowGraphBlockNames.Sinh, config);\r\n }\r\n\r\n private _polymorphicSinh(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Math.sinh);\r\n }\r\n}\r\n\r\n/**\r\n * Hyperbolic cos block.\r\n */\r\nexport class FlowGraphCoshBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeAny, (a) => this._polymorphicCosh(a), FlowGraphBlockNames.Cosh, config);\r\n }\r\n\r\n private _polymorphicCosh(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Math.cosh);\r\n }\r\n}\r\n\r\n/**\r\n * Hyperbolic tan block.\r\n */\r\nexport class FlowGraphTanhBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeAny, (a) => this._polymorphicTanh(a), FlowGraphBlockNames.Tanh, config);\r\n }\r\n\r\n private _polymorphicTanh(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Math.tanh);\r\n }\r\n}\r\n\r\n/**\r\n * Hyperbolic arcsin block.\r\n */\r\nexport class FlowGraphAsinhBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeNumber, (a) => this._polymorphicAsinh(a), FlowGraphBlockNames.Asinh, config);\r\n }\r\n\r\n private _polymorphicAsinh(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Math.asinh);\r\n }\r\n}\r\n\r\n/**\r\n * Hyperbolic arccos block.\r\n */\r\nexport class FlowGraphAcoshBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeNumber, (a) => this._polymorphicAcosh(a), FlowGraphBlockNames.Acosh, config);\r\n }\r\n\r\n private _polymorphicAcosh(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Math.acosh);\r\n }\r\n}\r\n\r\n/**\r\n * Hyperbolic arctan block.\r\n */\r\nexport class FlowGraphAtanhBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeNumber, (a) => this._polymorphicAtanh(a), FlowGraphBlockNames.Atanh, config);\r\n }\r\n\r\n private _polymorphicAtanh(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Math.atanh);\r\n }\r\n}\r\n\r\n/**\r\n * Exponential block.\r\n */\r\nexport class FlowGraphExpBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeNumber, (a) => this._polymorphicExp(a), FlowGraphBlockNames.Exponential, config);\r\n }\r\n\r\n private _polymorphicExp(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Math.exp);\r\n }\r\n}\r\n\r\n/**\r\n * Logarithm block.\r\n */\r\nexport class FlowGraphLogBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeNumber, (a) => this._polymorphicLog(a), FlowGraphBlockNames.Log, config);\r\n }\r\n\r\n private _polymorphicLog(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Math.log);\r\n }\r\n}\r\n\r\n/**\r\n * Base 2 logarithm block.\r\n */\r\nexport class FlowGraphLog2Block extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeNumber, (a) => this._polymorphicLog2(a), FlowGraphBlockNames.Log2, config);\r\n }\r\n\r\n private _polymorphicLog2(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Math.log2);\r\n }\r\n}\r\n\r\n/**\r\n * Base 10 logarithm block.\r\n */\r\nexport class FlowGraphLog10Block extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeNumber, (a) => this._polymorphicLog10(a), FlowGraphBlockNames.Log10, config);\r\n }\r\n\r\n private _polymorphicLog10(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Math.log10);\r\n }\r\n}\r\n\r\n/**\r\n * Square root block.\r\n */\r\nexport class FlowGraphSquareRootBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeNumber, (a) => this._polymorphicSqrt(a), FlowGraphBlockNames.SquareRoot, config);\r\n }\r\n\r\n private _polymorphicSqrt(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Math.sqrt);\r\n }\r\n}\r\n\r\n/**\r\n * Cube root block.\r\n */\r\nexport class FlowGraphCubeRootBlock extends FlowGraphUnaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeNumber, (a) => this._polymorphicCubeRoot(a), FlowGraphBlockNames.CubeRoot, config);\r\n }\r\n\r\n private _polymorphicCubeRoot(a: FlowGraphMathOperationType) {\r\n return ComponentWiseUnaryOperation(a, Math.cbrt);\r\n }\r\n}\r\n\r\n/**\r\n * Power block.\r\n */\r\nexport class FlowGraphPowerBlock extends FlowGraphBinaryOperationBlock<FlowGraphMathOperationType, FlowGraphMathOperationType, FlowGraphMathOperationType> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeAny, RichTypeNumber, RichTypeNumber, (a, b) => this._polymorphicPow(a, b), FlowGraphBlockNames.Power, config);\r\n }\r\n\r\n private _polymorphicPow(a: FlowGraphMathOperationType, b: FlowGraphMathOperationType) {\r\n return ComponentWiseBinaryOperation(a, b, Math.pow);\r\n }\r\n}\r\n\r\n/**\r\n * Configuration for bitwise operators\r\n */\r\nexport interface IFlowGraphBitwiseBlockConfiguration extends IFlowGraphBlockConfiguration {\r\n /**\r\n * The type of the values that will be operated on\r\n * Defaults to FlowGraphInteger, but can be a number or boolean as well.\r\n */\r\n valueType: FlowGraphTypes;\r\n}\r\n\r\ntype FlowGraphBitwiseTypes = FlowGraphInteger | FlowGraphNumber | boolean;\r\n/**\r\n * Bitwise NOT operation\r\n */\r\nexport class FlowGraphBitwiseNotBlock extends FlowGraphUnaryOperationBlock<FlowGraphBitwiseTypes, FlowGraphBitwiseTypes> {\r\n constructor(config?: IFlowGraphBitwiseBlockConfiguration) {\r\n super(\r\n getRichTypeByFlowGraphType(config?.valueType || FlowGraphTypes.Integer),\r\n getRichTypeByFlowGraphType(config?.valueType || FlowGraphTypes.Integer),\r\n (a) => {\r\n if (typeof a === \"boolean\") {\r\n return !a;\r\n } else if (typeof a === \"number\") {\r\n return ~a;\r\n }\r\n return new FlowGraphInteger(~a.value);\r\n },\r\n FlowGraphBlockNames.BitwiseNot,\r\n config\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Bitwise AND operation\r\n */\r\nexport class FlowGraphBitwiseAndBlock extends FlowGraphBinaryOperationBlock<FlowGraphBitwiseTypes, FlowGraphBitwiseTypes, FlowGraphBitwiseTypes> {\r\n constructor(config?: IFlowGraphBitwiseBlockConfiguration) {\r\n super(\r\n getRichTypeByFlowGraphType(config?.valueType || FlowGraphTypes.Integer),\r\n getRichTypeByFlowGraphType(config?.valueType || FlowGraphTypes.Integer),\r\n getRichTypeByFlowGraphType(config?.valueType || FlowGraphTypes.Integer),\r\n (a, b) => {\r\n if (typeof a === \"boolean\" && typeof b === \"boolean\") {\r\n return a && b;\r\n } else if (typeof a === \"number\" && typeof b === \"number\") {\r\n return a & b;\r\n } else if (typeof a === \"object\" && typeof b === \"object\") {\r\n return new FlowGraphInteger(a.value & b.value);\r\n } else {\r\n throw new Error(`Cannot perform bitwise AND on ${a} and ${b}`);\r\n }\r\n },\r\n FlowGraphBlockNames.BitwiseAnd,\r\n config\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Bitwise OR operation\r\n */\r\nexport class FlowGraphBitwiseOrBlock extends FlowGraphBinaryOperationBlock<FlowGraphBitwiseTypes, FlowGraphBitwiseTypes, FlowGraphBitwiseTypes> {\r\n constructor(config?: IFlowGraphBitwiseBlockConfiguration) {\r\n super(\r\n getRichTypeByFlowGraphType(config?.valueType || FlowGraphTypes.Integer),\r\n getRichTypeByFlowGraphType(config?.valueType || FlowGraphTypes.Integer),\r\n getRichTypeByFlowGraphType(config?.valueType || FlowGraphTypes.Integer),\r\n (a, b) => {\r\n if (typeof a === \"boolean\" && typeof b === \"boolean\") {\r\n return a || b;\r\n } else if (typeof a === \"number\" && typeof b === \"number\") {\r\n return a | b;\r\n } else if (typeof a === \"object\" && typeof b === \"object\") {\r\n return new FlowGraphInteger(a.value | b.value);\r\n } else {\r\n throw new Error(`Cannot perform bitwise OR on ${a} and ${b}`);\r\n }\r\n },\r\n FlowGraphBlockNames.BitwiseOr,\r\n config\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Bitwise XOR operation\r\n */\r\nexport class FlowGraphBitwiseXorBlock extends FlowGraphBinaryOperationBlock<FlowGraphBitwiseTypes, FlowGraphBitwiseTypes, FlowGraphBitwiseTypes> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(\r\n getRichTypeByFlowGraphType(config?.valueType || FlowGraphTypes.Integer),\r\n getRichTypeByFlowGraphType(config?.valueType || FlowGraphTypes.Integer),\r\n getRichTypeByFlowGraphType(config?.valueType || FlowGraphTypes.Integer),\r\n (a, b) => {\r\n if (typeof a === \"boolean\" && typeof b === \"boolean\") {\r\n return a !== b;\r\n } else if (typeof a === \"number\" && typeof b === \"number\") {\r\n return a ^ b;\r\n } else if (typeof a === \"object\" && typeof b === \"object\") {\r\n return new FlowGraphInteger(a.value ^ b.value);\r\n } else {\r\n throw new Error(`Cannot perform bitwise XOR on ${a} and ${b}`);\r\n }\r\n },\r\n FlowGraphBlockNames.BitwiseXor,\r\n config\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Bitwise left shift operation\r\n */\r\nexport class FlowGraphBitwiseLeftShiftBlock extends FlowGraphBinaryOperationBlock<FlowGraphInteger, FlowGraphInteger, FlowGraphInteger> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(\r\n RichTypeFlowGraphInteger,\r\n RichTypeFlowGraphInteger,\r\n RichTypeFlowGraphInteger,\r\n (a, b) => new FlowGraphInteger(a.value << b.value),\r\n FlowGraphBlockNames.BitwiseLeftShift,\r\n config\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Bitwise right shift operation\r\n */\r\nexport class FlowGraphBitwiseRightShiftBlock extends FlowGraphBinaryOperationBlock<FlowGraphInteger, FlowGraphInteger, FlowGraphInteger> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(\r\n RichTypeFlowGraphInteger,\r\n RichTypeFlowGraphInteger,\r\n RichTypeFlowGraphInteger,\r\n (a, b) => new FlowGraphInteger(a.value >> b.value),\r\n FlowGraphBlockNames.BitwiseRightShift,\r\n config\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Count leading zeros operation\r\n */\r\nexport class FlowGraphLeadingZerosBlock extends FlowGraphUnaryOperationBlock<FlowGraphInteger, FlowGraphInteger> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeFlowGraphInteger, RichTypeFlowGraphInteger, (a) => new FlowGraphInteger(Math.clz32(a.value)), FlowGraphBlockNames.LeadingZeros, config);\r\n }\r\n}\r\n\r\n/**\r\n * Count trailing zeros operation\r\n */\r\nexport class FlowGraphTrailingZerosBlock extends FlowGraphUnaryOperationBlock<FlowGraphInteger, FlowGraphInteger> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(\r\n RichTypeFlowGraphInteger,\r\n RichTypeFlowGraphInteger,\r\n (a) => new FlowGraphInteger(a.value ? 31 - Math.clz32(a.value & -a.value) : 32),\r\n FlowGraphBlockNames.TrailingZeros,\r\n config\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Given a number (which is converted to a 32-bit integer), return the\r\n * number of bits set to one on that number.\r\n * @param n the number to run the op on\r\n * @returns the number of bits set to one on that number\r\n */\r\nfunction CountOnes(n: number) {\r\n let result = 0;\r\n while (n) {\r\n // This zeroes out all bits except for the least significant one.\r\n // So if the bit is set, it will be 1, otherwise it will be 0.\r\n result += n & 1;\r\n // Unsigned shifting is required so negative int32 values converge to zero.\r\n n >>>= 1;\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Count one bits operation\r\n */\r\nexport class FlowGraphOneBitsCounterBlock extends FlowGraphUnaryOperationBlock<FlowGraphInteger, FlowGraphInteger> {\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(RichTypeFlowGraphInteger, RichTypeFlowGraphInteger, (a) => new FlowGraphInteger(CountOnes(a.value)), FlowGraphBlockNames.OneBitsCounter, config);\r\n }\r\n}\r\n\r\n/**\r\n * Converts a linear sRGB color to OkLCh (the polar form of the Oklab color space).\r\n * Uses Ottosson's original single-precision matrices.\r\n * The RGB inputs are treated as linear; hue is returned in radians.\r\n * @param r linear red component\r\n * @param g linear green component\r\n * @param b linear blue component\r\n * @returns the OkLCh lightness (l), chroma (c) and hue (h, radians)\r\n */\r\nfunction RgbToOkLch(r: number, g: number, b: number): { l: number; c: number; h: number } {\r\n // Linear sRGB -> LMS cone responses.\r\n const long = 0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b;\r\n const medium = 0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b;\r\n const short = 0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b;\r\n // Non-linearity (cube root) then LMS' -> Oklab.\r\n const lRoot = Math.cbrt(long);\r\n const mRoot = Math.cbrt(medium);\r\n const sRoot = Math.cbrt(short);\r\n const okL = 0.2104542553 * lRoot + 0.793617785 * mRoot - 0.0040720468 * sRoot;\r\n const okA = 1.9779984951 * lRoot - 2.428592205 * mRoot + 0.4505937099 * sRoot;\r\n const okB = 0.0259040371 * lRoot + 0.7827717662 * mRoot - 0.808675766 * sRoot;\r\n // Oklab -> OkLCh (polar form).\r\n return { l: okL, c: Math.hypot(okA, okB), h: Math.atan2(okB, okA) };\r\n}\r\n\r\n/**\r\n * Converts an OkLCh color to linear sRGB. Inverse of {@link RgbToOkLch}; hue is in radians.\r\n * @param l OkLCh lightness\r\n * @param c OkLCh chroma\r\n * @param h OkLCh hue in radians\r\n * @returns the linear sRGB red (r), green (g) and blue (b) components\r\n */\r\nfunction OkLchToRgb(l: number, c: number, h: number): { r: number; g: number; b: number } {\r\n // OkLCh -> Oklab.\r\n const okA = c * Math.cos(h);\r\n const okB = c * Math.sin(h);\r\n // Oklab -> LMS' then cube to LMS.\r\n const lPrime = l + 0.3963377774 * okA + 0.2158037573 * okB;\r\n const mPrime = l - 0.1055613458 * okA - 0.0638541728 * okB;\r\n const sPrime = l - 0.0894841775 * okA - 1.291485548 * okB;\r\n const long = lPrime * lPrime * lPrime;\r\n const medium = mPrime * mPrime * mPrime;\r\n const short = sPrime * sPrime * sPrime;\r\n // LMS -> linear sRGB.\r\n return {\r\n r: 4.0767416621 * long - 3.3077115913 * medium + 0.2309699292 * short,\r\n g: -1.2684380046 * long + 2.6097574011 * medium - 0.3413193965 * short,\r\n b: -0.0041960863 * long - 0.7034186147 * medium + 1.707614701 * short,\r\n };\r\n}\r\n\r\n/**\r\n * Block that converts a linear sRGB color (r, g, b) to OkLCh (l, c, h). Hue is in radians.\r\n */\r\nexport class FlowGraphRGBToOkLChBlock extends FlowGraphBlock {\r\n /**\r\n * Input connection: the linear red component.\r\n */\r\n public readonly r: FlowGraphDataConnection<number>;\r\n /**\r\n * Input connection: the linear green component.\r\n */\r\n public readonly g: FlowGraphDataConnection<number>;\r\n /**\r\n * Input connection: the linear blue component.\r\n */\r\n public readonly b: FlowGraphDataConnection<number>;\r\n /**\r\n * Output connection: the OkLCh lightness.\r\n */\r\n public readonly l: FlowGraphDataConnection<number>;\r\n /**\r\n * Output connection: the OkLCh chroma.\r\n */\r\n public readonly c: FlowGraphDataConnection<number>;\r\n /**\r\n * Output connection: the OkLCh hue, in radians.\r\n */\r\n public readonly h: FlowGraphDataConnection<number>;\r\n\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(config);\r\n this.r = this.registerDataInput(\"r\", RichTypeNumber, 0);\r\n this.g = this.registerDataInput(\"g\", RichTypeNumber, 0);\r\n this.b = this.registerDataInput(\"b\", RichTypeNumber, 0);\r\n this.l = this.registerDataOutput(\"l\", RichTypeNumber, 0);\r\n this.c = this.registerDataOutput(\"c\", RichTypeNumber, 0);\r\n this.h = this.registerDataOutput(\"h\", RichTypeNumber, 0);\r\n }\r\n\r\n public override _updateOutputs(context: FlowGraphContext): void {\r\n const { l, c, h } = RgbToOkLch(this.r.getValue(context), this.g.getValue(context), this.b.getValue(context));\r\n this.l.setValue(l, context);\r\n this.c.setValue(c, context);\r\n this.h.setValue(h, context);\r\n }\r\n\r\n public override getClassName(): string {\r\n return FlowGraphBlockNames.RGBToOkLCh;\r\n }\r\n}\r\n\r\n/**\r\n * Block that converts an OkLCh color (l, c, h) to linear sRGB (r, g, b). Hue is in radians.\r\n */\r\nexport class FlowGraphRGBFromOkLChBlock extends FlowGraphBlock {\r\n /**\r\n * Input connection: the OkLCh lightness.\r\n */\r\n public readonly l: FlowGraphDataConnection<number>;\r\n /**\r\n * Input connection: the OkLCh chroma.\r\n */\r\n public readonly c: FlowGraphDataConnection<number>;\r\n /**\r\n * Input connection: the OkLCh hue, in radians.\r\n */\r\n public readonly h: FlowGraphDataConnection<number>;\r\n /**\r\n * Output connection: the linear red component.\r\n */\r\n public readonly r: FlowGraphDataConnection<number>;\r\n /**\r\n * Output connection: the linear green component.\r\n */\r\n public readonly g: FlowGraphDataConnection<number>;\r\n /**\r\n * Output connection: the linear blue component.\r\n */\r\n public readonly b: FlowGraphDataConnection<number>;\r\n\r\n constructor(config?: IFlowGraphBlockConfiguration) {\r\n super(config);\r\n this.l = this.registerDataInput(\"l\", RichTypeNumber, 0);\r\n this.c = this.registerDataInput(\"c\", RichTypeNumber, 0);\r\n this.h = this.registerDataInput(\"h\", RichTypeNumber, 0);\r\n this.r = this.registerDataOutput(\"r\", RichTypeNumber, 0);\r\n this.g = this.registerDataOutput(\"g\", RichTypeNumber, 0);\r\n this.b = this.registerDataOutput(\"b\", RichTypeNumber, 0);\r\n }\r\n\r\n public override _updateOutputs(context: FlowGraphContext): void {\r\n const { r, g, b } = OkLchToRgb(this.l.getValue(context), this.c.getValue(context), this.h.getValue(context));\r\n this.r.setValue(r, context);\r\n this.g.setValue(g, context);\r\n this.b.setValue(b, context);\r\n }\r\n\r\n public override getClassName(): string {\r\n return FlowGraphBlockNames.RGBFromOkLCh;\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register side effects for flowGraphMathBlocks.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterFlowGraphMathBlocks(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterClass(FlowGraphBlockNames.Add, FlowGraphAddBlock);\r\n RegisterClass(FlowGraphBlockNames.Subtract, FlowGraphSubtractBlock);\r\n RegisterClass(FlowGraphBlockNames.Multiply, FlowGraphMultiplyBlock);\r\n RegisterClass(FlowGraphBlockNames.Divide, FlowGraphDivideBlock);\r\n RegisterClass(FlowGraphBlockNames.Random, FlowGraphRandomBlock);\r\n RegisterClass(FlowGraphBlockNames.E, FlowGraphEBlock);\r\n RegisterClass(FlowGraphBlockNames.PI, FlowGraphPiBlock);\r\n RegisterClass(FlowGraphBlockNames.Tau, FlowGraphTauBlock);\r\n RegisterClass(FlowGraphBlockNames.Inf, FlowGraphInfBlock);\r\n RegisterClass(FlowGraphBlockNames.NaN, FlowGraphNaNBlock);\r\n RegisterClass(FlowGraphBlockNames.Abs, FlowGraphAbsBlock);\r\n RegisterClass(FlowGraphBlockNames.Sign, FlowGraphSignBlock);\r\n RegisterClass(FlowGraphBlockNames.Trunc, FlowGraphTruncBlock);\r\n RegisterClass(FlowGraphBlockNames.Floor, FlowGraphFloorBlock);\r\n RegisterClass(FlowGraphBlockNames.Ceil, FlowGraphCeilBlock);\r\n RegisterClass(FlowGraphBlockNames.Round, FlowGraphRoundBlock);\r\n RegisterClass(FlowGraphBlockNames.Fraction, FlowGraphFractionBlock);\r\n RegisterClass(FlowGraphBlockNames.Negation, FlowGraphNegationBlock);\r\n RegisterClass(FlowGraphBlockNames.Modulo, FlowGraphModuloBlock);\r\n RegisterClass(FlowGraphBlockNames.Min, FlowGraphMinBlock);\r\n RegisterClass(FlowGraphBlockNames.Max, FlowGraphMaxBlock);\r\n RegisterClass(FlowGraphBlockNames.Clamp, FlowGraphClampBlock);\r\n RegisterClass(FlowGraphBlockNames.Saturate, FlowGraphSaturateBlock);\r\n RegisterClass(FlowGraphBlockNames.MathInterpolation, FlowGraphMathInterpolationBlock);\r\n RegisterClass(FlowGraphBlockNames.MathSlerp, FlowGraphMathSlerpBlock);\r\n RegisterClass(FlowGraphBlockNames.SmoothStep, FlowGraphMathSmoothStepBlock);\r\n RegisterClass(FlowGraphBlockNames.RGBToOkLCh, FlowGraphRGBToOkLChBlock);\r\n RegisterClass(FlowGraphBlockNames.RGBFromOkLCh, FlowGraphRGBFromOkLChBlock);\r\n RegisterClass(FlowGraphBlockNames.Equality, FlowGraphEqualityBlock);\r\n RegisterClass(FlowGraphBlockNames.LessThan, FlowGraphLessThanBlock);\r\n RegisterClass(FlowGraphBlockNames.LessThanOrEqual, FlowGraphLessThanOrEqualBlock);\r\n RegisterClass(FlowGraphBlockNames.GreaterThan, FlowGraphGreaterThanBlock);\r\n RegisterClass(FlowGraphBlockNames.GreaterThanOrEqual, FlowGraphGreaterThanOrEqualBlock);\r\n RegisterClass(FlowGraphBlockNames.IsNaN, FlowGraphIsNanBlock);\r\n RegisterClass(FlowGraphBlockNames.IsInfinity, FlowGraphIsInfinityBlock);\r\n RegisterClass(FlowGraphBlockNames.DegToRad, FlowGraphDegToRadBlock);\r\n RegisterClass(FlowGraphBlockNames.RadToDeg, FlowGraphRadToDegBlock);\r\n RegisterClass(FlowGraphBlockNames.Asin, FlowGraphAsinBlock);\r\n RegisterClass(FlowGraphBlockNames.Acos, FlowGraphAcosBlock);\r\n RegisterClass(FlowGraphBlockNames.Atan, FlowGraphAtanBlock);\r\n RegisterClass(FlowGraphBlockNames.Atan2, FlowGraphAtan2Block);\r\n RegisterClass(FlowGraphBlockNames.Sinh, FlowGraphSinhBlock);\r\n RegisterClass(FlowGraphBlockNames.Cosh, FlowGraphCoshBlock);\r\n RegisterClass(FlowGraphBlockNames.Tanh, FlowGraphTanhBlock);\r\n RegisterClass(FlowGraphBlockNames.Asinh, FlowGraphAsinhBlock);\r\n RegisterClass(FlowGraphBlockNames.Acosh, FlowGraphAcoshBlock);\r\n RegisterClass(FlowGraphBlockNames.Atanh, FlowGraphAtanhBlock);\r\n RegisterClass(FlowGraphBlockNames.Exponential, FlowGraphExpBlock);\r\n RegisterClass(FlowGraphBlockNames.Log, FlowGraphLogBlock);\r\n RegisterClass(FlowGraphBlockNames.Log2, FlowGraphLog2Block);\r\n RegisterClass(FlowGraphBlockNames.Log10, FlowGraphLog10Block);\r\n RegisterClass(FlowGraphBlockNames.SquareRoot, FlowGraphSquareRootBlock);\r\n RegisterClass(FlowGraphBlockNames.CubeRoot, FlowGraphCubeRootBlock);\r\n RegisterClass(FlowGraphBlockNames.Power, FlowGraphPowerBlock);\r\n RegisterClass(FlowGraphBlockNames.BitwiseNot, FlowGraphBitwiseNotBlock);\r\n RegisterClass(FlowGraphBlockNames.BitwiseAnd, FlowGraphBitwiseAndBlock);\r\n RegisterClass(FlowGraphBlockNames.BitwiseOr, FlowGraphBitwiseOrBlock);\r\n RegisterClass(FlowGraphBlockNames.BitwiseXor, FlowGraphBitwiseXorBlock);\r\n RegisterClass(FlowGraphBlockNames.BitwiseLeftShift, FlowGraphBitwiseLeftShiftBlock);\r\n RegisterClass(FlowGraphBlockNames.BitwiseRightShift, FlowGraphBitwiseRightShiftBlock);\r\n RegisterClass(FlowGraphBlockNames.LeadingZeros, FlowGraphLeadingZerosBlock);\r\n RegisterClass(FlowGraphBlockNames.TrailingZeros, FlowGraphTrailingZerosBlock);\r\n RegisterClass(FlowGraphBlockNames.OneBitsCounter, FlowGraphOneBitsCounterBlock);\r\n}\r\n"]}
@@ -4,11 +4,20 @@ import { type FlowGraphContext } from "../../../flowGraphContext.js";
4
4
  import { type FlowGraphDataConnection } from "../../../flowGraphDataConnection.pure.js";
5
5
  import { type FlowGraphNumber } from "../../../utils.js";
6
6
  import { type Nullable } from "../../../../types.js";
7
+ /**
8
+ * Configuration for array-index reference resolution.
9
+ */
10
+ export interface IFlowGraphArrayIndexBlockConfiguration extends IFlowGraphBlockConfiguration {
11
+ /**
12
+ * Optional host collection name required when the index input is an opaque reference.
13
+ */
14
+ referenceCollection?: string;
15
+ }
7
16
  /**
8
17
  * This simple Util block takes an array as input and selects a single element from it.
9
18
  */
10
19
  export declare class FlowGraphArrayIndexBlock<T = any> extends FlowGraphBlock {
11
- config: IFlowGraphBlockConfiguration;
20
+ config: IFlowGraphArrayIndexBlockConfiguration;
12
21
  /**
13
22
  * Input connection: The array to select from.
14
23
  */
@@ -25,7 +34,7 @@ export declare class FlowGraphArrayIndexBlock<T = any> extends FlowGraphBlock {
25
34
  * Construct a FlowGraphArrayIndexBlock.
26
35
  * @param config construction parameters
27
36
  */
28
- constructor(config: IFlowGraphBlockConfiguration);
37
+ constructor(config: IFlowGraphArrayIndexBlockConfiguration);
29
38
  /**
30
39
  * @internal
31
40
  */
@@ -35,7 +35,7 @@ export class FlowGraphArrayIndexBlock extends FlowGraphBlock {
35
35
  // which element the reference denotes.
36
36
  let index;
37
37
  if (typeof rawIndex === "string") {
38
- const decoded = context.decodeIndexReference(rawIndex);
38
+ const decoded = context.decodeIndexReference(rawIndex, this.config.referenceCollection);
39
39
  if (decoded === undefined) {
40
40
  this.value.setValue(null, context);
41
41
  return;