@moderrkowo/jsgl
Version:
Client-side JavaScript library for creating web 2D games. Focusing at objective game.
62 lines (61 loc) • 1.56 kB
text/typescript
/**
* Speedy floor faster than Math.floor(a)
* @param a Value to floor
* @returns The floored number
*/
export function floor(a: number) {
return a | a;
}
/**
* Checks is number in range
* @param a Value to check
* @param min Minimal of range
* @param max Maximum of range
* @returns is number in range
*/
export function IsInRange(a: number, min: number, max: number): boolean {
return a >= min && a <= max;
}
/**
* Clamps number between min and max
* @param a Value to clamp
* @param min The minimum value
* @param max The maximum value
* @returns Clamped number
*/
export function Clamp(a: number, min: number, max: number): number {
return Math.min(max, Math.max(min, a));
}
/**
* Clamps number between 0 and 1
* @param a Value to clamp
* @returns Clamped01 number
*/
export function Clamp01(a: number): number {
return Clamp(a, 0, 1);
}
/**
* A Lerp function returns the value between two numbers at specified decimal midpoints.
* @param x The minimum of range
* @param y The maximum of range
* @param a Decimal midpoint
* @returns Value between two numbers
*/
export function Lerp(x: number, y: number, a: number): number {
return x * (1 - a) + y * a;
}
export function InvertedLerp(x: number, y: number, a: number): number {
return Clamp01((a - x) / (y - x));
}
export function Range(
x1: number,
y1: number,
x2: number,
y2: number,
a: number
) {
return Lerp(x2, y2, InvertedLerp(x1, y1, a));
}
export function RandomInRange(min: number, max: number) {
return floor(Math.random() * (max - min)) + min;
}