-
Notifications
You must be signed in to change notification settings - Fork 19
/
helpers.js
82 lines (76 loc) · 2.25 KB
/
helpers.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/**
* return the cartesian x/y delta value from a degree
* eg: 90 (→) = [1,0]
* @param {Number} angle angle in degrees
* @returns {Number[]} cartesian delta values
*/
export const cartesian = angle => {
return [Math.cos(radian(angle - 90)), Math.sin(radian(angle - 90))];
};
/**
* clamp the input number to the min/max values
* @param {Number} value value to clamp between min and max
* @param {Number} min minimum value possible
* @param {Number} max maximum value possible
* @returns {Number} the input num clamped between min/max
*/
export const clamp = (value, min = 0, max = 1) => {
return Math.max(min, Math.min(max, value));
};
/**
* return the radian equivalent to a degree value
* @param {Number} angle angle in degrees
* @returns {Number} radian equivalent
*/
export const radian = angle => {
return (angle * Math.PI) / 180;
};
/**
* return random number between a min and max value
* @param {Number} min minimum value
* @param {Number} max maximum value
* @param {Boolean} rounded should the result be rounded
* @returns {Number} a random number between min and max
*/
export const random = (min = 0, max = 1, value = Math.random()) => {
if (max <= min) {
value = min;
} else if ((min !== 0 || max !== 1) && max > min) {
value = value * (max - min) + min;
}
return value;
};
/**
* return a random value from an array
* @param {Array} array an array to get random value from
* @returns {*} random value from array
*/
export const randomArray = array => {
return array[Math.floor(random(0, array.length))];
};
/**
* return a random HSL colour string for use in random color effect
* @returns {String} "hsl(100,100,80)"
*/
export const randomHsl = () => {
const h = round(random(0, 360));
const s = round(random(90, 100));
const l = round(random(45, 85));
return `hsl(${h},${s}%,${l}%)`;
};
/**
* return a boolean to pass a dice roll
* @param {Number} odds a fraction to use as the probability, can be supplied as "1/2"
* @returns {Boolean}
*/
export const roll = odds => {
return odds > random();
};
/**
* round a number to the nearest integer value
* @param {Number} value value to round to the nearest integer
* @returns {Number} nearest integer
*/
export const round = value => {
return (0.5 + value) | 0;
};