math.ts 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. /** Ensures the passed `value` always stays between `min` and `max` */
  2. export function clamp(value: number, min: number, max: number) {
  3. return Math.max(Math.min(value, max), min);
  4. }
  5. /**
  6. * Transforms the value parameter from the numerical range `range_1_min-range_1_max` to the numerical range `range_2_min-range_2_max`
  7. * For example, you can map the value 2 in the range of 0-5 to the range of 0-10 and you'd get a 4 as a result.
  8. */
  9. export function mapRange(value: number, range_1_min: number, range_1_max: number, range_2_min: number, range_2_max: number) {
  10. if(Number(range_1_min) === 0.0 && Number(range_2_min) === 0.0)
  11. return value * (range_2_max / range_1_max);
  12. return (value - range_1_min) * ((range_2_max - range_2_min) / (range_1_max - range_1_min)) + range_2_min;
  13. }
  14. /** Returns a random number between `min` and `max` (inclusive) */
  15. export function randRange(min: number, max: number): number
  16. /** Returns a random number between 0 and `max` (inclusive) */
  17. export function randRange(max: number): number
  18. /** Returns a random number between `min` and `max` (inclusive) */
  19. export function randRange(...args: number[]): number {
  20. let min: number, max: number;
  21. if(typeof args[0] === "number" && typeof args[1] === "number") {
  22. // using randRange(min, max)
  23. [ min, max ] = args;
  24. }
  25. else if(typeof args[0] === "number" && typeof args[1] !== "number") {
  26. // using randRange(max)
  27. min = 0;
  28. max = args[0];
  29. }
  30. else
  31. throw new TypeError(`Wrong parameter(s) provided - expected: "number" and "number|undefined", got: "${typeof args[0]}" and "${typeof args[1]}"`);
  32. min = Number(min);
  33. max = Number(max);
  34. if(isNaN(min) || isNaN(max))
  35. throw new TypeError("Parameters \"min\" and \"max\" can't be NaN");
  36. if(min > max)
  37. throw new TypeError("Parameter \"min\" can't be bigger than \"max\"");
  38. return Math.floor(Math.random() * (max - min + 1)) + min;
  39. }