87 lines
2.6 KiB
JavaScript
87 lines
2.6 KiB
JavaScript
'use strict';
|
|
|
|
export const gradeIncrements = [
|
|
0.0498,
|
|
0.04,
|
|
0.035,
|
|
0.03,
|
|
0.025,
|
|
0.02,
|
|
0.015,
|
|
0.01,
|
|
0.005,
|
|
0.001
|
|
]
|
|
|
|
export function randomRange(min=0.0, max=1.0){
|
|
return Math.random()*(max-min) + min;
|
|
}
|
|
|
|
export function rgba2hex(r,g,b,a=1.0){
|
|
r = Math.min(Math.max(r,0),1);
|
|
g = Math.min(Math.max(g,0),1);
|
|
b = Math.min(Math.max(b,0),1);
|
|
a = Math.min(Math.max(a,0),1);
|
|
return `#${
|
|
Math.round(r*255).toString(16).padStart(2, '0').substring(0,2)
|
|
}${
|
|
Math.round(g*255).toString(16).padStart(2, '0').substring(0,2)
|
|
}${
|
|
Math.round(b*255).toString(16).padStart(2, '0').substring(0,2)
|
|
}${
|
|
Math.round(a*255).toString(16).padStart(2, '0').substring(0,2)
|
|
}`;
|
|
}
|
|
|
|
export function gradeToClass(grade){
|
|
for(let j=0; j<gradeIncrements.length; j++){
|
|
if(grade > gradeIncrements[j]){
|
|
return gradeIncrements.length-(j+1);
|
|
}
|
|
}
|
|
return 'flat';
|
|
}
|
|
|
|
/**
|
|
* Outputs an easy to read time interval between `date1` and `date2`
|
|
* @param {Date} date
|
|
*/
|
|
export function formattedTimeBetweenDates(date1, date2){
|
|
let interval = (date2 - date1)/1000;
|
|
if(interval < 0) interval *= -1;
|
|
let finalInterval = Math.floor(interval);
|
|
if(interval < 60) return finalInterval+(finalInterval == 1 ? ' second' : ' seconds');
|
|
interval /= 60;
|
|
finalInterval = Math.floor(interval);
|
|
if(interval < 60) return finalInterval+(finalInterval == 1 ? ' minute' : ' minutes');
|
|
interval /= 60;
|
|
finalInterval = Math.floor(interval);
|
|
if(interval < 24) return finalInterval+(finalInterval == 1 ? ' hour' : ' hours');
|
|
interval /= 24;
|
|
finalInterval = Math.floor(interval);
|
|
if(interval < 7) return finalInterval+(finalInterval == 1 ? ' day' : ' days');
|
|
finalInterval = Math.floor(interval/7);
|
|
if(interval < 30.4375) return finalInterval+(finalInterval == 1 ? ' week' : ' weeks');
|
|
finalInterval = Math.floor(interval/30.4375);
|
|
if(interval < 365.25) return finalInterval+(finalInterval == 1 ? ' month' : ' months');
|
|
finalInterval = Math.floor(interval/365.25);
|
|
return finalInterval+(finalInterval == 1 ? ' year' : ' years');
|
|
}
|
|
|
|
export function radiusToSpeed(radius){
|
|
if(radius < 50) return 10;
|
|
else if(radius < 70) return 20;
|
|
else if(radius < 95) return 30;
|
|
else if(radius < 130) return 40;
|
|
else if(radius < 170) return 50;
|
|
else if(radius < 230) return 60;
|
|
else if(radius < 360) return 70;
|
|
else if(radius < 700) return 80;
|
|
else if(radius < 900) return 90;
|
|
else if(radius < 1200) return 100;
|
|
return 120;
|
|
}
|
|
|
|
export function clamp(v, min = 0, max = 1){
|
|
return Math.max(Math.min(v, max), min);
|
|
} |