pinball/assets/_Game/Scripts/Utilities/index.ts

45 lines
1.1 KiB
TypeScript

export default class Utilities {
/**
*
* @param time (s)
* @returns
*/
public static delay(time: number): Promise<any> {
return new Promise((resolve) => setTimeout(resolve, time * 1000));
}
/**
*@param predicate
* @param time (s)
* @returns
*/
public static async waitUntil(predicate: () => boolean, timeCheck = 0.01) {
while (!predicate()) {
await this.delay(timeCheck);
}
}
public static getJson(json: string): any {
try {
return JSON.parse(json);
} catch (error) {
return false;
}
}
public static weightedRandom<T>(items: T[], weights: number[]): T {
let i = 0;
const weightsClone = [...weights];
for (i = 1; i < weightsClone.length; i++) {
weightsClone[i] += weights[i - 1];
}
let random = Math.random() * weightsClone[weightsClone.length - 1];
for (i = 0; i < weightsClone.length; i++) {
if (weightsClone[i] > random) break;
}
return items[i];
}
}