@carbonenginejs/core-math 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/src/vec2.js ADDED
@@ -0,0 +1,229 @@
1
+ import { vec2 as glVec2 } from "gl-matrix";
2
+ import { pool } from "./pool.js";
3
+
4
+ const vec2 = { ...glVec2 };
5
+
6
+ export { vec2 };
7
+
8
+ /**
9
+ *
10
+ * @returns {Float32Array}
11
+ */
12
+ vec2.alloc = function()
13
+ {
14
+ return pool.allocF32(2);
15
+ };
16
+
17
+ /**
18
+ *
19
+ * @param a
20
+ */
21
+ vec2.unalloc = function(a)
22
+ {
23
+ pool.freeType(a);
24
+ };
25
+
26
+ /**
27
+ * Adds a scalar to a vec2
28
+ *
29
+ * @param {vec2} out
30
+ * @param {vec2} a
31
+ * @param {Number} s
32
+ * @returns {vec2} out
33
+ */
34
+ vec2.addScalar = function(out, a, s)
35
+ {
36
+ out[0] = a[0] + s;
37
+ out[1] = a[1] + s;
38
+ return out;
39
+ };
40
+
41
+ /**
42
+ * Checks if a vector2 is empty
43
+ * @param {vec2} a
44
+ * @returns {boolean}
45
+ */
46
+ vec2.isEmpty = function(a)
47
+ {
48
+ return a[0] === 0 && a[1] === 0;
49
+ };
50
+
51
+ /**
52
+ * Divides a vec2 by a scalar
53
+ *
54
+ * @param {vec2} out
55
+ * @param {vec2} a
56
+ * @param {Number} s
57
+ * @returns {vec2} out
58
+ */
59
+ vec2.divideScalar = function(out, a, s)
60
+ {
61
+ return vec2.multiplyScalar(out, a, 1 / s);
62
+ };
63
+
64
+
65
+ /**
66
+ * Multiplies a vec2 by a scalar
67
+ *
68
+ * @param {vec2} out
69
+ * @param {vec2} a
70
+ * @param {Number} s
71
+ * @returns {vec2} out
72
+ */
73
+ vec2.multiplyScalar = function(out, a, s)
74
+ {
75
+ out[0] = a[0] * s;
76
+ out[1] = a[1] * s;
77
+ return out;
78
+ };
79
+
80
+ /**
81
+ * Sets a vec2 from a scalar
82
+ *
83
+ * @param {vec2} out
84
+ * @param {Number} s
85
+ * @returns {vec2} out
86
+ */
87
+ vec2.setScalar = function(out, s)
88
+ {
89
+ out[0] = s;
90
+ out[1] = s;
91
+ return out;
92
+ };
93
+
94
+ /**
95
+ * Subtracts a scalar from a vec2
96
+ *
97
+ * @param {vec2} out
98
+ * @param {vec2} a
99
+ * @param {Number} s
100
+ * @returns {vec2} out
101
+ */
102
+ vec2.subtractScalar = function(out, a, s)
103
+ {
104
+ out[0] = a[0] - s;
105
+ out[1] = a[1] - s;
106
+ return out;
107
+ };
108
+
109
+ /**
110
+ * Sets a vec2 from an array with an optional offset
111
+ * @param {vec3} out
112
+ * @param {TypedArray|Array} array
113
+ * @param {Number} [offset=0]
114
+ * @returns {vec3} out
115
+ */
116
+ vec2.fromArray = function(out, array, offset=0)
117
+ {
118
+ out[0] = array[offset];
119
+ out[1] = array[offset + 1];
120
+ return out;
121
+ };
122
+
123
+ /**
124
+ * Gets mouse position from a mouse event
125
+ * @param {vec2} out
126
+ * @param {MouseEvent} event
127
+ * @returns {vec2} out - mouse coordinates
128
+ */
129
+ vec2.mousePositionFromEvent = function(out, event)
130
+ {
131
+ out[0] = event.clientX;
132
+ out[1] = event.clientY;
133
+ return out;
134
+ };
135
+
136
+ /**
137
+ * Gets CSS position from an event
138
+ * @param {vec2} out
139
+ * @param {MouseEvent} event
140
+ * @param {HTMLElement} [element=element.target]
141
+ * @returns {vec2} out - css coordinates
142
+ */
143
+ vec2.cssPositionFromEvent = function(out, event, element=event.target)
144
+ {
145
+ const rect = element.getBoundingClientRect();
146
+ out[0] = event.clientX - rect.left;
147
+ out[1] = event.clientY - rect.top;
148
+ return out;
149
+ };
150
+
151
+ /**
152
+ * Gets the pixel coordinates from an element event
153
+ * @param {vec2} out
154
+ * @param {MouseEvent} event
155
+ * @param {HTMLElement} [element=element.target]
156
+ * @returns {vec2} out - the pixel coordinates
157
+ */
158
+ vec2.pixelPositionFromEvent = function(out, event, element=event.target)
159
+ {
160
+ const
161
+ rect = element.getBoundingClientRect(),
162
+ cssX = event.clientX - rect.left,
163
+ cssY = event.clientY - rect.top;
164
+
165
+ out[0] = cssX * element.width / element.clientWidth;
166
+ out[1] = element.height - cssY * element.height / element.clientHeight - 1;
167
+ return out;
168
+ };
169
+
170
+ export const {
171
+ add,
172
+ angle,
173
+ ceil,
174
+ clone,
175
+ copy,
176
+ create,
177
+ cross,
178
+ dist,
179
+ distance,
180
+ div,
181
+ divide,
182
+ dot,
183
+ equals,
184
+ exactEquals,
185
+ floor,
186
+ forEach,
187
+ fromValues,
188
+ inverse,
189
+ len,
190
+ length,
191
+ lerp,
192
+ max,
193
+ min,
194
+ mul,
195
+ multiply,
196
+ negate,
197
+ normalize,
198
+ random,
199
+ rotate,
200
+ round,
201
+ scale,
202
+ scaleAndAdd,
203
+ set,
204
+ signedAngle,
205
+ sqrDist,
206
+ sqrLen,
207
+ squaredDistance,
208
+ squaredLength,
209
+ str,
210
+ sub,
211
+ subtract,
212
+ transformMat2,
213
+ transformMat2d,
214
+ transformMat3,
215
+ transformMat4,
216
+ zero,
217
+ alloc,
218
+ unalloc,
219
+ addScalar,
220
+ isEmpty,
221
+ divideScalar,
222
+ multiplyScalar,
223
+ setScalar,
224
+ subtractScalar,
225
+ fromArray,
226
+ mousePositionFromEvent,
227
+ cssPositionFromEvent,
228
+ pixelPositionFromEvent
229
+ } = vec2;