@babylonjs/core 7.52.3 → 7.53.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/AudioV2/abstractAudio/subNodes/abstractAudioSubGraph.d.ts +0 -3
  2. package/AudioV2/abstractAudio/subNodes/abstractAudioSubGraph.js +9 -6
  3. package/AudioV2/abstractAudio/subNodes/abstractAudioSubGraph.js.map +1 -1
  4. package/AudioV2/abstractAudio/subProperties/spatialAudio.js +10 -5
  5. package/AudioV2/abstractAudio/subProperties/spatialAudio.js.map +1 -1
  6. package/AudioV2/webAudio/subNodes/webAudioBaseSubGraph.js +2 -2
  7. package/AudioV2/webAudio/subNodes/webAudioBaseSubGraph.js.map +1 -1
  8. package/AudioV2/webAudio/subNodes/webAudioBusAndSoundSubGraph.js +3 -3
  9. package/AudioV2/webAudio/subNodes/webAudioBusAndSoundSubGraph.js.map +1 -1
  10. package/Engines/abstractEngine.js +2 -2
  11. package/Engines/abstractEngine.js.map +1 -1
  12. package/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.js +1 -1
  13. package/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.js.map +1 -1
  14. package/FlowGraph/Blocks/Data/Math/flowGraphMatrixMathBlocks.js +7 -2
  15. package/FlowGraph/Blocks/Data/Math/flowGraphMatrixMathBlocks.js.map +1 -1
  16. package/FlowGraph/Blocks/Data/Transformers/flowGraphJsonPointerParserBlock.d.ts +3 -12
  17. package/FlowGraph/Blocks/Data/Transformers/flowGraphJsonPointerParserBlock.js +16 -36
  18. package/FlowGraph/Blocks/Data/Transformers/flowGraphJsonPointerParserBlock.js.map +1 -1
  19. package/FlowGraph/Blocks/Data/flowGraphCachedOperationBlock.d.ts +5 -1
  20. package/FlowGraph/Blocks/Data/flowGraphCachedOperationBlock.js +17 -4
  21. package/FlowGraph/Blocks/Data/flowGraphCachedOperationBlock.js.map +1 -1
  22. package/FlowGraph/Blocks/Data/flowGraphGetPropertyBlock.d.ts +3 -11
  23. package/FlowGraph/Blocks/Data/flowGraphGetPropertyBlock.js +5 -14
  24. package/FlowGraph/Blocks/Data/flowGraphGetPropertyBlock.js.map +1 -1
  25. package/FlowGraph/CustomTypes/flowGraphMatrix.d.ts +1 -0
  26. package/FlowGraph/CustomTypes/flowGraphMatrix.js +18 -17
  27. package/FlowGraph/CustomTypes/flowGraphMatrix.js.map +1 -1
  28. package/FlowGraph/flowGraphDataConnection.d.ts +10 -1
  29. package/FlowGraph/flowGraphDataConnection.js +23 -13
  30. package/FlowGraph/flowGraphDataConnection.js.map +1 -1
  31. package/FlowGraph/flowGraphRichTypes.d.ts +5 -0
  32. package/FlowGraph/flowGraphRichTypes.js +12 -0
  33. package/FlowGraph/flowGraphRichTypes.js.map +1 -1
  34. package/FrameGraph/Node/Blocks/Layers/glowLayerBlock.d.ts +2 -2
  35. package/FrameGraph/Node/Blocks/Layers/glowLayerBlock.js +6 -6
  36. package/FrameGraph/Node/Blocks/Layers/glowLayerBlock.js.map +1 -1
  37. package/FrameGraph/Node/Blocks/Layers/highlightLayerBlock.d.ts +2 -2
  38. package/FrameGraph/Node/Blocks/Layers/highlightLayerBlock.js +6 -6
  39. package/FrameGraph/Node/Blocks/Layers/highlightLayerBlock.js.map +1 -1
  40. package/FrameGraph/Node/Blocks/PostProcesses/anaglyphPostProcessBlock.d.ts +30 -0
  41. package/FrameGraph/Node/Blocks/PostProcesses/anaglyphPostProcessBlock.js +48 -0
  42. package/FrameGraph/Node/Blocks/PostProcesses/anaglyphPostProcessBlock.js.map +1 -0
  43. package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.d.ts +3 -3
  44. package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.js +6 -6
  45. package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.js.map +1 -1
  46. package/FrameGraph/Node/Blocks/PostProcesses/chromaticAberrationPostProcessBlock.d.ts +38 -0
  47. package/FrameGraph/Node/Blocks/PostProcesses/chromaticAberrationPostProcessBlock.js +88 -0
  48. package/FrameGraph/Node/Blocks/PostProcesses/chromaticAberrationPostProcessBlock.js.map +1 -0
  49. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.d.ts +2 -2
  50. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js +6 -6
  51. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
  52. package/FrameGraph/Node/Blocks/Rendering/utilityLayerRendererBlock.d.ts +2 -2
  53. package/FrameGraph/Node/Blocks/Rendering/utilityLayerRendererBlock.js +6 -6
  54. package/FrameGraph/Node/Blocks/Rendering/utilityLayerRendererBlock.js.map +1 -1
  55. package/FrameGraph/Node/Blocks/Textures/clearBlock.d.ts +2 -2
  56. package/FrameGraph/Node/Blocks/Textures/clearBlock.js +7 -7
  57. package/FrameGraph/Node/Blocks/Textures/clearBlock.js.map +1 -1
  58. package/FrameGraph/Node/Blocks/Textures/copyTextureBlock.d.ts +2 -2
  59. package/FrameGraph/Node/Blocks/Textures/copyTextureBlock.js +6 -6
  60. package/FrameGraph/Node/Blocks/Textures/copyTextureBlock.js.map +1 -1
  61. package/FrameGraph/Node/Blocks/Textures/generateMipmapsBlock.d.ts +2 -2
  62. package/FrameGraph/Node/Blocks/Textures/generateMipmapsBlock.js +7 -7
  63. package/FrameGraph/Node/Blocks/Textures/generateMipmapsBlock.js.map +1 -1
  64. package/FrameGraph/Node/Blocks/index.d.ts +2 -0
  65. package/FrameGraph/Node/Blocks/index.js +2 -0
  66. package/FrameGraph/Node/Blocks/index.js.map +1 -1
  67. package/FrameGraph/Node/nodeRenderGraph.js +2 -2
  68. package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
  69. package/FrameGraph/Tasks/Layers/baseLayerTask.d.ts +3 -3
  70. package/FrameGraph/Tasks/Layers/baseLayerTask.js +12 -12
  71. package/FrameGraph/Tasks/Layers/baseLayerTask.js.map +1 -1
  72. package/FrameGraph/Tasks/PostProcesses/anaglyphTask.d.ts +21 -0
  73. package/FrameGraph/Tasks/PostProcesses/anaglyphTask.js +27 -0
  74. package/FrameGraph/Tasks/PostProcesses/anaglyphTask.js.map +1 -0
  75. package/FrameGraph/Tasks/PostProcesses/bloomTask.d.ts +2 -2
  76. package/FrameGraph/Tasks/PostProcesses/bloomTask.js +5 -5
  77. package/FrameGraph/Tasks/PostProcesses/bloomTask.js.map +1 -1
  78. package/FrameGraph/Tasks/PostProcesses/chromaticAberrationTask.d.ts +17 -0
  79. package/FrameGraph/Tasks/PostProcesses/chromaticAberrationTask.js +23 -0
  80. package/FrameGraph/Tasks/PostProcesses/chromaticAberrationTask.js.map +1 -0
  81. package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.d.ts +2 -2
  82. package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.js +5 -5
  83. package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.js.map +1 -1
  84. package/FrameGraph/Tasks/PostProcesses/postProcessTask.d.ts +2 -2
  85. package/FrameGraph/Tasks/PostProcesses/postProcessTask.js +1 -1
  86. package/FrameGraph/Tasks/PostProcesses/postProcessTask.js.map +1 -1
  87. package/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.d.ts +2 -2
  88. package/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.js +8 -8
  89. package/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.js.map +1 -1
  90. package/FrameGraph/Tasks/Rendering/objectRendererTask.d.ts +3 -3
  91. package/FrameGraph/Tasks/Rendering/objectRendererTask.js +9 -9
  92. package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
  93. package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.js +7 -7
  94. package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.js.map +1 -1
  95. package/FrameGraph/Tasks/Rendering/utilityLayerRendererTask.d.ts +3 -3
  96. package/FrameGraph/Tasks/Rendering/utilityLayerRendererTask.js +3 -3
  97. package/FrameGraph/Tasks/Rendering/utilityLayerRendererTask.js.map +1 -1
  98. package/FrameGraph/Tasks/Texture/clearTextureTask.d.ts +3 -3
  99. package/FrameGraph/Tasks/Texture/clearTextureTask.js +8 -8
  100. package/FrameGraph/Tasks/Texture/clearTextureTask.js.map +1 -1
  101. package/FrameGraph/Tasks/Texture/copyToTextureTask.d.ts +3 -3
  102. package/FrameGraph/Tasks/Texture/copyToTextureTask.js +3 -3
  103. package/FrameGraph/Tasks/Texture/copyToTextureTask.js.map +1 -1
  104. package/FrameGraph/Tasks/Texture/generateMipMapsTask.d.ts +2 -2
  105. package/FrameGraph/Tasks/Texture/generateMipMapsTask.js +5 -5
  106. package/FrameGraph/Tasks/Texture/generateMipMapsTask.js.map +1 -1
  107. package/FrameGraph/index.d.ts +2 -0
  108. package/FrameGraph/index.js +2 -0
  109. package/FrameGraph/index.js.map +1 -1
  110. package/Materials/Node/nodeMaterial.js +3 -0
  111. package/Materials/Node/nodeMaterial.js.map +1 -1
  112. package/Materials/materialDefines.js +1 -1
  113. package/Materials/materialDefines.js.map +1 -1
  114. package/Meshes/Builders/shapeBuilder.d.ts +6 -0
  115. package/Meshes/Builders/shapeBuilder.js +7 -4
  116. package/Meshes/Builders/shapeBuilder.js.map +1 -1
  117. package/PostProcesses/anaglyphPostProcess.d.ts +0 -1
  118. package/PostProcesses/anaglyphPostProcess.js +14 -11
  119. package/PostProcesses/anaglyphPostProcess.js.map +1 -1
  120. package/PostProcesses/chromaticAberrationPostProcess.d.ts +15 -8
  121. package/PostProcesses/chromaticAberrationPostProcess.js +72 -42
  122. package/PostProcesses/chromaticAberrationPostProcess.js.map +1 -1
  123. package/PostProcesses/index.d.ts +2 -0
  124. package/PostProcesses/index.js +2 -0
  125. package/PostProcesses/index.js.map +1 -1
  126. package/PostProcesses/postProcess.d.ts +5 -0
  127. package/PostProcesses/postProcess.js +10 -2
  128. package/PostProcesses/postProcess.js.map +1 -1
  129. package/PostProcesses/thinAnaglyphPostProcess.d.ts +23 -0
  130. package/PostProcesses/thinAnaglyphPostProcess.js +42 -0
  131. package/PostProcesses/thinAnaglyphPostProcess.js.map +1 -0
  132. package/PostProcesses/thinChromaticAberrationPostProcess.d.ts +45 -0
  133. package/PostProcesses/thinChromaticAberrationPostProcess.js +69 -0
  134. package/PostProcesses/thinChromaticAberrationPostProcess.js.map +1 -0
  135. package/package.json +1 -1
