toosoon-utils 1.5.0 → 2.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.
Files changed (49) hide show
  1. package/package.json +9 -6
  2. package/tsconfig.json +1 -3
  3. package/lib/classes/_pool.d.ts +0 -56
  4. package/lib/classes/_pool.js +0 -92
  5. package/lib/classes/color-scale.d.ts +0 -52
  6. package/lib/classes/color-scale.js +0 -160
  7. package/lib/classes/frame-rate.d.ts +0 -25
  8. package/lib/classes/frame-rate.js +0 -48
  9. package/lib/colors.d.ts +0 -155
  10. package/lib/colors.js +0 -367
  11. package/lib/constants.d.ts +0 -162
  12. package/lib/constants.js +0 -170
  13. package/lib/dom.d.ts +0 -25
  14. package/lib/dom.js +0 -47
  15. package/lib/files.d.ts +0 -14
  16. package/lib/files.js +0 -38
  17. package/lib/functions.d.ts +0 -22
  18. package/lib/functions.js +0 -53
  19. package/lib/geometry.d.ts +0 -89
  20. package/lib/geometry.js +0 -128
  21. package/lib/index.d.ts +0 -10
  22. package/lib/index.js +0 -39
  23. package/lib/maths.d.ts +0 -161
  24. package/lib/maths.js +0 -219
  25. package/lib/now.d.ts +0 -5
  26. package/lib/now.js +0 -28
  27. package/lib/prng.d.ts +0 -124
  28. package/lib/prng.js +0 -234
  29. package/lib/random.d.ts +0 -91
  30. package/lib/random.js +0 -162
  31. package/lib/strings.d.ts +0 -14
  32. package/lib/strings.js +0 -18
  33. package/lib/tsconfig.tsbuildinfo +0 -1
  34. package/lib/types.d.ts +0 -18
  35. package/lib/types.js +0 -1
  36. package/src/classes/_pool.ts +0 -92
  37. package/src/classes/color-scale.ts +0 -181
  38. package/src/classes/frame-rate.ts +0 -49
  39. package/src/colors.ts +0 -389
  40. package/src/constants.ts +0 -172
  41. package/src/dom.ts +0 -50
  42. package/src/files.ts +0 -42
  43. package/src/functions.ts +0 -56
  44. package/src/geometry.ts +0 -160
  45. package/src/maths.ts +0 -241
  46. package/src/prng.ts +0 -249
  47. package/src/random.ts +0 -162
  48. package/src/strings.ts +0 -19
  49. package/src/types.ts +0 -33
