@babylonjs/core 6.21.4 → 6.22.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 (110) hide show
  1. package/Behaviors/Meshes/pointerDragBehavior.d.ts +4 -3
  2. package/Behaviors/Meshes/pointerDragBehavior.js +4 -3
  3. package/Behaviors/Meshes/pointerDragBehavior.js.map +1 -1
  4. package/Engines/thinEngine.js +2 -2
  5. package/Engines/thinEngine.js.map +1 -1
  6. package/FlowGraph/Blocks/Data/Math/flowGraphMatrixBlocks.d.ts +167 -0
  7. package/FlowGraph/Blocks/Data/Math/flowGraphMatrixBlocks.js +198 -0
  8. package/FlowGraph/Blocks/Data/Math/flowGraphMatrixBlocks.js.map +1 -0
  9. package/FlowGraph/Blocks/Data/Math/flowGraphVector2MathBlocks.d.ts +63 -1
  10. package/FlowGraph/Blocks/Data/Math/flowGraphVector2MathBlocks.js +54 -0
  11. package/FlowGraph/Blocks/Data/Math/flowGraphVector2MathBlocks.js.map +1 -1
  12. package/FlowGraph/Blocks/Data/Math/flowGraphVector3MathBlocks.d.ts +85 -0
  13. package/FlowGraph/Blocks/Data/Math/flowGraphVector3MathBlocks.js +70 -2
  14. package/FlowGraph/Blocks/Data/Math/flowGraphVector3MathBlocks.js.map +1 -1
  15. package/FlowGraph/Blocks/Data/Math/flowGraphVector4MathBlocks.d.ts +61 -1
  16. package/FlowGraph/Blocks/Data/Math/flowGraphVector4MathBlocks.js +45 -0
  17. package/FlowGraph/Blocks/Data/Math/flowGraphVector4MathBlocks.js.map +1 -1
  18. package/FlowGraph/Blocks/Data/Math/index.d.ts +1 -0
  19. package/FlowGraph/Blocks/Data/Math/index.js +1 -0
  20. package/FlowGraph/Blocks/Data/Math/index.js.map +1 -1
  21. package/FlowGraph/Blocks/Data/flowGraphConstantBlock.d.ts +26 -0
  22. package/FlowGraph/Blocks/Data/flowGraphConstantBlock.js +17 -0
  23. package/FlowGraph/Blocks/Data/flowGraphConstantBlock.js.map +1 -0
  24. package/FlowGraph/Blocks/Data/flowGraphCoordinateTransformBlock.d.ts +32 -0
  25. package/FlowGraph/Blocks/Data/flowGraphCoordinateTransformBlock.js +37 -0
  26. package/FlowGraph/Blocks/Data/flowGraphCoordinateTransformBlock.js.map +1 -0
  27. package/FlowGraph/Blocks/Data/index.d.ts +3 -1
  28. package/FlowGraph/Blocks/Data/index.js +4 -2
  29. package/FlowGraph/Blocks/Data/index.js.map +1 -1
  30. package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.js +2 -2
  31. package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.js.map +1 -1
  32. package/FlowGraph/Blocks/Execution/Audio/flowGraphPlayAudioBlock.d.ts +17 -0
  33. package/FlowGraph/Blocks/Execution/Audio/flowGraphPlayAudioBlock.js +21 -0
  34. package/FlowGraph/Blocks/Execution/Audio/flowGraphPlayAudioBlock.js.map +1 -0
  35. package/FlowGraph/Blocks/Execution/Audio/flowGraphStopAudioBlock.d.ts +17 -0
  36. package/FlowGraph/Blocks/Execution/Audio/flowGraphStopAudioBlock.js +20 -0
  37. package/FlowGraph/Blocks/Execution/Audio/flowGraphStopAudioBlock.js.map +1 -0
  38. package/FlowGraph/Blocks/Execution/Audio/index.d.ts +2 -0
  39. package/FlowGraph/Blocks/Execution/Audio/index.js +3 -0
  40. package/FlowGraph/Blocks/Execution/Audio/index.js.map +1 -0
  41. package/FlowGraph/Blocks/Execution/ControlFlow/{flowGraphConditionalBlock.js → flowGraphBranchBlock.js} +1 -1
  42. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphBranchBlock.js.map +1 -0
  43. package/FlowGraph/Blocks/Execution/ControlFlow/index.d.ts +1 -1
  44. package/FlowGraph/Blocks/Execution/ControlFlow/index.js +1 -1
  45. package/FlowGraph/Blocks/Execution/ControlFlow/index.js.map +1 -1
  46. package/FlowGraph/Blocks/Execution/flowGraphCustomFunctionBlock.d.ts +23 -0
  47. package/FlowGraph/Blocks/Execution/flowGraphCustomFunctionBlock.js +18 -0
  48. package/FlowGraph/Blocks/Execution/flowGraphCustomFunctionBlock.js.map +1 -0
  49. package/FlowGraph/Blocks/Execution/index.d.ts +1 -0
  50. package/FlowGraph/Blocks/Execution/index.js +2 -0
  51. package/FlowGraph/Blocks/Execution/index.js.map +1 -1
  52. package/FlowGraph/flowGraph.d.ts +14 -0
  53. package/FlowGraph/flowGraph.js +23 -0
  54. package/FlowGraph/flowGraph.js.map +1 -1
  55. package/FlowGraph/flowGraphCoordinator.d.ts +45 -0
  56. package/FlowGraph/flowGraphCoordinator.js +73 -0
  57. package/FlowGraph/flowGraphCoordinator.js.map +1 -0
  58. package/FlowGraph/flowGraphDataConnection.d.ts +11 -0
  59. package/FlowGraph/flowGraphDataConnection.js +17 -0
  60. package/FlowGraph/flowGraphDataConnection.js.map +1 -1
  61. package/FlowGraph/flowGraphRichTypes.d.ts +8 -1
  62. package/FlowGraph/flowGraphRichTypes.js +44 -1
  63. package/FlowGraph/flowGraphRichTypes.js.map +1 -1
  64. package/FlowGraph/index.d.ts +1 -0
  65. package/FlowGraph/index.js +1 -0
  66. package/FlowGraph/index.js.map +1 -1
  67. package/Gizmos/boundingBoxGizmo.js +13 -11
  68. package/Gizmos/boundingBoxGizmo.js.map +1 -1
  69. package/Gizmos/gizmo.js +3 -1
  70. package/Gizmos/gizmo.js.map +1 -1
  71. package/Gizmos/planeRotationGizmo.js +5 -0
  72. package/Gizmos/planeRotationGizmo.js.map +1 -1
  73. package/Gizmos/positionGizmo.d.ts +4 -0
  74. package/Gizmos/positionGizmo.js +6 -0
  75. package/Gizmos/positionGizmo.js.map +1 -1
  76. package/Gizmos/rotationGizmo.d.ts +4 -0
  77. package/Gizmos/rotationGizmo.js +6 -0
  78. package/Gizmos/rotationGizmo.js.map +1 -1
  79. package/Gizmos/scaleGizmo.d.ts +4 -0
  80. package/Gizmos/scaleGizmo.js +6 -0
  81. package/Gizmos/scaleGizmo.js.map +1 -1
  82. package/Maths/math.path.d.ts +1 -1
  83. package/Maths/math.path.js +1 -1
  84. package/Maths/math.path.js.map +1 -1
  85. package/Maths/math.vector.js +3 -3
  86. package/Maths/math.vector.js.map +1 -1
  87. package/Meshes/Node/Blocks/booleanGeometryBlock.d.ts +58 -0
  88. package/Meshes/Node/Blocks/booleanGeometryBlock.js +135 -0
  89. package/Meshes/Node/Blocks/booleanGeometryBlock.js.map +1 -0
  90. package/Meshes/Node/Blocks/geometryCollectionBlock.js +3 -0
  91. package/Meshes/Node/Blocks/geometryCollectionBlock.js.map +1 -1
  92. package/Meshes/Node/Blocks/mappingBlock.d.ts +4 -0
  93. package/Meshes/Node/Blocks/mappingBlock.js +23 -14
  94. package/Meshes/Node/Blocks/mappingBlock.js.map +1 -1
  95. package/Meshes/Node/Blocks/mergeGeometryBlock.js +0 -2
  96. package/Meshes/Node/Blocks/mergeGeometryBlock.js.map +1 -1
  97. package/Meshes/Node/index.d.ts +1 -0
  98. package/Meshes/Node/index.js +1 -0
  99. package/Meshes/Node/index.js.map +1 -1
  100. package/Meshes/csg.d.ts +169 -1
  101. package/Meshes/csg.js +107 -43
  102. package/Meshes/csg.js.map +1 -1
  103. package/Misc/textureTools.d.ts +24 -0
  104. package/Misc/textureTools.js +86 -0
  105. package/Misc/textureTools.js.map +1 -1
  106. package/Rendering/depthPeelingRenderer.js +6 -0
  107. package/Rendering/depthPeelingRenderer.js.map +1 -1
  108. package/package.json +1 -1
  109. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphConditionalBlock.js.map +0 -1
  110. /package/FlowGraph/Blocks/Execution/ControlFlow/{flowGraphConditionalBlock.d.ts → flowGraphBranchBlock.d.ts} +0 -0