@@ -107,7 +107,7 @@ export class FlowGraphMultiplyBlock extends FlowGraphBinaryOperationBlock {
107
107
  else {
108
108
  a = a;
109
109
  b = b;
110
- return a.multiply(b);
110
+ return b.multiply(a);
111
111
  }
112
112
  }
113
113
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"flowGraphMathBlocks.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.ts"],"names":[],"mappings":"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","sourcesContent":["import { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport type { IFlowGraphBlockConfiguration } from \"../../../flowGraphBlock\";\r\nimport { FlowGraphTypes, getRichTypeByFlowGraphType, RichTypeAny, RichTypeBoolean, RichTypeFlowGraphInteger, RichTypeNumber } from \"../../../flowGraphRichTypes\";\r\nimport { FlowGraphBinaryOperationBlock } from \"../flowGraphBinaryOperationBlock\";\r\nimport { FlowGraphConstantOperationBlock } from \"../flowGraphConstantOperationBlock\";\r\nimport { Quaternion, Matrix, Vector2, Vector3, Vector4 } from \"../../../../Maths/math.vector\";\r\nimport { FlowGraphUnaryOperationBlock } from \"../flowGraphUnaryOperationBlock\";\r\nimport { FlowGraphTernaryOperationBlock } from \"../flowGraphTernaryOperationBlock\";\r\nimport { FlowGraphInteger } from \"../../../CustomTypes/flowGraphInteger\";\r\nimport { FlowGraphBlockNames } from \"../../flowGraphBlockNames\";\r\nimport type { FlowGraphDataConnection } from \"core/FlowGraph/flowGraphDataConnection\";\r\nimport type { FlowGraphContext } from \"core/FlowGraph/flowGraphContext\";\r\nimport { FlowGraphMatrix2D, FlowGraphMatrix3D } from \"core/FlowGraph/CustomTypes/flowGraphMatrix\";\r\nimport type { FlowGraphMathOperationType, FlowGraphNumber } from \"core/FlowGraph/utils\";\r\nimport { _areSameIntegerClass, _areSameMatrixClass, _areSameVectorClass, _getClassNameOf, getNumericValue, isNumeric } from \"core/FlowGraph/utils\";\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/**\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 (_areSameVectorClass(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.Quaternion) {\r\n // this is a simple add, and should be also supported between Quat and Vector4. Therefore -\r\n return (a as Quaternion).add(b as Quaternion);\r\n } else {\r\n return (a as number) + (b as number);\r\n }\r\n }\r\n}\r\nRegisterClass(FlowGraphBlockNames.Add, FlowGraphAddBlock);\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 (_areSameVectorClass(aClassName, bClassName) || _areSameIntegerClass(aClassName, bClassName) || _areSameMatrixClass(aClassName, bClassName)) {\r\n return (a as Vector3).subtract(b as Vector3);\r\n } else if (aClassName === FlowGraphTypes.Quaternion || bClassName === FlowGraphTypes.Quaternion) {\r\n // this is a simple subtract, and should be also supported between Quat and Vector4. Therefore -\r\n return (a as Quaternion).subtract(b as Quaternion);\r\n } else {\r\n return (a as number) - (b as number);\r\n }\r\n }\r\n}\r\nRegisterClass(FlowGraphBlockNames.Subtract, FlowGraphSubtractBlock);\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 (_areSameVectorClass(aClassName, bClassName) || _areSameIntegerClass(aClassName, bClassName)) {\r\n return (a as Vector3).multiply(b as Vector3);\r\n } else if (aClassName === FlowGraphTypes.Quaternion || bClassName === FlowGraphTypes.Quaternion) {\r\n // this is a simple multiply (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 (_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 a.multiply(b);\r\n }\r\n } else {\r\n return (a as number) * (b as number);\r\n }\r\n }\r\n}\r\nRegisterClass(FlowGraphBlockNames.Multiply, FlowGraphMultiplyBlock);\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 (_areSameVectorClass(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 (_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 return (a as number) / (b as number);\r\n }\r\n }\r\n}\r\nRegisterClass(FlowGraphBlockNames.Divide, FlowGraphDivideBlock);\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\nRegisterClass(FlowGraphBlockNames.Random, FlowGraphRandomBlock);\r\n\r\n/**\r\n * E constant.\r\n */\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\nRegisterClass(FlowGraphBlockNames.E, FlowGraphEBlock);\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\nRegisterClass(FlowGraphBlockNames.PI, FlowGraphPiBlock);\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\nRegisterClass(FlowGraphBlockNames.Inf, FlowGraphInfBlock);\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\nRegisterClass(FlowGraphBlockNames.NaN, FlowGraphNaNBlock);\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\nRegisterClass(FlowGraphBlockNames.Abs, FlowGraphAbsBlock);\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\nRegisterClass(FlowGraphBlockNames.Sign, FlowGraphSignBlock);\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\nRegisterClass(FlowGraphBlockNames.Trunc, FlowGraphTruncBlock);\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\nRegisterClass(FlowGraphBlockNames.Floor, FlowGraphFloorBlock);\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\nRegisterClass(FlowGraphBlockNames.Ceil, FlowGraphCeilBlock);\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\nRegisterClass(FlowGraphBlockNames.Round, FlowGraphRoundBlock);\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\nRegisterClass(FlowGraphBlockNames.Fraction, FlowGraphFractionBlock);\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\nRegisterClass(FlowGraphBlockNames.Negation, FlowGraphNegationBlock);\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(a as number, 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\nRegisterClass(FlowGraphBlockNames.Modulo, FlowGraphModuloBlock);\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\nRegisterClass(FlowGraphBlockNames.Min, FlowGraphMinBlock);\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\nRegisterClass(FlowGraphBlockNames.Max, FlowGraphMaxBlock);\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(a as number, b as number, 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\nRegisterClass(FlowGraphBlockNames.Clamp, FlowGraphClampBlock);\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\nRegisterClass(FlowGraphBlockNames.Saturate, FlowGraphSaturateBlock);\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 * 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\nRegisterClass(FlowGraphBlockNames.MathInterpolation, FlowGraphMathInterpolationBlock);\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 if (_areSameVectorClass(aClassName, bClassName) || _areSameMatrixClass(aClassName, bClassName) || _areSameIntegerClass(aClassName, bClassName)) {\r\n return (a as Vector3).equals(b as Vector3);\r\n } else {\r\n return a === b;\r\n }\r\n }\r\n}\r\nRegisterClass(FlowGraphBlockNames.Equality, FlowGraphEqualityBlock);\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\nRegisterClass(FlowGraphBlockNames.LessThan, FlowGraphLessThanBlock);\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\nRegisterClass(FlowGraphBlockNames.LessThanOrEqual, FlowGraphLessThanOrEqualBlock);\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\nRegisterClass(FlowGraphBlockNames.GreaterThan, FlowGraphGreaterThanBlock);\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\nRegisterClass(FlowGraphBlockNames.GreaterThanOrEqual, FlowGraphGreaterThanOrEqualBlock);\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)) {\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\nRegisterClass(FlowGraphBlockNames.IsNaN, FlowGraphIsNanBlock);\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\nRegisterClass(FlowGraphBlockNames.IsInfinity, FlowGraphIsInfinityBlock);\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\nRegisterClass(FlowGraphBlockNames.DegToRad, FlowGraphDegToRadBlock);\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\nRegisterClass(FlowGraphBlockNames.RadToDeg, FlowGraphRadToDegBlock);\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\nRegisterClass(FlowGraphBlockNames.Asin, FlowGraphAsinBlock);\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\nRegisterClass(FlowGraphBlockNames.Acos, FlowGraphAcosBlock);\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\nRegisterClass(FlowGraphBlockNames.Atan, FlowGraphAtanBlock);\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\nRegisterClass(FlowGraphBlockNames.Atan2, FlowGraphAtan2Block);\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\nRegisterClass(FlowGraphBlockNames.Sinh, FlowGraphSinhBlock);\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\nRegisterClass(FlowGraphBlockNames.Cosh, FlowGraphCoshBlock);\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\nRegisterClass(FlowGraphBlockNames.Tanh, FlowGraphTanhBlock);\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\nRegisterClass(FlowGraphBlockNames.Asinh, FlowGraphAsinhBlock);\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\nRegisterClass(FlowGraphBlockNames.Acosh, FlowGraphAcoshBlock);\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\nRegisterClass(FlowGraphBlockNames.Atanh, FlowGraphAtanhBlock);\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\nRegisterClass(FlowGraphBlockNames.Exponential, FlowGraphExpBlock);\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\nRegisterClass(FlowGraphBlockNames.Log, FlowGraphLogBlock);\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\nRegisterClass(FlowGraphBlockNames.Log2, FlowGraphLog2Block);\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\nRegisterClass(FlowGraphBlockNames.Log10, FlowGraphLog10Block);\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\nRegisterClass(FlowGraphBlockNames.SquareRoot, FlowGraphSquareRootBlock);\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\nRegisterClass(FlowGraphBlockNames.CubeRoot, FlowGraphCubeRootBlock);\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\nRegisterClass(FlowGraphBlockNames.Power, FlowGraphPowerBlock);\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\nRegisterClass(FlowGraphBlockNames.BitwiseNot, FlowGraphBitwiseNotBlock);\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\nRegisterClass(FlowGraphBlockNames.BitwiseAnd, FlowGraphBitwiseAndBlock);\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\nRegisterClass(FlowGraphBlockNames.BitwiseOr, FlowGraphBitwiseOrBlock);\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\nRegisterClass(FlowGraphBlockNames.BitwiseXor, FlowGraphBitwiseXorBlock);\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\nRegisterClass(FlowGraphBlockNames.BitwiseLeftShift, FlowGraphBitwiseLeftShiftBlock);\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\nRegisterClass(FlowGraphBlockNames.BitwiseRightShift, FlowGraphBitwiseRightShiftBlock);\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\nRegisterClass(FlowGraphBlockNames.LeadingZeros, FlowGraphLeadingZerosBlock);\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\nRegisterClass(FlowGraphBlockNames.TrailingZeros, FlowGraphTrailingZerosBlock);\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\nRegisterClass(FlowGraphBlockNames.OneBitsCounter, FlowGraphOneBitsCounterBlock);\r\n"]}
1
+ {"version":3,"file":"flowGraphMathBlocks.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.ts"],"names":[],"mappings":"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","sourcesContent":["import { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport type { IFlowGraphBlockConfiguration } from \"../../../flowGraphBlock\";\r\nimport { FlowGraphTypes, getRichTypeByFlowGraphType, RichTypeAny, RichTypeBoolean, RichTypeFlowGraphInteger, RichTypeNumber } from \"../../../flowGraphRichTypes\";\r\nimport { FlowGraphBinaryOperationBlock } from \"../flowGraphBinaryOperationBlock\";\r\nimport { FlowGraphConstantOperationBlock } from \"../flowGraphConstantOperationBlock\";\r\nimport { Quaternion, Matrix, Vector2, Vector3, Vector4 } from \"../../../../Maths/math.vector\";\r\nimport { FlowGraphUnaryOperationBlock } from \"../flowGraphUnaryOperationBlock\";\r\nimport { FlowGraphTernaryOperationBlock } from \"../flowGraphTernaryOperationBlock\";\r\nimport { FlowGraphInteger } from \"../../../CustomTypes/flowGraphInteger\";\r\nimport { FlowGraphBlockNames } from \"../../flowGraphBlockNames\";\r\nimport type { FlowGraphDataConnection } from \"core/FlowGraph/flowGraphDataConnection\";\r\nimport type { FlowGraphContext } from \"core/FlowGraph/flowGraphContext\";\r\nimport { FlowGraphMatrix2D, FlowGraphMatrix3D } from \"core/FlowGraph/CustomTypes/flowGraphMatrix\";\r\nimport type { FlowGraphMathOperationType, FlowGraphNumber } from \"core/FlowGraph/utils\";\r\nimport { _areSameIntegerClass, _areSameMatrixClass, _areSameVectorClass, _getClassNameOf, getNumericValue, isNumeric } from \"core/FlowGraph/utils\";\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/**\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 (_areSameVectorClass(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.Quaternion) {\r\n // this is a simple add, and should be also supported between Quat and Vector4. Therefore -\r\n return (a as Quaternion).add(b as Quaternion);\r\n } else {\r\n return (a as number) + (b as number);\r\n }\r\n }\r\n}\r\nRegisterClass(FlowGraphBlockNames.Add, FlowGraphAddBlock);\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 (_areSameVectorClass(aClassName, bClassName) || _areSameIntegerClass(aClassName, bClassName) || _areSameMatrixClass(aClassName, bClassName)) {\r\n return (a as Vector3).subtract(b as Vector3);\r\n } else if (aClassName === FlowGraphTypes.Quaternion || bClassName === FlowGraphTypes.Quaternion) {\r\n // this is a simple subtract, and should be also supported between Quat and Vector4. Therefore -\r\n return (a as Quaternion).subtract(b as Quaternion);\r\n } else {\r\n return (a as number) - (b as number);\r\n }\r\n }\r\n}\r\nRegisterClass(FlowGraphBlockNames.Subtract, FlowGraphSubtractBlock);\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 (_areSameVectorClass(aClassName, bClassName) || _areSameIntegerClass(aClassName, bClassName)) {\r\n return (a as Vector3).multiply(b as Vector3);\r\n } else if (aClassName === FlowGraphTypes.Quaternion || bClassName === FlowGraphTypes.Quaternion) {\r\n // this is a simple multiply (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 (_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 return (a as number) * (b as number);\r\n }\r\n }\r\n}\r\nRegisterClass(FlowGraphBlockNames.Multiply, FlowGraphMultiplyBlock);\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 (_areSameVectorClass(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 (_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 return (a as number) / (b as number);\r\n }\r\n }\r\n}\r\nRegisterClass(FlowGraphBlockNames.Divide, FlowGraphDivideBlock);\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\nRegisterClass(FlowGraphBlockNames.Random, FlowGraphRandomBlock);\r\n\r\n/**\r\n * E constant.\r\n */\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\nRegisterClass(FlowGraphBlockNames.E, FlowGraphEBlock);\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\nRegisterClass(FlowGraphBlockNames.PI, FlowGraphPiBlock);\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\nRegisterClass(FlowGraphBlockNames.Inf, FlowGraphInfBlock);\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\nRegisterClass(FlowGraphBlockNames.NaN, FlowGraphNaNBlock);\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\nRegisterClass(FlowGraphBlockNames.Abs, FlowGraphAbsBlock);\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\nRegisterClass(FlowGraphBlockNames.Sign, FlowGraphSignBlock);\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\nRegisterClass(FlowGraphBlockNames.Trunc, FlowGraphTruncBlock);\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\nRegisterClass(FlowGraphBlockNames.Floor, FlowGraphFloorBlock);\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\nRegisterClass(FlowGraphBlockNames.Ceil, FlowGraphCeilBlock);\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\nRegisterClass(FlowGraphBlockNames.Round, FlowGraphRoundBlock);\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\nRegisterClass(FlowGraphBlockNames.Fraction, FlowGraphFractionBlock);\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\nRegisterClass(FlowGraphBlockNames.Negation, FlowGraphNegationBlock);\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(a as number, 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\nRegisterClass(FlowGraphBlockNames.Modulo, FlowGraphModuloBlock);\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\nRegisterClass(FlowGraphBlockNames.Min, FlowGraphMinBlock);\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\nRegisterClass(FlowGraphBlockNames.Max, FlowGraphMaxBlock);\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(a as number, b as number, 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\nRegisterClass(FlowGraphBlockNames.Clamp, FlowGraphClampBlock);\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\nRegisterClass(FlowGraphBlockNames.Saturate, FlowGraphSaturateBlock);\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 * 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\nRegisterClass(FlowGraphBlockNames.MathInterpolation, FlowGraphMathInterpolationBlock);\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 if (_areSameVectorClass(aClassName, bClassName) || _areSameMatrixClass(aClassName, bClassName) || _areSameIntegerClass(aClassName, bClassName)) {\r\n return (a as Vector3).equals(b as Vector3);\r\n } else {\r\n return a === b;\r\n }\r\n }\r\n}\r\nRegisterClass(FlowGraphBlockNames.Equality, FlowGraphEqualityBlock);\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\nRegisterClass(FlowGraphBlockNames.LessThan, FlowGraphLessThanBlock);\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\nRegisterClass(FlowGraphBlockNames.LessThanOrEqual, FlowGraphLessThanOrEqualBlock);\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\nRegisterClass(FlowGraphBlockNames.GreaterThan, FlowGraphGreaterThanBlock);\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\nRegisterClass(FlowGraphBlockNames.GreaterThanOrEqual, FlowGraphGreaterThanOrEqualBlock);\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)) {\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\nRegisterClass(FlowGraphBlockNames.IsNaN, FlowGraphIsNanBlock);\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\nRegisterClass(FlowGraphBlockNames.IsInfinity, FlowGraphIsInfinityBlock);\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\nRegisterClass(FlowGraphBlockNames.DegToRad, FlowGraphDegToRadBlock);\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\nRegisterClass(FlowGraphBlockNames.RadToDeg, FlowGraphRadToDegBlock);\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\nRegisterClass(FlowGraphBlockNames.Asin, FlowGraphAsinBlock);\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\nRegisterClass(FlowGraphBlockNames.Acos, FlowGraphAcosBlock);\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\nRegisterClass(FlowGraphBlockNames.Atan, FlowGraphAtanBlock);\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\nRegisterClass(FlowGraphBlockNames.Atan2, FlowGraphAtan2Block);\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\nRegisterClass(FlowGraphBlockNames.Sinh, FlowGraphSinhBlock);\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\nRegisterClass(FlowGraphBlockNames.Cosh, FlowGraphCoshBlock);\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\nRegisterClass(FlowGraphBlockNames.Tanh, FlowGraphTanhBlock);\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\nRegisterClass(FlowGraphBlockNames.Asinh, FlowGraphAsinhBlock);\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\nRegisterClass(FlowGraphBlockNames.Acosh, FlowGraphAcoshBlock);\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\nRegisterClass(FlowGraphBlockNames.Atanh, FlowGraphAtanhBlock);\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\nRegisterClass(FlowGraphBlockNames.Exponential, FlowGraphExpBlock);\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\nRegisterClass(FlowGraphBlockNames.Log, FlowGraphLogBlock);\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\nRegisterClass(FlowGraphBlockNames.Log2, FlowGraphLog2Block);\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\nRegisterClass(FlowGraphBlockNames.Log10, FlowGraphLog10Block);\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\nRegisterClass(FlowGraphBlockNames.SquareRoot, FlowGraphSquareRootBlock);\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\nRegisterClass(FlowGraphBlockNames.CubeRoot, FlowGraphCubeRootBlock);\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\nRegisterClass(FlowGraphBlockNames.Power, FlowGraphPowerBlock);\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\nRegisterClass(FlowGraphBlockNames.BitwiseNot, FlowGraphBitwiseNotBlock);\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\nRegisterClass(FlowGraphBlockNames.BitwiseAnd, FlowGraphBitwiseAndBlock);\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\nRegisterClass(FlowGraphBlockNames.BitwiseOr, FlowGraphBitwiseOrBlock);\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\nRegisterClass(FlowGraphBlockNames.BitwiseXor, FlowGraphBitwiseXorBlock);\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\nRegisterClass(FlowGraphBlockNames.BitwiseLeftShift, FlowGraphBitwiseLeftShiftBlock);\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\nRegisterClass(FlowGraphBlockNames.BitwiseRightShift, FlowGraphBitwiseRightShiftBlock);\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\nRegisterClass(FlowGraphBlockNames.LeadingZeros, FlowGraphLeadingZerosBlock);\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\nRegisterClass(FlowGraphBlockNames.TrailingZeros, FlowGraphTrailingZerosBlock);\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\nRegisterClass(FlowGraphBlockNames.OneBitsCounter, FlowGraphOneBitsCounterBlock);\r\n"]}
@@ -53,7 +53,7 @@ export class FlowGraphMatrixMultiplicationBlock extends FlowGraphBinaryOperation
53
53
  * @param config the configuration of the block