package/lib/maths.js DELETED
@@ -1,219 +0,0 @@
1
- /**
2
- * Check if a number is even
3
- *
4
- * @param {number} value Value to check
5
- * @returns {boolean} True if the given number is even, false otherwise
6
- */
7
- export function isEven(value) {
8
- return !(value & 1);
9
- }
10
- /**
11
- * Check if a number is odd
12
- *
13
- * @param {number} value Value to check
14
- * @returns {boolean} True if the given number is odd, false otherwise
15
- */
16
- export function isOdd(value) {
17
- return !!(value & 1);
18
- }
19
- /**
20
- * Check if a number is a power of 2
21
- *
22
- * @param {number} value Value to check
23
- * @returns {boolean} True if the given number is a power of 2, false otherwise
24
- */
25
- export function isPowerOf2(value) {
26
- return (value & (value - 1)) === 0;
27
- }
28
- /**
29
- * Find closest power of 2 that fits a number
30
- *
31
- * @param {number} value Incoming value
32
- * @param {string} [mode='ceil'] Can be 'floor' | 'ceil' | 'round'
33
- * @returns {number} Power of 2
34
- */
35
- export function toPowerOf2(value, mode) {
36
- if (mode === void 0) { mode = 'ceil'; }
37
- return Math.pow(2, Math[mode](Math.log(value) / Math.log(2)));
38
- }
39
- /**
40
- * Return the sign (positive or negative) of a number
41
- *
42
- * @param {number} value Value to check
43
- * @returns {number} 1 if the given number is positive, -1 if it is negative, otherwise 0
44
- */
45
- export function sign(value) {
46
- if (value > 0)
47
- return 1;
48
- else if (value < 0)
49
- return -1;
50
- return 0;
51
- }
52
- /**
53
- * Clamp a value between two bounds
54
- *
55
- * @param {number} value Value to clamp
56
- * @param {number} [min=0] Minimum boundary
57
- * @param {number} [max=1] Maximum boundary
58
- * @returns {number} Clamped value
59
- */
60
- export function clamp(value, min, max) {
61
- if (min === void 0) { min = 0; }
62
- if (max === void 0) { max = 1; }
63
- return Math.min(max, Math.max(min, value));
64
- }
65
- /**
66
- * Linear interpolation between two values (lerping)
67
- *
68
- * @param {number} value Normalized value to interpolate
69
- * @param {number} min Minimum value
70
- * @param {number} max Maximum value
71
- * @returns {number} Lerped value
72
- */
73
- export function lerp(value, min, max) {
74
- return min + (max - min) * value;
75
- }
76
- /**
77
- * Triangular interpolation between two values
78
- *
79
- * @param {number} value Normalized value to interpolate
80
- * @param {number} min Minimum value
81
- * @param {number} max Maximum value
82
- * @param {number} target Triangle target value
83
- * @returns {number} Interpolated value
84
- */
85
- export function triLerp(value, min, max, target) {
86
- var x = Math.pow(1 + Math.abs(target - max) / Math.abs(target - min), -1);
87
- return value <= x ? min - (min - target) * (value / x) : target - (target - max) * ((value - x) / (1 - x));
88
- }
89
- /**
90
- * Exponential interpolation between two values
91
- *
92
- * @param {number} value Value to interpolate
93
- * @param {number} currentMin Lower bound of the value's current range
94
- * @param {number} currentMax Upper bound of the value's current range
95
- * @param {number} targetMin Lower bound of the value's target range
96
- * @param {number} targetMax Upper bound of the value's target range
97
- * @returns {number} Interpolated value
98
- */
99
- export function expLerp(value, currentMin, currentMax, targetMin, targetMax) {
100
- return (targetMin *
101
- Math.pow(targetMax / targetMin, (clamp(value, currentMin, currentMax) - currentMin) / (currentMax - currentMin)));
102
- }
103
- /**
104
- * Normalize a value between two bounds
105
- *
106
- * @param {number} value Value to normalize
107
- * @param {number} min Minimum boundary
108
- * @param {number} max Maximum boundary
109
- * @returns {number} Normalized value
110
- */
111
- export function normalize(value, min, max) {
112
- return (value - min) / (max - min);
113
- }
114
- /**
115
- * Re-map a number from one range to another
116
- *
117
- * @param {number} value Value to re-map
118
- * @param {number} currentMin Lower bound of the value's current range
119
- * @param {number} currentMax Upper bound of the value's current range
120
- * @param {number} targetMin Lower bound of the value's target range
121
- * @param {number} targetMax Upper bound of the value's target range
122
- * @returns {number} Re-mapped value
123
- */
124
- export function map(value, currentMin, currentMax, targetMin, targetMax) {
125
- return ((value - currentMin) / (currentMax - currentMin)) * (targetMax - targetMin) + targetMin;
126
- }
127
- /**
128
- * Round a number up to a nearest multiple
129
- *
130
- * @param {number} value Value to round
131
- * @param {number} [multiple=1] Multiple to round to
132
- * @returns {number} Closest multiple
133
- */
134
- export function roundTo(value, multiple) {
135
- if (multiple === void 0) { multiple = 1; }
136
- if (multiple === 0)
137
- return value;
138
- return Math.round(value / multiple) * multiple;
139
- }
140
- /**
141
- * Modulo absolute a value based on a length
142
- *
143
- * @param {number} value Value to modulate
144
- * @param {number} length Total length
145
- * @returns {number} Modulated value
146
- */
147
- export function modAbs(value, length) {
148
- if (value < 0) {
149
- return length + (value % length);
150
- }
151
- return value % length;
152
- }
153
- /**
154
- * Move back and forth a value between 0 and length, so that it is never larger than length and never smaller than 0
155
- *
156
- * @param {number} value Value to modulate
157
- * @param {number} length Total length
158
- * @returns {number} PingPonged value
159
- */
160
- export function pingPong(value, length) {
161
- value = modAbs(value, length * 2);
162
- return length - Math.abs(value - length);
163
- }
164
- /**
165
- * Smooth a value using cubic Hermite interpolation
166
- *
167
- * @param {number} value Value to smooth
168
- * @param {number} [min=0] Minimum boundary
169
- * @param {number} [max=1] Maximum boundary
170
- * @returns {number} Normalized smoothed value
171
- */
172
- export function smoothstep(value, min, max) {
173
- if (min === void 0) { min = 0; }
174
- if (max === void 0) { max = 1; }
175
- var x = clamp(normalize(value, min, max));
176
- return x * x * (3 - 2 * x);
177
- }
178
- /**
179
- * Re-map the [0, 1] interval into [0, 1] parabola, such that corners are remaped to 0 and the center to 1
180
- * -> parabola(0) = parabola(1) = 0, and parabola(0.5) = 1
181
- *
182
- * @param {number} x Normalized coordinate on X axis
183
- * @param {number} [power=1] Parabola power
184
- * @returns {number} Normalized re-mapped value
185
- */
186
- export function parabola(x, power) {
187
- if (power === void 0) { power = 1; }
188
- return Math.pow(4 * x * (1 - x), power);
189
- }
190
- /**
191
- * Return the sum of numbers
192
- *
193
- * @param {number[]} array Array of numbers
194
- * @returns {number} Total sum
195
- */
196
- export function sum(array) {
197
- return array.reduce(function (previous, current) { return previous + current; });
198
- }
199
- /**
200
- * Return the average of numbers
201
- *
202
- * @param {number[]} array Array of numbers
203
- * @returns {number} Total average
204
- */
205
- export function average(array) {
206
- return sum(array) / array.length;
207
- }
208
- /**
209
- * Smoothly interpolate a number toward another
210
- *
211
- * @param {number} value Value to interpolate
212
- * @param {number} target Destination of the interpolation
213
- * @param {number} damping A higher value will make the movement more sudden, and a lower value will make the movement more gradual
214
- * @param {number} delta Delta time (in seconds)
215
- * @returns {number} Interpolated number
216
- */
217
- export function damp(value, target, damping, delta) {
218
- return lerp(1 - Math.exp(-damping * delta), value, target);
219
- }
package/lib/now.d.ts DELETED
@@ -1,5 +0,0 @@
1
- /**
2
- * Polyfill for "now()" functions
3
- */
4
- declare let now: () => number;
5
- export default now;
package/lib/now.js DELETED
@@ -1,28 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- /**
4
- * Polyfill for "now()" functions
5
- */
6
- var now;
7
- // In node.js, use process.hrtime
8
- if (typeof process !== 'undefined' && process.hrtime) {
9
- now = function () {
10
- // Convert [seconds, nanoseconds] to milliseconds
11
- var time = process.hrtime();
12
- return time[0] * 1000 + time[1] / 1000000;
13
- };
14
- }
15
- // In a browser use performance or Date
16
- else if (typeof performance !== 'undefined') {
17
- // This must be bound, because directly assigning this function leads to an invocation exception in Chrome
18
- now = performance.now.bind(performance);
19
- }
20
- else if (typeof Date.now !== 'undefined') {
21
- now = Date.now;
22
- }
23
- else {
24
- now = function () {
25
- return new Date().getTime();
26
- };
27
- }
28
- exports.default = now;
package/lib/prng.d.ts DELETED
@@ -1,124 +0,0 @@
1
- /**
2
- * Produce a 128-bit hash value from a seed
3
- *
4
- * @param {string} seed Initial seed state
5
- * @returns {[number, number, number, number]} Hash numbers
6
- */
7
- export declare function cyrb128(seed: string): [number, number, number, number];
8
- /**
9
- * Simple Fast Counter, Generator with a 128-bit state
10
- *
11
- * @param {number} a
12
- * @param {number} b
13
- * @param {number} c
14
- * @param {number} d
15
- * @returns {number} Pseudo-random number
16
- */
17
- export declare function sfc32(a: number, b: number, c: number, d: number): number;
18
- /**
19
- * SplitMix32, Generator with a 32-bit state
20
- *
21
- * @param {number} a
22
- * @returns {number} Pseudo-random number
23
- */
24
- export declare function splitmix32(a: number): number;
25
- /**
26
- * Mulberry32, Generator with a 32-bit state
27
- *
28
- * @param {number} a
29
- * @returns {number} Pseudo-random number
30
- */
31
- export declare function mulberry32(a: number): number;
32
- /**
33
- * Jenkins' Small Fast, Generator with a 32-bit state
34
- *
35
- * @param {number} a
36
- * @returns {number} Pseudo-random number
37
- */
38
- export declare function jsf32(a: number, b: number, c: number, d: number): number;
39
- /**
40
- * xoshiro128**, Generator with a 128-bit state
41
- *
42
- * @param {number} a
43
- * @returns {number} Pseudo-random number
44
- */
45
- export declare function xoshiro128ss(a: number, b: number, c: number, d: number): number;
46
- type PRNGParameters = string | {
47
- seed: string;
48
- algorithm: (...args: number[]) => number;
49
- };
50
- /**
51
- * Generate a pseudo-random number in the interval [0, 1]
52
- * PRNG equivalent of `Math.random()`
53
- *
54
- * @param {string|object} prng
55
- * @returns {number} Pseudo-random number
56
- */
57
- export declare function random(prng: PRNGParameters): number;
58
- /**
59
- * Generate a pseudo-random boolean (true or false)
60
- *
61
- * @param {string|object} prng
62
- * @param {number} [probability=0.5] Probability to get true
63
- * @returns {boolean} Either `true` or `false`
64
- */
65
- export declare function randomBoolean(prng: PRNGParameters, probability?: number): boolean;
66
- /**
67
- * Generate a pseudo-random sign (1 or -1)
68
- *
69
- * @param {string|object} prng
70
- * @param {number} [probability=0.5] Probability to get 1
71
- * @returns {number} Either 1 or -1
72
- */
73
- export declare function randomSign(prng: PRNGParameters, probability?: number): number;
74
- /**
75
- * Generate a pseudo-random floating-point number within a specified range
76
- *
77
- * @param {string|object} prng
78
- * @param {number} [min=0] Minimum boundary
79
- * @param {number} [max=1] Maximum boundary
80
- * @param {number} [precision=2] Number of digits after the decimal point
81
- * @returns {number} Generated float
82
- */
83
- export declare function randomFloat(prng: PRNGParameters, min?: number, max?: number, precision?: number): number;
84
- /**
85
- * Generate a pseudo-random integer number within a specified range
86
- *
87
- * @param {string|object} prng
88
- * @param {number} min Minimum boundary
89
- * @param {number} max Maximum boundary
90
- * @returns {number} Generated integer
91
- */
92
- export declare function randomInt(prng: PRNGParameters, min: number, max: number): number;
93
- /**
94
- * Generate a pseudo-random hexadecimal color
95
- *
96
- * @param {string|object} prng
97
- * @returns {string} Generated hexadecimal color
98
- */
99
- export declare function randomHexColor(prng: PRNGParameters): string;
100
- /**
101
- * Pick a pseudo-random item from a given array
102
- *
103
- * @param {string|object} prng
104
- * @param {T[]} array Array to pick the item from
105
- * @returns {T|undefined} Random item picked
106
- */
107
- export declare function randomItem<T = unknown>(prng: PRNGParameters, array: T[]): T | undefined;
108
- /**
109
- * Pick a pseudo-random property value from a given object
110
- *
111
- * @param {string|object} prng
112
- * @param {object} object Object to pick the property from
113
- * @returns {T|undefined} Random item picked
114
- */
115
- export declare function randomObjectProperty<T = unknown>(prng: PRNGParameters, object: Record<string, T>): T | undefined;
116
- /**
117
- * Select a pseudo-random index from an array of weighted items
118
- *
119
- * @param {string|object} prng
120
- * @param {number[]} weights Array of weights
121
- * @returns {number} Random index based on weights
122
- */
123
- export declare function randomIndex(prng: PRNGParameters, weights: number[]): number;
124
- export {};
package/lib/prng.js DELETED
@@ -1,234 +0,0 @@
1
- /**
2
- * Produce a 128-bit hash value from a seed
3
- *
4
- * @param {string} seed Initial seed state
5
- * @returns {[number, number, number, number]} Hash numbers
6
- */
7
- export function cyrb128(seed) {
8
- var h1 = 1779033703;
9
- var h2 = 3144134277;
10
- var h3 = 1013904242;
11
- var h4 = 2773480762;
12
- for (var i = 0, k = void 0; i < seed.length; i++) {
13
- k = seed.charCodeAt(i);
14
- h1 = h2 ^ Math.imul(h1 ^ k, 597399067);
15
- h2 = h3 ^ Math.imul(h2 ^ k, 2869860233);
16
- h3 = h4 ^ Math.imul(h3 ^ k, 951274213);
17
- h4 = h1 ^ Math.imul(h4 ^ k, 2716044179);
18
- }
19
- h1 = Math.imul(h3 ^ (h1 >>> 18), 597399067);
20
- h2 = Math.imul(h4 ^ (h2 >>> 22), 2869860233);
21
- h3 = Math.imul(h1 ^ (h3 >>> 17), 951274213);
22
- h4 = Math.imul(h2 ^ (h4 >>> 19), 2716044179);
23
- return [(h1 ^ h2 ^ h3 ^ h4) >>> 0, (h2 ^ h1) >>> 0, (h3 ^ h1) >>> 0, (h4 ^ h1) >>> 0];
24
- }
25
- // *********************
26
- // PRNG Algorithms
27
- // *********************
28
- /**
29
- * Simple Fast Counter, Generator with a 128-bit state
30
- *
31
- * @param {number} a
32
- * @param {number} b
33
- * @param {number} c
34
- * @param {number} d
35
- * @returns {number} Pseudo-random number
36
- */
37
- export function sfc32(a, b, c, d) {
38
- a >>>= 0;
39
- b >>>= 0;
40
- c >>>= 0;
41
- d >>>= 0;
42
- var t = (a + b) | 0;
43
- a = b ^ (b >>> 9);
44
- b = (c + (c << 3)) | 0;
45
- c = (c << 21) | (c >>> 11);
46
- d = (d + 1) | 0;
47
- t = (t + d) | 0;
48
- c = (c + t) | 0;
49
- return (t >>> 0) / 4294967296;
50
- }
51
- /**
52
- * SplitMix32, Generator with a 32-bit state
53
- *
54
- * @param {number} a
55
- * @returns {number} Pseudo-random number
56
- */
57
- export function splitmix32(a) {
58
- a |= 0;
59
- a = (a + 0x9e3779b9) | 0;
60
- var t = a ^ (a >>> 16);
61
- t = Math.imul(t, 0x21f0aaad);
62
- t = t ^ (t >>> 15);
63
- t = Math.imul(t, 0x735a2d97);
64
- return ((t = t ^ (t >>> 15)) >>> 0) / 4294967296;
65
- }
66
- /**
67
- * Mulberry32, Generator with a 32-bit state
68
- *
69
- * @param {number} a
70
- * @returns {number} Pseudo-random number
71
- */
72
- export function mulberry32(a) {
73
- var t = (a += 0x6d2b79f5);
74
- t = Math.imul(t ^ (t >>> 15), t | 1);
75
- t ^= t + Math.imul(t ^ (t >>> 7), t | 61);
76
- return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
77
- }
78
- /**
79
- * Jenkins' Small Fast, Generator with a 32-bit state
80
- *
81
- * @param {number} a
82
- * @returns {number} Pseudo-random number
83
- */
84
- export function jsf32(a, b, c, d) {
85
- a |= 0;
86
- b |= 0;
87
- c |= 0;
88
- d |= 0;
89
- var t = (a - ((b << 27) | (b >>> 5))) | 0;
90
- a = b ^ ((c << 17) | (c >>> 15));
91
- b = (c + d) | 0;
92
- c = (d + t) | 0;
93
- d = (a + t) | 0;
94
- return (d >>> 0) / 4294967296;
95
- }
96
- /**
97
- * xoshiro128**, Generator with a 128-bit state
98
- *
99
- * @param {number} a
100
- * @returns {number} Pseudo-random number
101
- */
102
- export function xoshiro128ss(a, b, c, d) {
103
- var t = b << 9;
104
- var r = a * 5;
105
- r = ((r << 7) | (r >>> 25)) * 9;
106
- c ^= a;
107
- d ^= b;
108
- b ^= c;
109
- a ^= d;
110
- c ^= t;
111
- d = (d << 11) | (d >>> 21);
112
- return (r >>> 0) / 4294967296;
113
- }
114
- /**
115
- * Generate a pseudo-random number in the interval [0, 1]
116
- * PRNG equivalent of `Math.random()`
117
- *
118
- * @param {string|object} prng
119
- * @returns {number} Pseudo-random number
120
- */
121
- export function random(prng) {
122
- var seed = typeof prng === 'string' ? prng : prng.seed;
123
- var algorithm = typeof prng === 'string' ? splitmix32 : prng.algorithm;
124
- var hashes = cyrb128(seed);
125
- return algorithm.apply(void 0, hashes);
126
- }
127
- /**
128
- * Generate a pseudo-random boolean (true or false)
129
- *
130
- * @param {string|object} prng
131
- * @param {number} [probability=0.5] Probability to get true
132
- * @returns {boolean} Either `true` or `false`
133
- */
134
- export function randomBoolean(prng, probability) {
135
- if (probability === void 0) { probability = 0.5; }
136
- return random(prng) < probability;
137
- }
138
- /**
139
- * Generate a pseudo-random sign (1 or -1)
140
- *
141
- * @param {string|object} prng
142
- * @param {number} [probability=0.5] Probability to get 1
143
- * @returns {number} Either 1 or -1
144
- */
145
- export function randomSign(prng, probability) {
146
- if (probability === void 0) { probability = 0.5; }
147
- return randomBoolean(prng, probability) ? 1 : -1;
148
- }
149
- /**
150
- * Generate a pseudo-random floating-point number within a specified range
151
- *
152
- * @param {string|object} prng
153
- * @param {number} [min=0] Minimum boundary
154
- * @param {number} [max=1] Maximum boundary
155
- * @param {number} [precision=2] Number of digits after the decimal point
156
- * @returns {number} Generated float
157
- */
158
- export function randomFloat(prng, min, max, precision) {
159
- if (min === void 0) { min = 0; }
160
- if (max === void 0) { max = 1; }
161
- if (precision === void 0) { precision = 2; }
162
- return parseFloat(Math.min(min + random(prng) * (max - min), max).toFixed(precision));
163
- }
164
- /**
165
- * Generate a pseudo-random integer number within a specified range
166
- *
167
- * @param {string|object} prng
168
- * @param {number} min Minimum boundary
169
- * @param {number} max Maximum boundary
170
- * @returns {number} Generated integer
171
- */
172
- export function randomInt(prng, min, max) {
173
- return Math.floor(random(prng) * (max - min + 1) + min);
174
- }
175
- /**
176
- * Generate a pseudo-random hexadecimal color
177
- *
178
- * @param {string|object} prng
179
- * @returns {string} Generated hexadecimal color
180
- */
181
- export function randomHexColor(prng) {
182
- return '#' + ('00000' + ((random(prng) * (1 << 24)) | 0).toString(16)).slice(-6);
183
- }
184
- /**
185
- * Pick a pseudo-random item from a given array
186
- *
187
- * @param {string|object} prng
188
- * @param {T[]} array Array to pick the item from
189
- * @returns {T|undefined} Random item picked
190
- */
191
- export function randomItem(prng, array) {
192
- if (array.length === 0)
193
- return undefined;
194
- return array[randomInt(prng, 0, array.length - 1)];
195
- }
196
- /**
197
- * Pick a pseudo-random property value from a given object
198
- *
199
- * @param {string|object} prng
200
- * @param {object} object Object to pick the property from
201
- * @returns {T|undefined} Random item picked
202
- */
203
- export function randomObjectProperty(prng, object) {
204
- var keys = Object.keys(object);
205
- var key = randomItem(prng, keys);
206
- if (key && object.hasOwnProperty(key)) {
207
- return object[key];
208
- }
209
- }
210
- /**
211
- * Select a pseudo-random index from an array of weighted items
212
- *
213
- * @param {string|object} prng
214
- * @param {number[]} weights Array of weights
215
- * @returns {number} Random index based on weights
216
- */
217
- export function randomIndex(prng, weights) {
218
- if (weights.length === 0)
219
- return -1;
220
- var totalWeight = 0;
221
- for (var _i = 0, weights_1 = weights; _i < weights_1.length; _i++) {
222
- var weight_1 = weights_1[_i];
223
- totalWeight += weight_1;
224
- }
225
- if (totalWeight <= 0)
226
- console.warn('PRNG randomIndex()', 'Weights must sum to > 0', totalWeight);
227
- var weight = random(prng) * totalWeight;
228
- for (var i = 0; i < weights.length; i++) {
229
- if (weight < weights[i])
230
- return i;
231
- weight -= weights[i];
232
- }
233
- return 0;
234
- }
package/lib/random.d.ts DELETED
@@ -1,91 +0,0 @@
1
- import { Vector2, Vector3 } from './types';
2
- /**
3
- * Generate a random boolean (true or false)
4
- *
5
- * @param {number} [probability=0.5] Probability to get true
6
- * @returns {boolean} Either `true` or `false`
7
- */
8
- export declare function randomBoolean(probability?: number): boolean;
9
- /**
10
- * Generate a random sign (1 or -1)
11
- *
12
- * @param {number} [probability=0.5] Probability to get 1
13
- * @returns {number} Either 1 or -1
14
- */
15
- export declare function randomSign(probability?: number): number;
16
- /**
17
- * Generate a random floating-point number within a specified range
18
- *
19
- * @param {number} [min=0] Minimum boundary
20
- * @param {number} [max=1] Maximum boundary
21
- * @param {number} [precision=2] Number of digits after the decimal point
22
- * @returns {number} Generated float
23
- */
24
- export declare function randomFloat(min?: number, max?: number, precision?: number): number;
25
- /**
26
- * Generate a random integer number within a specified range
27
- *
28
- * @param {number} min Minimum boundary
29
- * @param {number} max Maximum boundary
30
- * @returns {number} Generated integer
31
- */
32
- export declare function randomInt(min: number, max: number): number;
33
- /**
34
- * Generate a random hexadecimal color
35
- *
36
- * @returns {string} Generated hexadecimal color
37
- */
38
- export declare function randomHexColor(): string;
39
- /**
40
- * Pick a random item from a given array
41
- *
42
- * @param {T[]} array Array to pick the item from
43
- * @returns {T|undefined} Random item picked
44
- */
45
- export declare function randomItem<T = unknown>(array: T[]): T | undefined;
46
- /**
47
- * Pick a random property value from a given object
48
- *
49
- * @param {object} object Object to pick the property from
50
- * @returns {T|undefined} Random item picked
51
- */
52
- export declare function randomObjectProperty<T = unknown>(object: Record<string, T>): T | undefined;
53
- /**
54
- * Select a random index from an array of weighted items
55
- *
56
- * @param {number[]} weights Array of weights
57
- * @returns {number} Random index based on weights
58
- */
59
- export declare function randomIndex(weights: number[]): number;
60
- /**
61
- * Produce a random 2D point around the perimiter of a unit circle
62
- *
63
- * @param {number} [radius=1] Radius of the circle
64
- * @param {Vector2} [target] Target vector
65
- * @returns {Vector2} Random 2D point on circle
66
- */
67
- export declare function onCircle(radius?: number, target?: Vector2): Vector2;
68
- /**
69
- * Produce a random 2D point inside a unit circle
70
- *
71
- * @param {number} [radius=1] Radius of the circle
72
- * @param {Vector2} [target] Target vector
73
- * @returns {Vector2} Random 2D point inside circle
74
- */
75
- export declare function insideCircle(radius?: number, target?: Vector2): Vector2;
76
- /**
77
- * Produce a random 3D point on the surface of a unit sphere
78
- *
79
- * @param {number} [radius=1] Radius of the sphere
80
- * @param {Vector3} [target] Target vector
81
- * @returns {Vector3} Random 3D point on sphere
82
- */
83
- export declare function onSphere(radius?: number, target?: Vector3): Vector3;
84
- /**
85
- * Produce a random 3D point inside a unit sphere
86
- *
87
- * @param {number} [radius=1] Radius of the sphere
88
- * @param {Vector3} [target] Target vector
89
- * @returns {Vector3} Random 3D point inside sphere
90
- */
91
- export declare function insideSphere(radius?: number, target?: Vector3): Vector3;