@@ -0,0 +1,167 @@
1
+ import { Matrix, Quaternion, Vector3 } from "../../../../Maths/math.vector";
2
+ import { FlowGraphBinaryOperationBlock } from "../flowGraphBinaryOperationBlock";
3
+ import { FlowGraphUnaryOperationBlock } from "../flowGraphUnaryOperationBlock";
4
+ import { FlowGraphBlock } from "../../../flowGraphBlock";
5
+ import type { FlowGraphDataConnection } from "../../../flowGraphDataConnection";
6
+ import type { FlowGraphContext } from "../../../flowGraphContext";
7
+ import type { TransformNode } from "../../../../Meshes/transformNode";
8
+ /**
9
+ * Adds two matrices together.
10
+ * @experimental
11
+ */
12
+ export declare class FlowGraphAddMatrixBlock extends FlowGraphBinaryOperationBlock<Matrix, Matrix, Matrix> {
13
+ constructor();
14
+ }
15
+ /**
16
+ * Adds a matrix and a number together.
17
+ * @experimental
18
+ */
19
+ export declare class FlowGraphAddMatrixAndNumberBlock extends FlowGraphBinaryOperationBlock<Matrix, number, Matrix> {
20
+ private _cachedArray;
21
+ private _cachedMatrix;
22
+ constructor();
23
+ }
24
+ /**
25
+ * Subtracts two matrices.
26
+ * @experimental
27
+ */
28
+ export declare class FlowGraphSubtractMatrixBlock extends FlowGraphBinaryOperationBlock<Matrix, Matrix, Matrix> {
29
+ private _cachedMatrix;
30
+ constructor();
31
+ }
32
+ /**
33
+ * Subtracts a matrix and a number together.
34
+ * @experimental
35
+ */
36
+ export declare class FlowGraphSubtractMatrixAndNumberBlock extends FlowGraphBinaryOperationBlock<Matrix, number, Matrix> {
37
+ private _cachedArray;
38
+ private _cachedMatrix;
39
+ constructor();
40
+ }
41
+ /**
42
+ * Multiplies two matrices together.
43
+ * @experimental
44
+ */
45
+ export declare class FlowGraphMultiplyMatrixBlock extends FlowGraphBinaryOperationBlock<Matrix, Matrix, Matrix> {
46
+ private _cachedMatrix;
47
+ constructor();
48
+ }
49
+ /**
50
+ * Divides two matrices.
51
+ * @experimental
52
+ */
53
+ export declare class FlowGraphDivideMatrixBlock extends FlowGraphBinaryOperationBlock<Matrix, Matrix, Matrix> {
54
+ private _cachedResultMatrix;
55
+ constructor();
56
+ }
57
+ /**
58
+ * Divides a matrix and a number together.
59
+ * @experimental
60
+ */
61
+ export declare class FlowGraphDivideMatrixAndNumberBlock extends FlowGraphBinaryOperationBlock<Matrix, number, Matrix> {
62
+ private _cachedArray;
63
+ private _cachedMatrix;
64
+ constructor();
65
+ }
66
+ /**
67
+ * Scales a matrix by a number.
68
+ * @experimental
69
+ */
70
+ export declare class FlowGraphScaleMatrixBlock extends FlowGraphBinaryOperationBlock<Matrix, number, Matrix> {
71
+ private _cachedMatrix;
72
+ constructor();
73
+ }
74
+ /**
75
+ * Clamps each value in a matrix between a minimum and maximum value.
76
+ * @experimental
77
+ */
78
+ export declare class FlowGraphClampMatrixBlock extends FlowGraphBlock {
79
+ /**
80
+ * Input connection: The matrix to clamp.
81
+ */
82
+ readonly input: FlowGraphDataConnection<Matrix>;
83
+ /**
84
+ * Output connection: The clamped matrix.
85
+ */
86
+ readonly output: FlowGraphDataConnection<Matrix>;
87
+ /**
88
+ * Input connection: The minimum value.
89
+ */
90
+ readonly min: FlowGraphDataConnection<number>;
91
+ /**
92
+ * Input connection: The maximum value.
93
+ */
94
+ readonly max: FlowGraphDataConnection<number>;
95
+ private _cachedArray;
96
+ private _cachedMatrix;
97
+ constructor();
98
+ _updateOutputs(_context: FlowGraphContext): void;
99
+ }
100
+ /**
101
+ * Decomposes a matrix into its translation, rotation and scale components.
102
+ * @experimental
103
+ */
104
+ export declare class FlowGraphDecomposeMatrixBlock extends FlowGraphBlock {
105
+ /**
106
+ * Input connection: The matrix to decompose.
107
+ */
108
+ readonly input: FlowGraphDataConnection<Matrix>;
109
+ /**
110
+ * Output connection: The translation component of the matrix.
111
+ */
112
+ readonly translation: FlowGraphDataConnection<Vector3>;
113
+ /**
114
+ * Output connection: The rotation component of the matrix.
115
+ */
116
+ readonly rotation: FlowGraphDataConnection<Quaternion>;
117
+ /**
118
+ * Output connection: The scale component of the matrix.
119
+ */
120
+ readonly scale: FlowGraphDataConnection<Vector3>;
121
+ private _cachedTranslation;
122
+ private _cachedRotation;
123
+ private _cachedScale;
124
+ constructor();
125
+ _updateOutputs(_context: FlowGraphContext): void;
126
+ }
127
+ /**
128
+ * Decomposes a matrix into its translation, rotation and scale components.
129
+ * @experimental
130
+ */
131
+ export declare class FlowGraphComposeMatrixBlock extends FlowGraphBlock {
132
+ /**
133
+ * Output connection: The matrix to compose.
134
+ */
135
+ readonly output: FlowGraphDataConnection<Matrix>;
136
+ /**
137
+ * Input connection: The translation component of the matrix.
138
+ */
139
+ readonly translation: FlowGraphDataConnection<Vector3>;
140
+ /**
141
+ * Input connection: The rotation component of the matrix.
142
+ */
143
+ readonly rotation: FlowGraphDataConnection<Quaternion>;
144
+ /**
145
+ * Input connection: The scale component of the matrix.
146
+ */
147
+ readonly scale: FlowGraphDataConnection<Vector3>;
148
+ private _cachedMatrix;
149
+ constructor();
150
+ _updateOutputs(_context: FlowGraphContext): void;
151
+ }
152
+ /**
153
+ * Converts a quaternion to a rotation matrix.
154
+ * @experimental
155
+ */
156
+ export declare class FlowGraphQuaternionToRotationMatrixBlock extends FlowGraphUnaryOperationBlock<Quaternion, Matrix> {
157
+ private _cachedMatrix;
158
+ constructor();
159
+ }
160
+ /**
161
+ * Given the Transform Nodes A and B, gives the matrix required
162
+ * to transform coordinates from A's local space to B's local space.
163
+ */
164
+ export declare class FlowGraphGetTransformationMatrixBlock extends FlowGraphBinaryOperationBlock<TransformNode, TransformNode, Matrix> {
165
+ private _cachedResult;
166
+ constructor();
167
+ }
@@ -0,0 +1,198 @@
1
+ import { Matrix, Quaternion, TmpVectors, Vector3 } from "../../../../Maths/math.vector.js";
2
+ import { FlowGraphBinaryOperationBlock } from "../flowGraphBinaryOperationBlock.js";
3
+ import { RichTypeAny, RichTypeMatrix, RichTypeNumber, RichTypeQuaternion, RichTypeVector3 } from "../../../flowGraphRichTypes.js";
4
+ import { FlowGraphUnaryOperationBlock } from "../flowGraphUnaryOperationBlock.js";
5
+ import { FlowGraphBlock } from "../../../flowGraphBlock.js";
6
+ /**
7
+ * Adds two matrices together.
8
+ * @experimental
9
+ */
10
+ export class FlowGraphAddMatrixBlock extends FlowGraphBinaryOperationBlock {
11
+ constructor() {
12
+ super(RichTypeMatrix, RichTypeMatrix, RichTypeMatrix, (left, right) => left.add(right));
13
+ }
14
+ }
15
+ /**
16
+ * Adds a matrix and a number together.
17
+ * @experimental
18
+ */
19
+ export class FlowGraphAddMatrixAndNumberBlock extends FlowGraphBinaryOperationBlock {
20
+ constructor() {
21
+ super(RichTypeMatrix, RichTypeNumber, RichTypeMatrix, (left, right) => {
22
+ for (let i = 0; i < left.m.length; i++) {
23
+ this._cachedArray[i] = left.m[i] + right;
24
+ }
25
+ return Matrix.FromArrayToRef(this._cachedArray, 0, this._cachedMatrix);
26
+ });
27
+ this._cachedArray = new Float32Array(16);
28
+ this._cachedMatrix = Matrix.Zero();
29
+ }
30
+ }
31
+ /**
32
+ * Subtracts two matrices.
33
+ * @experimental
34
+ */
35
+ export class FlowGraphSubtractMatrixBlock extends FlowGraphBinaryOperationBlock {
36
+ constructor() {
37
+ super(RichTypeMatrix, RichTypeMatrix, RichTypeMatrix, (left, right) => left.addToRef(right.scaleToRef(-1, TmpVectors.Matrix[0]), this._cachedMatrix));
38
+ this._cachedMatrix = Matrix.Zero();
39
+ }
40
+ }
41
+ /**
42
+ * Subtracts a matrix and a number together.
43
+ * @experimental
44
+ */
45
+ export class FlowGraphSubtractMatrixAndNumberBlock extends FlowGraphBinaryOperationBlock {
46
+ constructor() {
47
+ super(RichTypeMatrix, RichTypeNumber, RichTypeMatrix, (left, right) => {
48
+ for (let i = 0; i < left.m.length; i++) {
49
+ this._cachedArray[i] = left.m[i] - right;
50
+ }
51
+ return Matrix.FromArrayToRef(this._cachedArray, 0, this._cachedMatrix);
52
+ });
53
+ this._cachedArray = new Float32Array(16);
54
+ this._cachedMatrix = Matrix.Zero();
55
+ }
56
+ }
57
+ /**
58
+ * Multiplies two matrices together.
59
+ * @experimental
60
+ */
61
+ export class FlowGraphMultiplyMatrixBlock extends FlowGraphBinaryOperationBlock {
62
+ constructor() {
63
+ super(RichTypeMatrix, RichTypeMatrix, RichTypeMatrix, (left, right) => left.multiplyToRef(right, this._cachedMatrix));
64
+ this._cachedMatrix = Matrix.Zero();
65
+ }
66
+ }
67
+ /**
68
+ * Divides two matrices.
69
+ * @experimental
70
+ */
71
+ export class FlowGraphDivideMatrixBlock extends FlowGraphBinaryOperationBlock {
72
+ constructor() {
73
+ super(RichTypeMatrix, RichTypeMatrix, RichTypeMatrix, (left, right) => left.multiplyToRef(right.invertToRef(TmpVectors.Matrix[0]), this._cachedResultMatrix));
74
+ this._cachedResultMatrix = Matrix.Zero();
75
+ }
76
+ }
77
+ /**
78
+ * Divides a matrix and a number together.
79
+ * @experimental
80
+ */
81
+ export class FlowGraphDivideMatrixAndNumberBlock extends FlowGraphBinaryOperationBlock {
82
+ constructor() {
83
+ super(RichTypeMatrix, RichTypeNumber, RichTypeMatrix, (left, right) => {
84
+ for (let i = 0; i < left.m.length; i++) {
85
+ this._cachedArray[i] = left.m[i] / right;
86
+ }
87
+ return Matrix.FromArrayToRef(this._cachedArray, 0, this._cachedMatrix);
88
+ });
89
+ this._cachedArray = new Float32Array(16);
90
+ this._cachedMatrix = Matrix.Zero();
91
+ }
92
+ }
93
+ /**
94
+ * Scales a matrix by a number.
95
+ * @experimental
96
+ */
97
+ export class FlowGraphScaleMatrixBlock extends FlowGraphBinaryOperationBlock {
98
+ constructor() {
99
+ super(RichTypeMatrix, RichTypeNumber, RichTypeMatrix, (left, right) => left.scaleToRef(right, this._cachedMatrix));
100
+ this._cachedMatrix = Matrix.Zero();
101
+ }
102
+ }
103
+ /**
104
+ * Clamps each value in a matrix between a minimum and maximum value.
105
+ * @experimental
106
+ */
107
+ export class FlowGraphClampMatrixBlock extends FlowGraphBlock {
108
+ constructor() {
109
+ super();
110
+ this._cachedArray = new Float32Array(16);
111
+ this._cachedMatrix = Matrix.Identity();
112
+ this.input = this._registerDataInput("input", RichTypeMatrix);
113
+ this.min = this._registerDataInput("min", RichTypeNumber);
114
+ this.max = this._registerDataInput("max", RichTypeNumber);
115
+ this.output = this._registerDataOutput("output", RichTypeMatrix);
116
+ }
117
+ _updateOutputs(_context) {
118
+ const input = this.input.getValue(_context);
119
+ const min = this.min.getValue(_context);
120
+ const max = this.max.getValue(_context);
121
+ for (let i = 0; i < input.m.length; i++) {
122
+ this._cachedArray[i] = Math.min(Math.max(input.m[i], min), max);
123
+ }
124
+ Matrix.FromArrayToRef(this._cachedArray, 0, this._cachedMatrix);
125
+ this.output.setValue(this._cachedMatrix, _context);
126
+ }
127
+ }
128
+ /**
129
+ * Decomposes a matrix into its translation, rotation and scale components.
130
+ * @experimental
131
+ */
132
+ export class FlowGraphDecomposeMatrixBlock extends FlowGraphBlock {
133
+ constructor() {
134
+ super();
135
+ this._cachedTranslation = new Vector3();
136
+ this._cachedRotation = new Quaternion();
137
+ this._cachedScale = new Vector3();
138
+ this.input = this._registerDataInput("input", RichTypeMatrix);
139
+ this.translation = this._registerDataOutput("translation", RichTypeVector3);
140
+ this.rotation = this._registerDataOutput("rotation", RichTypeQuaternion);
141
+ this.scale = this._registerDataOutput("scale", RichTypeVector3);
142
+ }
143
+ _updateOutputs(_context) {
144
+ const input = this.input.getValue(_context);
145
+ input.decompose(this._cachedScale, this._cachedRotation, this._cachedTranslation);
146
+ this.translation.setValue(this._cachedTranslation, _context);
147
+ this.rotation.setValue(this._cachedRotation, _context);
148
+ this.scale.setValue(this._cachedScale, _context);
149
+ }
150
+ }
151
+ /**
152
+ * Decomposes a matrix into its translation, rotation and scale components.
153
+ * @experimental
154
+ */
155
+ export class FlowGraphComposeMatrixBlock extends FlowGraphBlock {
156
+ constructor() {
157
+ super();
158
+ this._cachedMatrix = new Matrix();
159
+ this.output = this._registerDataOutput("input", RichTypeMatrix);
160
+ this.translation = this._registerDataInput("translation", RichTypeVector3);
161
+ this.rotation = this._registerDataInput("rotation", RichTypeQuaternion);
162
+ this.scale = this._registerDataInput("scale", RichTypeVector3);
163
+ }
164
+ _updateOutputs(_context) {
165
+ const translation = this.translation.getValue(_context);
166
+ const rotation = this.rotation.getValue(_context);
167
+ const scale = this.scale.getValue(_context);
168
+ Matrix.ComposeToRef(scale, rotation, translation, this._cachedMatrix);
169
+ this.output.setValue(this._cachedMatrix, _context);
170
+ }
171
+ }
172
+ /**
173
+ * Converts a quaternion to a rotation matrix.
174
+ * @experimental
175
+ */
176
+ export class FlowGraphQuaternionToRotationMatrixBlock extends FlowGraphUnaryOperationBlock {
177
+ constructor() {
178
+ super(RichTypeQuaternion, RichTypeMatrix, (value) => Matrix.FromQuaternionToRef(value, this._cachedMatrix));
179
+ this._cachedMatrix = new Matrix();
180
+ }
181
+ }
182
+ /**
183
+ * Given the Transform Nodes A and B, gives the matrix required
184
+ * to transform coordinates from A's local space to B's local space.
185
+ */
186
+ export class FlowGraphGetTransformationMatrixBlock extends FlowGraphBinaryOperationBlock {
187
+ constructor() {
188
+ super(RichTypeAny, RichTypeAny, RichTypeMatrix, (left, right) => {
189
+ const aMatrix = left.getWorldMatrix();
190
+ const bMatrix = right.getWorldMatrix();
191
+ const inverseB = bMatrix.invertToRef(TmpVectors.Matrix[0]);
192
+ const result = inverseB.multiplyToRef(aMatrix, this._cachedResult);
193
+ return result;
194
+ });
195
+ this._cachedResult = Matrix.Zero();
196
+ }
197
+ }
198
+ //# sourceMappingURL=flowGraphMatrixBlocks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flowGraphMatrixBlocks.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/FlowGraph/Blocks/Data/Math/flowGraphMatrixBlocks.ts"],"names":[],"mappings":"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","sourcesContent":["import { Matrix, Quaternion, TmpVectors, Vector3 } from \"../../../../Maths/math.vector\";\r\nimport { FlowGraphBinaryOperationBlock } from \"../flowGraphBinaryOperationBlock\";\r\nimport { RichTypeAny, RichTypeMatrix, RichTypeNumber, RichTypeQuaternion, RichTypeVector3 } from \"../../../flowGraphRichTypes\";\r\nimport { FlowGraphUnaryOperationBlock } from \"../flowGraphUnaryOperationBlock\";\r\nimport { FlowGraphBlock } from \"../../../flowGraphBlock\";\r\nimport type { FlowGraphDataConnection } from \"../../../flowGraphDataConnection\";\r\nimport type { FlowGraphContext } from \"../../../flowGraphContext\";\r\nimport type { TransformNode } from \"../../../../Meshes/transformNode\";\r\n\r\n/**\r\n * Adds two matrices together.\r\n * @experimental\r\n */\r\nexport class FlowGraphAddMatrixBlock extends FlowGraphBinaryOperationBlock<Matrix, Matrix, Matrix> {\r\n constructor() {\r\n super(RichTypeMatrix, RichTypeMatrix, RichTypeMatrix, (left, right) => left.add(right));\r\n }\r\n}\r\n\r\n/**\r\n * Adds a matrix and a number together.\r\n * @experimental\r\n */\r\nexport class FlowGraphAddMatrixAndNumberBlock extends FlowGraphBinaryOperationBlock<Matrix, number, Matrix> {\r\n private _cachedArray: Float32Array = new Float32Array(16);\r\n private _cachedMatrix: Matrix = Matrix.Zero();\r\n constructor() {\r\n super(RichTypeMatrix, RichTypeNumber, RichTypeMatrix, (left, right) => {\r\n for (let i = 0; i < left.m.length; i++) {\r\n this._cachedArray[i] = left.m[i] + right;\r\n }\r\n return Matrix.FromArrayToRef(this._cachedArray, 0, this._cachedMatrix);\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Subtracts two matrices.\r\n * @experimental\r\n */\r\nexport class FlowGraphSubtractMatrixBlock extends FlowGraphBinaryOperationBlock<Matrix, Matrix, Matrix> {\r\n private _cachedMatrix: Matrix = Matrix.Zero();\r\n constructor() {\r\n super(RichTypeMatrix, RichTypeMatrix, RichTypeMatrix, (left, right) => left.addToRef(right.scaleToRef(-1, TmpVectors.Matrix[0]), this._cachedMatrix));\r\n }\r\n}\r\n\r\n/**\r\n * Subtracts a matrix and a number together.\r\n * @experimental\r\n */\r\nexport class FlowGraphSubtractMatrixAndNumberBlock extends FlowGraphBinaryOperationBlock<Matrix, number, Matrix> {\r\n private _cachedArray: Float32Array = new Float32Array(16);\r\n private _cachedMatrix: Matrix = Matrix.Zero();\r\n constructor() {\r\n super(RichTypeMatrix, RichTypeNumber, RichTypeMatrix, (left, right) => {\r\n for (let i = 0; i < left.m.length; i++) {\r\n this._cachedArray[i] = left.m[i] - right;\r\n }\r\n return Matrix.FromArrayToRef(this._cachedArray, 0, this._cachedMatrix);\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Multiplies two matrices together.\r\n * @experimental\r\n */\r\nexport class FlowGraphMultiplyMatrixBlock extends FlowGraphBinaryOperationBlock<Matrix, Matrix, Matrix> {\r\n private _cachedMatrix: Matrix = Matrix.Zero();\r\n constructor() {\r\n super(RichTypeMatrix, RichTypeMatrix, RichTypeMatrix, (left, right) => left.multiplyToRef(right, this._cachedMatrix));\r\n }\r\n}\r\n\r\n/**\r\n * Divides two matrices.\r\n * @experimental\r\n */\r\nexport class FlowGraphDivideMatrixBlock extends FlowGraphBinaryOperationBlock<Matrix, Matrix, Matrix> {\r\n private _cachedResultMatrix: Matrix = Matrix.Zero();\r\n constructor() {\r\n super(RichTypeMatrix, RichTypeMatrix, RichTypeMatrix, (left, right) => left.multiplyToRef(right.invertToRef(TmpVectors.Matrix[0]), this._cachedResultMatrix));\r\n }\r\n}\r\n\r\n/**\r\n * Divides a matrix and a number together.\r\n * @experimental\r\n */\r\nexport class FlowGraphDivideMatrixAndNumberBlock extends FlowGraphBinaryOperationBlock<Matrix, number, Matrix> {\r\n private _cachedArray: Float32Array = new Float32Array(16);\r\n private _cachedMatrix: Matrix = Matrix.Zero();\r\n constructor() {\r\n super(RichTypeMatrix, RichTypeNumber, RichTypeMatrix, (left, right) => {\r\n for (let i = 0; i < left.m.length; i++) {\r\n this._cachedArray[i] = left.m[i] / right;\r\n }\r\n return Matrix.FromArrayToRef(this._cachedArray, 0, this._cachedMatrix);\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Scales a matrix by a number.\r\n * @experimental\r\n */\r\nexport class FlowGraphScaleMatrixBlock extends FlowGraphBinaryOperationBlock<Matrix, number, Matrix> {\r\n private _cachedMatrix = Matrix.Zero();\r\n constructor() {\r\n super(RichTypeMatrix, RichTypeNumber, RichTypeMatrix, (left, right) => left.scaleToRef(right, this._cachedMatrix));\r\n }\r\n}\r\n\r\n/**\r\n * Clamps each value in a matrix between a minimum and maximum value.\r\n * @experimental\r\n */\r\nexport class FlowGraphClampMatrixBlock extends FlowGraphBlock {\r\n /**\r\n * Input connection: The matrix to clamp.\r\n */\r\n public readonly input: FlowGraphDataConnection<Matrix>;\r\n /**\r\n * Output connection: The clamped matrix.\r\n */\r\n public readonly output: FlowGraphDataConnection<Matrix>;\r\n /**\r\n * Input connection: The minimum value.\r\n */\r\n public readonly min: FlowGraphDataConnection<number>;\r\n /**\r\n * Input connection: The maximum value.\r\n */\r\n public readonly max: FlowGraphDataConnection<number>;\r\n private _cachedArray: Float32Array = new Float32Array(16);\r\n private _cachedMatrix: Matrix = Matrix.Identity();\r\n constructor() {\r\n super();\r\n\r\n this.input = this._registerDataInput(\"input\", RichTypeMatrix);\r\n this.min = this._registerDataInput(\"min\", RichTypeNumber);\r\n this.max = this._registerDataInput(\"max\", RichTypeNumber);\r\n this.output = this._registerDataOutput(\"output\", RichTypeMatrix);\r\n }\r\n\r\n public _updateOutputs(_context: FlowGraphContext): void {\r\n const input = this.input.getValue(_context);\r\n const min = this.min.getValue(_context);\r\n const max = this.max.getValue(_context);\r\n\r\n for (let i = 0; i < input.m.length; i++) {\r\n this._cachedArray[i] = Math.min(Math.max(input.m[i], min), max);\r\n }\r\n\r\n Matrix.FromArrayToRef(this._cachedArray, 0, this._cachedMatrix);\r\n this.output.setValue(this._cachedMatrix, _context);\r\n }\r\n}\r\n\r\n/**\r\n * Decomposes a matrix into its translation, rotation and scale components.\r\n * @experimental\r\n */\r\nexport class FlowGraphDecomposeMatrixBlock extends FlowGraphBlock {\r\n /**\r\n * Input connection: The matrix to decompose.\r\n */\r\n public readonly input: FlowGraphDataConnection<Matrix>;\r\n /**\r\n * Output connection: The translation component of the matrix.\r\n */\r\n public readonly translation: FlowGraphDataConnection<Vector3>;\r\n /**\r\n * Output connection: The rotation component of the matrix.\r\n */\r\n public readonly rotation: FlowGraphDataConnection<Quaternion>;\r\n /**\r\n * Output connection: The scale component of the matrix.\r\n */\r\n public readonly scale: FlowGraphDataConnection<Vector3>;\r\n\r\n private _cachedTranslation = new Vector3();\r\n private _cachedRotation = new Quaternion();\r\n private _cachedScale = new Vector3();\r\n\r\n public constructor() {\r\n super();\r\n\r\n this.input = this._registerDataInput(\"input\", RichTypeMatrix);\r\n this.translation = this._registerDataOutput(\"translation\", RichTypeVector3);\r\n this.rotation = this._registerDataOutput(\"rotation\", RichTypeQuaternion);\r\n this.scale = this._registerDataOutput(\"scale\", RichTypeVector3);\r\n }\r\n\r\n public _updateOutputs(_context: FlowGraphContext): void {\r\n const input = this.input.getValue(_context);\r\n\r\n input.decompose(this._cachedScale, this._cachedRotation, this._cachedTranslation);\r\n\r\n this.translation.setValue(this._cachedTranslation, _context);\r\n this.rotation.setValue(this._cachedRotation, _context);\r\n this.scale.setValue(this._cachedScale, _context);\r\n }\r\n}\r\n\r\n/**\r\n * Decomposes a matrix into its translation, rotation and scale components.\r\n * @experimental\r\n */\r\nexport class FlowGraphComposeMatrixBlock extends FlowGraphBlock {\r\n /**\r\n * Output connection: The matrix to compose.\r\n */\r\n public readonly output: FlowGraphDataConnection<Matrix>;\r\n /**\r\n * Input connection: The translation component of the matrix.\r\n */\r\n public readonly translation: FlowGraphDataConnection<Vector3>;\r\n /**\r\n * Input connection: The rotation component of the matrix.\r\n */\r\n public readonly rotation: FlowGraphDataConnection<Quaternion>;\r\n /**\r\n * Input connection: The scale component of the matrix.\r\n */\r\n public readonly scale: FlowGraphDataConnection<Vector3>;\r\n\r\n private _cachedMatrix = new Matrix();\r\n\r\n public constructor() {\r\n super();\r\n\r\n this.output = this._registerDataOutput(\"input\", RichTypeMatrix);\r\n this.translation = this._registerDataInput(\"translation\", RichTypeVector3);\r\n this.rotation = this._registerDataInput(\"rotation\", RichTypeQuaternion);\r\n this.scale = this._registerDataInput(\"scale\", RichTypeVector3);\r\n }\r\n\r\n public _updateOutputs(_context: FlowGraphContext): void {\r\n const translation = this.translation.getValue(_context);\r\n const rotation = this.rotation.getValue(_context);\r\n const scale = this.scale.getValue(_context);\r\n\r\n Matrix.ComposeToRef(scale, rotation, translation, this._cachedMatrix);\r\n\r\n this.output.setValue(this._cachedMatrix, _context);\r\n }\r\n}\r\n\r\n/**\r\n * Converts a quaternion to a rotation matrix.\r\n * @experimental\r\n */\r\nexport class FlowGraphQuaternionToRotationMatrixBlock extends FlowGraphUnaryOperationBlock<Quaternion, Matrix> {\r\n private _cachedMatrix = new Matrix();\r\n constructor() {\r\n super(RichTypeQuaternion, RichTypeMatrix, (value) => Matrix.FromQuaternionToRef(value, this._cachedMatrix));\r\n }\r\n}\r\n\r\n/**\r\n * Given the Transform Nodes A and B, gives the matrix required\r\n * to transform coordinates from A's local space to B's local space.\r\n */\r\nexport class FlowGraphGetTransformationMatrixBlock extends FlowGraphBinaryOperationBlock<TransformNode, TransformNode, Matrix> {\r\n private _cachedResult: Matrix = Matrix.Zero();\r\n constructor() {\r\n super(RichTypeAny, RichTypeAny, RichTypeMatrix, (left: TransformNode, right: TransformNode) => {\r\n const aMatrix = left.getWorldMatrix();\r\n const bMatrix = right.getWorldMatrix();\r\n\r\n const inverseB = bMatrix.invertToRef(TmpVectors.Matrix[0]);\r\n const result = inverseB.multiplyToRef(aMatrix, this._cachedResult);\r\n return result;\r\n });\r\n }\r\n}\r\n"]}
@@ -1,6 +1,9 @@
1
- import type { Vector2 } from "../../../../Maths/math.vector";
1
+ import { Vector2 } from "../../../../Maths/math.vector";
2
2
  import { FlowGraphBinaryOperationBlock } from "../flowGraphBinaryOperationBlock";