54
54
  */
55
55
  constructor(config) {
56
- super(getRichTypeByFlowGraphType(config?.matrixType || "Matrix" /* FlowGraphTypes.Matrix */), getRichTypeByFlowGraphType(config?.matrixType || "Matrix" /* FlowGraphTypes.Matrix */), getRichTypeByFlowGraphType(config?.matrixType || "Matrix" /* FlowGraphTypes.Matrix */), (a, b) => a.multiply(b), "FlowGraphMatrixMultiplicationBlock" /* FlowGraphBlockNames.MatrixMultiplication */, config);
56
+ super(getRichTypeByFlowGraphType(config?.matrixType || "Matrix" /* FlowGraphTypes.Matrix */), getRichTypeByFlowGraphType(config?.matrixType || "Matrix" /* FlowGraphTypes.Matrix */), getRichTypeByFlowGraphType(config?.matrixType || "Matrix" /* FlowGraphTypes.Matrix */), (a, b) => b.multiply(a), "FlowGraphMatrixMultiplicationBlock" /* FlowGraphBlockNames.MatrixMultiplication */, config);
57
57
  }
58
58
  }
59
59
  RegisterClass("FlowGraphMatrixMultiplicationBlock" /* FlowGraphBlockNames.MatrixMultiplication */, FlowGraphMatrixMultiplicationBlock);
