2021-12-01 14:48:14 +01:00
|
|
|
export class MathUtils {
|
|
|
|
/**
|
2021-12-03 10:11:16 +01:00
|
|
|
*
|
2021-12-01 14:48:14 +01:00
|
|
|
* @param p Position to check.
|
|
|
|
* @param r Rectangle to check the overlap against.
|
|
|
|
* @returns true is overlapping
|
|
|
|
*/
|
|
|
|
public static isOverlappingWithRectangle(
|
2021-12-03 10:11:16 +01:00
|
|
|
p: { x: number; y: number },
|
|
|
|
r: { x: number; y: number; width: number; height: number }
|
2021-12-01 14:48:14 +01:00
|
|
|
): boolean {
|
2021-12-03 10:11:16 +01:00
|
|
|
return this.isBetween(p.x, r.x, r.x + r.width) && this.isBetween(p.y, r.y, r.y + r.height);
|
2021-12-01 14:48:14 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2021-12-03 10:11:16 +01:00
|
|
|
*
|
2021-12-01 14:48:14 +01:00
|
|
|
* @param value Value to check
|
|
|
|
* @param min inclusive min value
|
|
|
|
* @param max inclusive max value
|
|
|
|
* @returns true if value is in <min, max>
|
|
|
|
*/
|
|
|
|
public static isBetween(value: number, min: number, max: number): boolean {
|
2021-12-03 10:11:16 +01:00
|
|
|
return value >= min && value <= max;
|
2021-12-01 14:48:14 +01:00
|
|
|
}
|
2022-01-18 12:33:46 +01:00
|
|
|
|
|
|
|
public static distanceBetween(
|
|
|
|
p1: { x: number; y: number },
|
|
|
|
p2: { x: number; y: number },
|
|
|
|
squared: boolean = true
|
|
|
|
): number {
|
|
|
|
const distance = Math.pow(p1.x - p2.x, 2) + Math.pow(p1.y - p2.y, 2);
|
|
|
|
return squared ? Math.sqrt(distance) : distance;
|
|
|
|
}
|
2022-01-20 15:10:54 +01:00
|
|
|
|
|
|
|
public static randomFromArray<T>(array: T[]): T {
|
|
|
|
return array[Math.floor(Math.random() * array.length)];
|
|
|
|
}
|
2021-12-03 10:11:16 +01:00
|
|
|
}
|