3
3
  import { FlowGraphUnaryOperationBlock } from "../flowGraphUnaryOperationBlock";
4
+ import type { FlowGraphDataConnection } from "../../../flowGraphDataConnection";
5
+ import { FlowGraphBlock } from "../../../flowGraphBlock";
6
+ import type { FlowGraphContext } from "../../../flowGraphContext";
4
7
  /**
5
8
  * Adds two vectors together.
6
9
  * @experimental
@@ -50,3 +53,62 @@ export declare class FlowGraphLengthVector2Block extends FlowGraphUnaryOperation
50
53
  export declare class FlowGraphNormalizeVector2Block extends FlowGraphUnaryOperationBlock<Vector2, Vector2> {
51
54
  constructor();
52
55
  }
56
+ /**
57
+ * Creates a vector from two components.
58
+ */
59
+ export declare class FlowGraphCreateVector2Block extends FlowGraphBlock {
60
+ /**
61
+ * Input connection: The x component of the vector.
62
+ */
63
+ readonly x: FlowGraphDataConnection<number>;
64
+ /**
65
+ * Input connection: The y component of the vector.
66
+ */
67
+ readonly y: FlowGraphDataConnection<number>;
68
+ /**
69
+ * Output connection: The created vector.
70
+ */
71
+ readonly vector: FlowGraphDataConnection<Vector2>;
72
+ private _cachedVector;
73
+ constructor();
74
+ _updateOutputs(_context: FlowGraphContext): void;
75
+ }
76
+ /**
77
+ * Split a vector into its components.
78
+ */
79
+ export declare class FlowGraphSplitVector2Block extends FlowGraphBlock {
80
+ /**
81
+ * Input connection: The vector to split.
82
+ */
83
+ readonly vector: FlowGraphDataConnection<Vector2>;
84
+ /**
85
+ * Output connection: The x component of the vector.
86
+ */
87
+ readonly x: FlowGraphDataConnection<number>;
88
+ /**
89
+ * Output connection: The y component of the vector.
90
+ */
91
+ readonly y: FlowGraphDataConnection<number>;
92
+ constructor();
93
+ _updateOutputs(_context: FlowGraphContext): void;
94
+ }
95
+ /**
96
+ * Rotates a vector by a given angle.
97
+ */
98
+ export declare class FlowGraphRotate2dVector2Block extends FlowGraphBlock {
99
+ /**
100
+ * Input connection: The vector to rotate.
101
+ */
102
+ readonly input: FlowGraphDataConnection<Vector2>;
103
+ /**
104
+ * Input connection: The angle to rotate by.
105
+ */
106
+ readonly angle: FlowGraphDataConnection<number>;
107
+ /**
108
+ * Output connection: The rotated vector.
109
+ */
110
+ readonly output: FlowGraphDataConnection<Vector2>;
111
+ private _cachedVector;
112
+ constructor();
113
+ _updateOutputs(_context: FlowGraphContext): void;
114
+ }
@@ -1,6 +1,8 @@
1
1
  import { RichTypeNumber, RichTypeVector2 } from "../../../flowGraphRichTypes.js";