@@ -85,7 +85,12 @@ export class FlowGraphMatrixDecomposeBlock extends FlowGraphBlock {
85
85
  const rotation = cachedRotation || new Quaternion();
86
86
  const scaling = cachedScaling || new Vector3();
87
87
  // check matrix last column components should be 0,0,0,1
88
- if (matrix.m[3] !== 0 || matrix.m[7] !== 0 || matrix.m[11] !== 0 || matrix.m[15] !== 1) {
88
+ // round them to 4 decimal places
89
+ const m3 = Math.round(matrix.m[3] * 10000) / 10000;
90
+ const m7 = Math.round(matrix.m[7] * 10000) / 10000;
91
+ const m11 = Math.round(matrix.m[11] * 10000) / 10000;
92
+ const m15 = Math.round(matrix.m[15] * 10000) / 10000;
93
+ if (m3 !== 0 || m7 !== 0 || m11 !== 0 || m15 !== 1) {
89
94
  this.isValid.setValue(false, context);
90
95
  this.position.setValue(Vector3.Zero(), context);
91
96
  this.rotationQuaternion.setValue(Quaternion.Identity(), context);
@@ -1 +1 @@
1
- {"version":3,"file":"flowGraphMatrixMathBlocks.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/FlowGraph/Blocks/Data/Math/flowGraphMatrixMathBlocks.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IFlowGraphBlockConfiguration } from \"core/FlowGraph/flowGraphBlock\";\nimport { FlowGraphBlock } from \"core/FlowGraph/flowGraphBlock\";\nimport type { FlowGraphContext } from \"core/FlowGraph/flowGraphContext\";\nimport type { FlowGraphDataConnection } from \"core/FlowGraph/flowGraphDataConnection\";\nimport {\n FlowGraphTypes,\n getRichTypeByFlowGraphType,\n RichTypeBoolean,\n RichTypeMatrix,\n RichTypeNumber,\n RichTypeQuaternion,\n RichTypeVector3,\n} from \"core/FlowGraph/flowGraphRichTypes\";\nimport { Matrix, Quaternion, Vector3 } from \"core/Maths/math.vector\";\nimport { FlowGraphBlockNames } from \"../../flowGraphBlockNames\";\nimport { RegisterClass } from \"core/Misc/typeStore\";\nimport { FlowGraphUnaryOperationBlock } from \"../flowGraphUnaryOperationBlock\";\nimport type { FlowGraphMatrix2D } from \"core/FlowGraph/CustomTypes/flowGraphMatrix\";\nimport { FlowGraphBinaryOperationBlock } from \"../flowGraphBinaryOperationBlock\";\nimport type { FlowGraphMatrix } from \"core/FlowGraph/utils\";\n\n/**\n * Configuration for the matrix blocks.\n */\nexport interface IFlowGraphMatrixBlockConfiguration extends IFlowGraphBlockConfiguration {\n /**\n * The type of the matrix. Default is Matrix (which is 4x4)\n */\n matrixType: FlowGraphTypes;\n}\n/**\n * Transposes a matrix.\n */\nexport class FlowGraphTransposeBlock extends FlowGraphUnaryOperationBlock<FlowGraphMatrix, FlowGraphMatrix> {\n /**\n * Creates a new instance of the block.\n * @param config the configuration of the block\n */\n constructor(config?: IFlowGraphMatrixBlockConfiguration) {\n super(\n getRichTypeByFlowGraphType(config?.matrixType || FlowGraphTypes.Matrix),\n getRichTypeByFlowGraphType(config?.matrixType || FlowGraphTypes.Matrix),\n (a) => (a.transpose ? a.transpose() : Matrix.Transpose(a as Matrix)),\n FlowGraphBlockNames.Transpose,\n config\n );\n }\n}\nRegisterClass(FlowGraphBlockNames.Transpose, FlowGraphTransposeBlock);\n\n/**\n * Gets the determinant of a matrix.\n */\nexport class FlowGraphDeterminantBlock extends FlowGraphUnaryOperationBlock<FlowGraphMatrix, number> {\n /**\n * Creates a new instance of the block.\n * @param config the configuration of the block\n */\n constructor(config?: IFlowGraphMatrixBlockConfiguration) {\n super(getRichTypeByFlowGraphType(config?.matrixType || FlowGraphTypes.Matrix), RichTypeNumber, (a) => a.determinant(), FlowGraphBlockNames.Determinant, config);\n }\n}\nRegisterClass(FlowGraphBlockNames.Determinant, FlowGraphDeterminantBlock);\n\n/**\n * Inverts a matrix.\n */\nexport class FlowGraphInvertMatrixBlock extends FlowGraphUnaryOperationBlock<FlowGraphMatrix, FlowGraphMatrix> {\n /**\n * Creates a new instance of the inverse block.\n * @param config the configuration of the block\n */\n constructor(config?: IFlowGraphMatrixBlockConfiguration) {\n super(\n getRichTypeByFlowGraphType(config?.matrixType || FlowGraphTypes.Matrix),\n getRichTypeByFlowGraphType(config?.matrixType || FlowGraphTypes.Matrix),\n (a) => ((a as FlowGraphMatrix2D).inverse ? (a as FlowGraphMatrix2D).inverse() : Matrix.Invert(a as Matrix)),\n FlowGraphBlockNames.InvertMatrix,\n config\n );\n }\n}\nRegisterClass(FlowGraphBlockNames.InvertMatrix, FlowGraphInvertMatrixBlock);\n\n/**\n * Multiplies two matrices.\n */\nexport class FlowGraphMatrixMultiplicationBlock extends FlowGraphBinaryOperationBlock<FlowGraphMatrix, FlowGraphMatrix, FlowGraphMatrix> {\n /**\n * Creates a new instance of the multiplication block.\n * Note - this is similar to the math multiplication if not using matrix per-component multiplication.\n * @param config the configuration of the block\n */\n constructor(config?: IFlowGraphMatrixBlockConfiguration) {\n super(\n getRichTypeByFlowGraphType(config?.matrixType || FlowGraphTypes.Matrix),\n getRichTypeByFlowGraphType(config?.matrixType || FlowGraphTypes.Matrix),\n getRichTypeByFlowGraphType(config?.matrixType || FlowGraphTypes.Matrix),\n (a, b) => a.multiply(b as any),\n FlowGraphBlockNames.MatrixMultiplication,\n config\n );\n }\n}\nRegisterClass(FlowGraphBlockNames.MatrixMultiplication, FlowGraphMatrixMultiplicationBlock);\n\n/**\n * Matrix decompose block\n */\nexport class FlowGraphMatrixDecomposeBlock extends FlowGraphBlock {\n /**\n * The input of this block\n */\n public readonly input: FlowGraphDataConnection<Matrix>;\n\n /**\n * The position output of this block\n */\n public readonly position: FlowGraphDataConnection<Vector3>;\n /**\n * The rotation output of this block\n */\n public readonly rotationQuaternion: FlowGraphDataConnection<Quaternion>;\n /**\n * The scaling output of this block\n */\n public readonly scaling: FlowGraphDataConnection<Vector3>;\n\n /**\n * Is the matrix valid\n */\n public readonly isValid: FlowGraphDataConnection<boolean>;\n\n constructor(config?: IFlowGraphBlockConfiguration) {\n super(config);\n this.input = this.registerDataInput(\"input\", RichTypeMatrix);\n this.position = this.registerDataOutput(\"position\", RichTypeVector3);\n this.rotationQuaternion = this.registerDataOutput(\"rotationQuaternion\", RichTypeQuaternion);\n this.scaling = this.registerDataOutput(\"scaling\", RichTypeVector3);\n this.isValid = this.registerDataOutput(\"isValid\", RichTypeBoolean, false);\n }\n\n public override _updateOutputs(context: FlowGraphContext) {\n const cachedExecutionId = context._getExecutionVariable(this, \"executionId\", -1);\n const cachedPosition = context._getExecutionVariable(this, \"cachedPosition\", null);\n const cachedRotation = context._getExecutionVariable(this, \"cachedRotation\", null);\n const cachedScaling = context._getExecutionVariable(this, \"cachedScaling\", null);\n if (cachedExecutionId === context.executionId && cachedPosition && cachedRotation && cachedScaling) {\n this.position.setValue(cachedPosition, context);\n this.rotationQuaternion.setValue(cachedRotation, context);\n this.scaling.setValue(cachedScaling, context);\n } else {\n const matrix = this.input.getValue(context);\n const position = cachedPosition || new Vector3();\n const rotation = cachedRotation || new Quaternion();\n const scaling = cachedScaling || new Vector3();\n // check matrix last column components should be 0,0,0,1\n if (matrix.m[3] !== 0 || matrix.m[7] !== 0 || matrix.m[11] !== 0 || matrix.m[15] !== 1) {\n this.isValid.setValue(false, context);\n this.position.setValue(Vector3.Zero(), context);\n this.rotationQuaternion.setValue(Quaternion.Identity(), context);\n this.scaling.setValue(Vector3.One(), context);\n return;\n }\n // make the checks for validity\n const valid = matrix.decompose(scaling, rotation, position);\n this.isValid.setValue(valid, context);\n this.position.setValue(position, context);\n this.rotationQuaternion.setValue(rotation, context);\n this.scaling.setValue(scaling, context);\n context._setExecutionVariable(this, \"cachedPosition\", position);\n context._setExecutionVariable(this, \"cachedRotation\", rotation);\n context._setExecutionVariable(this, \"cachedScaling\", scaling);\n context._setExecutionVariable(this, \"executionId\", context.executionId);\n }\n }\n\n public override getClassName(): string {\n return FlowGraphBlockNames.MatrixDecompose;\n }\n}\n\nRegisterClass(FlowGraphBlockNames.MatrixDecompose, FlowGraphMatrixDecomposeBlock);\n\n/**\n * Matrix compose block\n */\nexport class FlowGraphMatrixComposeBlock extends FlowGraphBlock {\n /**\n * The position input of this block\n */\n public readonly position: FlowGraphDataConnection<Vector3>;\n /**\n * The rotation input of this block\n */\n public readonly rotationQuaternion: FlowGraphDataConnection<Quaternion>;\n /**\n * The scaling input of this block\n */\n public readonly scaling: FlowGraphDataConnection<Vector3>;\n /**\n * The output of this block\n */\n public readonly value: FlowGraphDataConnection<Matrix>;\n\n constructor(config?: IFlowGraphBlockConfiguration) {\n super(config);\n this.position = this.registerDataInput(\"position\", RichTypeVector3);\n this.rotationQuaternion = this.registerDataInput(\"rotationQuaternion\", RichTypeQuaternion);\n this.scaling = this.registerDataInput(\"scaling\", RichTypeVector3);\n this.value = this.registerDataOutput(\"value\", RichTypeMatrix);\n }\n\n public override _updateOutputs(context: FlowGraphContext) {\n const cachedExecutionId = context._getExecutionVariable(this, \"executionId\", -1);\n const cachedMatrix = context._getExecutionVariable(this, \"cachedMatrix\", null);\n if (cachedExecutionId === context.executionId && cachedMatrix) {\n this.value.setValue(cachedMatrix, context);\n } else {\n const matrix = Matrix.Compose(this.scaling.getValue(context), this.rotationQuaternion.getValue(context), this.position.getValue(context));\n this.value.setValue(matrix, context);\n context._setExecutionVariable(this, \"cachedMatrix\", matrix);\n context._setExecutionVariable(this, \"executionId\", context.executionId);\n }\n }\n\n public override getClassName(): string {\n return FlowGraphBlockNames.MatrixCompose;\n }\n}\n\nRegisterClass(FlowGraphBlockNames.MatrixCompose, FlowGraphMatrixComposeBlock);\n"]}
1
+ {"version":3,"file":"flowGraphMatrixMathBlocks.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/FlowGraph/Blocks/Data/Math/flowGraphMatrixMathBlocks.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IFlowGraphBlockConfiguration } from \"core/FlowGraph/flowGraphBlock\";\nimport { FlowGraphBlock } from \"core/FlowGraph/flowGraphBlock\";\nimport type { FlowGraphContext } from \"core/FlowGraph/flowGraphContext\";\nimport type { FlowGraphDataConnection } from \"core/FlowGraph/flowGraphDataConnection\";\nimport {\n FlowGraphTypes,\n getRichTypeByFlowGraphType,\n RichTypeBoolean,\n RichTypeMatrix,\n RichTypeNumber,\n RichTypeQuaternion,\n RichTypeVector3,\n} from \"core/FlowGraph/flowGraphRichTypes\";\nimport { Matrix, Quaternion, Vector3 } from \"core/Maths/math.vector\";\nimport { FlowGraphBlockNames } from \"../../flowGraphBlockNames\";\nimport { RegisterClass } from \"core/Misc/typeStore\";\nimport { FlowGraphUnaryOperationBlock } from \"../flowGraphUnaryOperationBlock\";\nimport type { FlowGraphMatrix2D } from \"core/FlowGraph/CustomTypes/flowGraphMatrix\";\nimport { FlowGraphBinaryOperationBlock } from \"../flowGraphBinaryOperationBlock\";\nimport type { FlowGraphMatrix } from \"core/FlowGraph/utils\";\n\n/**\n * Configuration for the matrix blocks.\n */\nexport interface IFlowGraphMatrixBlockConfiguration extends IFlowGraphBlockConfiguration {\n /**\n * The type of the matrix. Default is Matrix (which is 4x4)\n */\n matrixType: FlowGraphTypes;\n}\n/**\n * Transposes a matrix.\n */\nexport class FlowGraphTransposeBlock extends FlowGraphUnaryOperationBlock<FlowGraphMatrix, FlowGraphMatrix> {\n /**\n * Creates a new instance of the block.\n * @param config the configuration of the block\n */\n constructor(config?: IFlowGraphMatrixBlockConfiguration) {\n super(\n getRichTypeByFlowGraphType(config?.matrixType || FlowGraphTypes.Matrix),\n getRichTypeByFlowGraphType(config?.matrixType || FlowGraphTypes.Matrix),\n (a) => (a.transpose ? a.transpose() : Matrix.Transpose(a as Matrix)),\n FlowGraphBlockNames.Transpose,\n config\n );\n }\n}\nRegisterClass(FlowGraphBlockNames.Transpose, FlowGraphTransposeBlock);\n\n/**\n * Gets the determinant of a matrix.\n */\nexport class FlowGraphDeterminantBlock extends FlowGraphUnaryOperationBlock<FlowGraphMatrix, number> {\n /**\n * Creates a new instance of the block.\n * @param config the configuration of the block\n */\n constructor(config?: IFlowGraphMatrixBlockConfiguration) {\n super(getRichTypeByFlowGraphType(config?.matrixType || FlowGraphTypes.Matrix), RichTypeNumber, (a) => a.determinant(), FlowGraphBlockNames.Determinant, config);\n }\n}\nRegisterClass(FlowGraphBlockNames.Determinant, FlowGraphDeterminantBlock);\n\n/**\n * Inverts a matrix.\n */\nexport class FlowGraphInvertMatrixBlock extends FlowGraphUnaryOperationBlock<FlowGraphMatrix, FlowGraphMatrix> {\n /**\n * Creates a new instance of the inverse block.\n * @param config the configuration of the block\n */\n constructor(config?: IFlowGraphMatrixBlockConfiguration) {\n super(\n getRichTypeByFlowGraphType(config?.matrixType || FlowGraphTypes.Matrix),\n getRichTypeByFlowGraphType(config?.matrixType || FlowGraphTypes.Matrix),\n (a) => ((a as FlowGraphMatrix2D).inverse ? (a as FlowGraphMatrix2D).inverse() : Matrix.Invert(a as Matrix)),\n FlowGraphBlockNames.InvertMatrix,\n config\n );\n }\n}\nRegisterClass(FlowGraphBlockNames.InvertMatrix, FlowGraphInvertMatrixBlock);\n\n/**\n * Multiplies two matrices.\n */\nexport class FlowGraphMatrixMultiplicationBlock extends FlowGraphBinaryOperationBlock<FlowGraphMatrix, FlowGraphMatrix, FlowGraphMatrix> {\n /**\n * Creates a new instance of the multiplication block.\n * Note - this is similar to the math multiplication if not using matrix per-component multiplication.\n * @param config the configuration of the block\n */\n constructor(config?: IFlowGraphMatrixBlockConfiguration) {\n super(\n getRichTypeByFlowGraphType(config?.matrixType || FlowGraphTypes.Matrix),\n getRichTypeByFlowGraphType(config?.matrixType || FlowGraphTypes.Matrix),\n getRichTypeByFlowGraphType(config?.matrixType || FlowGraphTypes.Matrix),\n (a, b) => b.multiply(a as any),\n FlowGraphBlockNames.MatrixMultiplication,\n config\n );\n }\n}\nRegisterClass(FlowGraphBlockNames.MatrixMultiplication, FlowGraphMatrixMultiplicationBlock);\n\n/**\n * Matrix decompose block\n */\nexport class FlowGraphMatrixDecomposeBlock extends FlowGraphBlock {\n /**\n * The input of this block\n */\n public readonly input: FlowGraphDataConnection<Matrix>;\n\n /**\n * The position output of this block\n */\n public readonly position: FlowGraphDataConnection<Vector3>;\n /**\n * The rotation output of this block\n */\n public readonly rotationQuaternion: FlowGraphDataConnection<Quaternion>;\n /**\n * The scaling output of this block\n */\n public readonly scaling: FlowGraphDataConnection<Vector3>;\n\n /**\n * Is the matrix valid\n */\n public readonly isValid: FlowGraphDataConnection<boolean>;\n\n constructor(config?: IFlowGraphBlockConfiguration) {\n super(config);\n this.input = this.registerDataInput(\"input\", RichTypeMatrix);\n this.position = this.registerDataOutput(\"position\", RichTypeVector3);\n this.rotationQuaternion = this.registerDataOutput(\"rotationQuaternion\", RichTypeQuaternion);\n this.scaling = this.registerDataOutput(\"scaling\", RichTypeVector3);\n this.isValid = this.registerDataOutput(\"isValid\", RichTypeBoolean, false);\n }\n\n public override _updateOutputs(context: FlowGraphContext) {\n const cachedExecutionId = context._getExecutionVariable(this, \"executionId\", -1);\n const cachedPosition = context._getExecutionVariable(this, \"cachedPosition\", null);\n const cachedRotation = context._getExecutionVariable(this, \"cachedRotation\", null);\n const cachedScaling = context._getExecutionVariable(this, \"cachedScaling\", null);\n if (cachedExecutionId === context.executionId && cachedPosition && cachedRotation && cachedScaling) {\n this.position.setValue(cachedPosition, context);\n this.rotationQuaternion.setValue(cachedRotation, context);\n this.scaling.setValue(cachedScaling, context);\n } else {\n const matrix = this.input.getValue(context);\n const position = cachedPosition || new Vector3();\n const rotation = cachedRotation || new Quaternion();\n const scaling = cachedScaling || new Vector3();\n // check matrix last column components should be 0,0,0,1\n // round them to 4 decimal places\n const m3 = Math.round(matrix.m[3] * 10000) / 10000;\n const m7 = Math.round(matrix.m[7] * 10000) / 10000;\n const m11 = Math.round(matrix.m[11] * 10000) / 10000;\n const m15 = Math.round(matrix.m[15] * 10000) / 10000;\n if (m3 !== 0 || m7 !== 0 || m11 !== 0 || m15 !== 1) {\n this.isValid.setValue(false, context);\n this.position.setValue(Vector3.Zero(), context);\n this.rotationQuaternion.setValue(Quaternion.Identity(), context);\n this.scaling.setValue(Vector3.One(), context);\n return;\n }\n // make the checks for validity\n const valid = matrix.decompose(scaling, rotation, position);\n this.isValid.setValue(valid, context);\n this.position.setValue(position, context);\n this.rotationQuaternion.setValue(rotation, context);\n this.scaling.setValue(scaling, context);\n context._setExecutionVariable(this, \"cachedPosition\", position);\n context._setExecutionVariable(this, \"cachedRotation\", rotation);\n context._setExecutionVariable(this, \"cachedScaling\", scaling);\n context._setExecutionVariable(this, \"executionId\", context.executionId);\n }\n }\n\n public override getClassName(): string {\n return FlowGraphBlockNames.MatrixDecompose;\n }\n}\n\nRegisterClass(FlowGraphBlockNames.MatrixDecompose, FlowGraphMatrixDecomposeBlock);\n\n/**\n * Matrix compose block\n */\nexport class FlowGraphMatrixComposeBlock extends FlowGraphBlock {\n /**\n * The position input of this block\n */\n public readonly position: FlowGraphDataConnection<Vector3>;\n /**\n * The rotation input of this block\n */\n public readonly rotationQuaternion: FlowGraphDataConnection<Quaternion>;\n /**\n * The scaling input of this block\n */\n public readonly scaling: FlowGraphDataConnection<Vector3>;\n /**\n * The output of this block\n */\n public readonly value: FlowGraphDataConnection<Matrix>;\n\n constructor(config?: IFlowGraphBlockConfiguration) {\n super(config);\n this.position = this.registerDataInput(\"position\", RichTypeVector3);\n this.rotationQuaternion = this.registerDataInput(\"rotationQuaternion\", RichTypeQuaternion);\n this.scaling = this.registerDataInput(\"scaling\", RichTypeVector3);\n this.value = this.registerDataOutput(\"value\", RichTypeMatrix);\n }\n\n public override _updateOutputs(context: FlowGraphContext) {\n const cachedExecutionId = context._getExecutionVariable(this, \"executionId\", -1);\n const cachedMatrix = context._getExecutionVariable(this, \"cachedMatrix\", null);\n if (cachedExecutionId === context.executionId && cachedMatrix) {\n this.value.setValue(cachedMatrix, context);\n } else {\n const matrix = Matrix.Compose(this.scaling.getValue(context), this.rotationQuaternion.getValue(context), this.position.getValue(context));\n this.value.setValue(matrix, context);\n context._setExecutionVariable(this, \"cachedMatrix\", matrix);\n context._setExecutionVariable(this, \"executionId\", context.executionId);\n }\n }\n\n public override getClassName(): string {\n return FlowGraphBlockNames.MatrixCompose;\n }\n}\n\nRegisterClass(FlowGraphBlockNames.MatrixCompose, FlowGraphMatrixComposeBlock);\n"]}
@@ -1,6 +1,5 @@
1
1
  import type { FlowGraphAssetType } from "../../../flowGraphAssetsContext.js";
2
2
  import type { IFlowGraphBlockConfiguration } from "../../../flowGraphBlock.js";
3
- import { FlowGraphBlock } from "../../../flowGraphBlock.js";
4
3
  import type { FlowGraphContext } from "../../../flowGraphContext.js";
5
4
  import type { FlowGraphDataConnection } from "../../../flowGraphDataConnection.js";
6
5
  import { FlowGraphPathConverterComponent } from "../../../flowGraphPathConverterComponent.js";
@@ -8,6 +7,7 @@ import type { IObjectAccessor } from "../../../typeDefinitions.js";
8
7
  import type { IPathToObjectConverter } from "../../../../ObjectModel/objectModelInterfaces.js";
9
8
  import type { Animation } from "../../../../Animations/animation.js";
10
9
  import type { EasingFunction } from "../../../../Animations/easing.js";
10
+ import { FlowGraphCachedOperationBlock } from "../flowGraphCachedOperationBlock";
11
11
  /**
12
12
  * Configuration for the JSON pointer parser block.
13
13
  */
@@ -30,7 +30,7 @@ export interface IFlowGraphJsonPointerParserBlockConfiguration extends IFlowGrap
30
30
  * The output is an object and a property name.
31
31
  * Optionally, the block can also output the value of the property. This is configurable.
32
32
  */
33
- export declare class FlowGraphJsonPointerParserBlock<P extends any, O extends FlowGraphAssetType> extends FlowGraphBlock {
33
+ export declare class FlowGraphJsonPointerParserBlock<P extends any, O extends FlowGraphAssetType> extends FlowGraphCachedOperationBlock<P> {
34
34
  /**
35
35
  * the configuration of the block
36
36
  */
@@ -43,11 +43,6 @@ export declare class FlowGraphJsonPointerParserBlock<P extends any, O extends Fl
43
43
  * Output connection: The property name.
44
44
  */
45
45
  readonly propertyName: FlowGraphDataConnection<string>;
46
- /**
47
- * Output connection: The value of the property.
48
- * Note that per default this is not outputted. It can be enabled by setting the outputValue property to true.
49
- */
50
- readonly value: FlowGraphDataConnection<P>;
51
46
  /**
52
47
  * Output connection: A function that can be used to update the value of the property.
53
48
  */
@@ -60,10 +55,6 @@ export declare class FlowGraphJsonPointerParserBlock<P extends any, O extends Fl
60
55
  * Output connection: A function that can be used to get the interpolation animation property info.
61
56
  */
62
57
  readonly generateAnimationsFunction: FlowGraphDataConnection<() => (keys: any[], fps: number, easingFunction?: EasingFunction) => Animation[]>;
63
- /**
64
- * Output connection: Whether the value is valid.
65
- */
66
- readonly isValid: FlowGraphDataConnection<boolean>;
67
58
  /**
68
59
  * The component with the templated inputs for the provided path.
69
60
  */
@@ -73,7 +64,7 @@ export declare class FlowGraphJsonPointerParserBlock<P extends any, O extends Fl
73
64
  * the configuration of the block
74
65
  */
75
66
  config: IFlowGraphJsonPointerParserBlockConfiguration);
76
- _updateOutputs(context: FlowGraphContext): void;
67
+ _doOperation(context: FlowGraphContext): P;
77
68
  private _setPropertyValue;
78
69
  private _getPropertyValue;
79
70
  private _getInterpolationAnimationPropertyInfo;