2
+ import { Vector2 } from "../../../../Maths/math.vector.js";
2
3
  import { FlowGraphBinaryOperationBlock } from "../flowGraphBinaryOperationBlock.js";
3
4
  import { FlowGraphUnaryOperationBlock } from "../flowGraphUnaryOperationBlock.js";
5
+ import { FlowGraphBlock } from "../../../flowGraphBlock.js";
4
6
  /**
5
7
  * Adds two vectors together.
6
8
  * @experimental
@@ -68,4 +70,56 @@ export class FlowGraphNormalizeVector2Block extends FlowGraphUnaryOperationBlock
68
70
  });
69
71
  }
70
72
  }
73
+ /**
74
+ * Creates a vector from two components.
75
+ */
76
+ export class FlowGraphCreateVector2Block extends FlowGraphBlock {
77
+ constructor() {
78
+ super();
79
+ this._cachedVector = Vector2.Zero();
80
+ this.x = this._registerDataInput("x", RichTypeNumber);
81
+ this.y = this._registerDataInput("y", RichTypeNumber);
82
+ this.vector = this._registerDataOutput("vector", RichTypeVector2);
83
+ }
84
+ _updateOutputs(_context) {
85
+ this._cachedVector.x = this.x.getValue(_context);
86
+ this._cachedVector.y = this.y.getValue(_context);
87
+ this.vector.setValue(this._cachedVector, _context);
88
+ }
89
+ }
90
+ /**
91
+ * Split a vector into its components.
92
+ */
93
+ export class FlowGraphSplitVector2Block extends FlowGraphBlock {
94
+ constructor() {
95
+ super();
96
+ this.vector = this._registerDataInput("vector", RichTypeVector2);
97
+ this.x = this._registerDataOutput("x", RichTypeNumber);
98
+ this.y = this._registerDataOutput("y", RichTypeNumber);
99
+ }
100
+ _updateOutputs(_context) {
101
+ const vector = this.vector.getValue(_context);
102
+ this.x.setValue(vector.x, _context);
103
+ this.y.setValue(vector.y, _context);
104
+ }
105
+ }
106
+ /**
107
+ * Rotates a vector by a given angle.
108
+ */
109
+ export class FlowGraphRotate2dVector2Block extends FlowGraphBlock {
110
+ constructor() {
111
+ super();
112
+ this._cachedVector = Vector2.Zero();
113
+ this.input = this._registerDataInput("input", RichTypeVector2);
114
+ this.angle = this._registerDataInput("angle", RichTypeNumber);
115
+ this.output = this._registerDataOutput("output", RichTypeVector2);
116
+ }
117
+ _updateOutputs(_context) {
118
+ const input = this.input.getValue(_context);
119
+ const angle = this.angle.getValue(_context);
120
+ this._cachedVector.x = input.x * Math.cos(angle) - input.y * Math.sin(angle);
121
+ this._cachedVector.y = input.x * Math.sin(angle) + input.y * Math.cos(angle);
122
+ this.output.setValue(this._cachedVector, _context);
123
+ }
124
+ }
71
125
  //# sourceMappingURL=flowGraphVector2MathBlocks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"flowGraphVector2MathBlocks.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/FlowGraph/Blocks/Data/Math/flowGraphVector2MathBlocks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,uCAA0C;AAEpF,OAAO,EAAE,6BAA6B,EAAE,MAAM,kCAAkC,CAAC;AACjF,OAAO,EAAE,4BAA4B,EAAE,MAAM,iCAAiC,CAAC;AAE/E;;;GAGG;AACH,MAAM,OAAO,wBAAyB,SAAQ,6BAAwD;IAClG;QACI,KAAK,CAAC,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/F,CAAC;CACJ;AAED;;;GAGG;AACH,MAAM,OAAO,6BAA8B,SAAQ,6BAAwD;IACvG;QACI,KAAK,CAAC,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IACpG,CAAC;CACJ;AAED;;;GAGG;AACH,MAAM,OAAO,6BAA8B,SAAQ,6BAAwD;IACvG;QACI,KAAK,CAAC,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IACpG,CAAC;CACJ;AAED;;;GAGG;AACH,MAAM,OAAO,2BAA4B,SAAQ,6BAAwD;IACrG;QACI,KAAK,CAAC,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAClG,CAAC;CACJ;AAED;;;GAGG;AACH,MAAM,OAAO,0BAA2B,SAAQ,6BAAuD;IACnG;QACI,KAAK,CAAC,eAAe,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAChG,CAAC;CACJ;AAED;;;GAGG;AACH,MAAM,OAAO,2BAA4B,SAAQ,4BAA6C;IAC1F;QACI,KAAK,CAAC,eAAe,EAAE,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACtE,CAAC;CACJ;AAED;;;GAGG;AACH,MAAM,OAAO,8BAA+B,SAAQ,4BAA8C;IAC9F;QACI,KAAK,CAAC,eAAe,EAAE,eAAe,EAAE,CAAC,KAAc,EAAE,EAAE;YACvD,MAAM,IAAI,GAAY,KAAK,CAAC,KAAK,EAAE,CAAC;YACpC,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC;QAChB,CAAC,CAAC,CAAC;IACP,CAAC;CACJ","sourcesContent":["import { RichTypeNumber, RichTypeVector2 } from \"core/FlowGraph/flowGraphRichTypes\";\r\nimport type { Vector2 } from \"../../../../Maths/math.vector\";\r\nimport { FlowGraphBinaryOperationBlock } from \"../flowGraphBinaryOperationBlock\";\r\nimport { FlowGraphUnaryOperationBlock } from \"../flowGraphUnaryOperationBlock\";\r\n\r\n/**\r\n * Adds two vectors together.\r\n * @experimental\r\n */\r\nexport class FlowGraphAddVector2Block extends FlowGraphBinaryOperationBlock<Vector2, Vector2, Vector2> {\r\n constructor() {\r\n super(RichTypeVector2, RichTypeVector2, RichTypeVector2, (left, right) => left.add(right));\r\n }\r\n}\r\n\r\n/**\r\n * Subtracts two vectors.\r\n * @experimental\r\n */\r\nexport class FlowGraphSubtractVector2Block extends FlowGraphBinaryOperationBlock<Vector2, Vector2, Vector2> {\r\n constructor() {\r\n super(RichTypeVector2, RichTypeVector2, RichTypeVector2, (left, right) => left.subtract(right));\r\n }\r\n}\r\n\r\n/**\r\n * Multiplies two vectors together.\r\n * @experimental\r\n */\r\nexport class FlowGraphMultiplyVector2Block extends FlowGraphBinaryOperationBlock<Vector2, Vector2, Vector2> {\r\n constructor() {\r\n super(RichTypeVector2, RichTypeVector2, RichTypeVector2, (left, right) => left.multiply(right));\r\n }\r\n}\r\n\r\n/**\r\n * Divides two vectors.\r\n * @experimental\r\n */\r\nexport class FlowGraphDivideVector2Block extends FlowGraphBinaryOperationBlock<Vector2, Vector2, Vector2> {\r\n constructor() {\r\n super(RichTypeVector2, RichTypeVector2, RichTypeVector2, (left, right) => left.divide(right));\r\n }\r\n}\r\n\r\n/**\r\n * Scales a vector by a number.\r\n * @experimental\r\n */\r\nexport class FlowGraphScaleVector2Block extends FlowGraphBinaryOperationBlock<Vector2, number, Vector2> {\r\n constructor() {\r\n super(RichTypeVector2, RichTypeNumber, RichTypeVector2, (left, right) => left.scale(right));\r\n }\r\n}\r\n\r\n/**\r\n * Gets the length of a vector.\r\n * @experimental\r\n */\r\nexport class FlowGraphLengthVector2Block extends FlowGraphUnaryOperationBlock<Vector2, number> {\r\n constructor() {\r\n super(RichTypeVector2, RichTypeNumber, (value) => value.length());\r\n }\r\n}\r\n\r\n/**\r\n * Normalizes a vector.\r\n * @experimental\r\n */\r\nexport class FlowGraphNormalizeVector2Block extends FlowGraphUnaryOperationBlock<Vector2, Vector2> {\r\n constructor() {\r\n super(RichTypeVector2, RichTypeVector2, (value: Vector2) => {\r\n const copy: Vector2 = value.clone();\r\n copy.normalize();\r\n return copy;\r\n });\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"flowGraphVector2MathBlocks.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/FlowGraph/Blocks/Data/Math/flowGraphVector2MathBlocks.ts"],"names":[],"mappings":"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","sourcesContent":["import { RichTypeNumber, RichTypeVector2 } from \"core/FlowGraph/flowGraphRichTypes\";\r\nimport { Vector2 } from \"../../../../Maths/math.vector\";\r\nimport { FlowGraphBinaryOperationBlock } from \"../flowGraphBinaryOperationBlock\";\r\nimport { FlowGraphUnaryOperationBlock } from \"../flowGraphUnaryOperationBlock\";\r\nimport type { FlowGraphDataConnection } from \"../../../flowGraphDataConnection\";\r\nimport { FlowGraphBlock } from \"../../../flowGraphBlock\";\r\nimport type { FlowGraphContext } from \"../../../flowGraphContext\";\r\n\r\n/**\r\n * Adds two vectors together.\r\n * @experimental\r\n */\r\nexport class FlowGraphAddVector2Block extends FlowGraphBinaryOperationBlock<Vector2, Vector2, Vector2> {\r\n constructor() {\r\n super(RichTypeVector2, RichTypeVector2, RichTypeVector2, (left, right) => left.add(right));\r\n }\r\n}\r\n\r\n/**\r\n * Subtracts two vectors.\r\n * @experimental\r\n */\r\nexport class FlowGraphSubtractVector2Block extends FlowGraphBinaryOperationBlock<Vector2, Vector2, Vector2> {\r\n constructor() {\r\n super(RichTypeVector2, RichTypeVector2, RichTypeVector2, (left, right) => left.subtract(right));\r\n }\r\n}\r\n\r\n/**\r\n * Multiplies two vectors together.\r\n * @experimental\r\n */\r\nexport class FlowGraphMultiplyVector2Block extends FlowGraphBinaryOperationBlock<Vector2, Vector2, Vector2> {\r\n constructor() {\r\n super(RichTypeVector2, RichTypeVector2, RichTypeVector2, (left, right) => left.multiply(right));\r\n }\r\n}\r\n\r\n/**\r\n * Divides two vectors.\r\n * @experimental\r\n */\r\nexport class FlowGraphDivideVector2Block extends FlowGraphBinaryOperationBlock<Vector2, Vector2, Vector2> {\r\n constructor() {\r\n super(RichTypeVector2, RichTypeVector2, RichTypeVector2, (left, right) => left.divide(right));\r\n }\r\n}\r\n\r\n/**\r\n * Scales a vector by a number.\r\n * @experimental\r\n */\r\nexport class FlowGraphScaleVector2Block extends FlowGraphBinaryOperationBlock<Vector2, number, Vector2> {\r\n constructor() {\r\n super(RichTypeVector2, RichTypeNumber, RichTypeVector2, (left, right) => left.scale(right));\r\n }\r\n}\r\n\r\n/**\r\n * Gets the length of a vector.\r\n * @experimental\r\n */\r\nexport class FlowGraphLengthVector2Block extends FlowGraphUnaryOperationBlock<Vector2, number> {\r\n constructor() {\r\n super(RichTypeVector2, RichTypeNumber, (value) => value.length());\r\n }\r\n}\r\n\r\n/**\r\n * Normalizes a vector.\r\n * @experimental\r\n */\r\nexport class FlowGraphNormalizeVector2Block extends FlowGraphUnaryOperationBlock<Vector2, Vector2> {\r\n constructor() {\r\n super(RichTypeVector2, RichTypeVector2, (value: Vector2) => {\r\n const copy: Vector2 = value.clone();\r\n copy.normalize();\r\n return copy;\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Creates a vector from two components.\r\n */\r\nexport class FlowGraphCreateVector2Block extends FlowGraphBlock {\r\n /**\r\n * Input connection: The x component of the vector.\r\n */\r\n public readonly x: FlowGraphDataConnection<number>;\r\n /**\r\n * Input connection: The y component of the vector.\r\n */\r\n public readonly y: FlowGraphDataConnection<number>;\r\n /**\r\n * Output connection: The created vector.\r\n */\r\n public readonly vector: FlowGraphDataConnection<Vector2>;\r\n\r\n private _cachedVector: Vector2 = Vector2.Zero();\r\n\r\n constructor() {\r\n super();\r\n\r\n this.x = this._registerDataInput(\"x\", RichTypeNumber);\r\n this.y = this._registerDataInput(\"y\", RichTypeNumber);\r\n this.vector = this._registerDataOutput(\"vector\", RichTypeVector2);\r\n }\r\n\r\n public _updateOutputs(_context: FlowGraphContext): void {\r\n this._cachedVector.x = this.x.getValue(_context);\r\n this._cachedVector.y = this.y.getValue(_context);\r\n this.vector.setValue(this._cachedVector, _context);\r\n }\r\n}\r\n\r\n/**\r\n * Split a vector into its components.\r\n */\r\nexport class FlowGraphSplitVector2Block extends FlowGraphBlock {\r\n /**\r\n * Input connection: The vector to split.\r\n */\r\n public readonly vector: FlowGraphDataConnection<Vector2>;\r\n /**\r\n * Output connection: The x component of the vector.\r\n */\r\n public readonly x: FlowGraphDataConnection<number>;\r\n /**\r\n * Output connection: The y component of the vector.\r\n */\r\n public readonly y: FlowGraphDataConnection<number>;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.vector = this._registerDataInput(\"vector\", RichTypeVector2);\r\n this.x = this._registerDataOutput(\"x\", RichTypeNumber);\r\n this.y = this._registerDataOutput(\"y\", RichTypeNumber);\r\n }\r\n\r\n public _updateOutputs(_context: FlowGraphContext): void {\r\n const vector = this.vector.getValue(_context);\r\n this.x.setValue(vector.x, _context);\r\n this.y.setValue(vector.y, _context);\r\n }\r\n}\r\n\r\n/**\r\n * Rotates a vector by a given angle.\r\n */\r\nexport class FlowGraphRotate2dVector2Block extends FlowGraphBlock {\r\n /**\r\n * Input connection: The vector to rotate.\r\n */\r\n public readonly input: FlowGraphDataConnection<Vector2>;\r\n /**\r\n * Input connection: The angle to rotate by.\r\n */\r\n public readonly angle: FlowGraphDataConnection<number>;\r\n /**\r\n * Output connection: The rotated vector.\r\n */\r\n public readonly output: FlowGraphDataConnection<Vector2>;\r\n\r\n private _cachedVector: Vector2 = Vector2.Zero();\r\n\r\n constructor() {\r\n super();\r\n this.input = this._registerDataInput(\"input\", RichTypeVector2);\r\n this.angle = this._registerDataInput(\"angle\", RichTypeNumber);\r\n this.output = this._registerDataOutput(\"output\", RichTypeVector2);\r\n }\r\n\r\n public _updateOutputs(_context: FlowGraphContext): void {\r\n const input = this.input.getValue(_context);\r\n const angle = this.angle.getValue(_context);\r\n this._cachedVector.x = input.x * Math.cos(angle) - input.y * Math.sin(angle);\r\n this._cachedVector.y = input.x * Math.sin(angle) + input.y * Math.cos(angle);\r\n this.output.setValue(this._cachedVector, _context);\r\n }\r\n}\r\n"]}