export default class Utilities { /** * * @param time (s) * @returns */ public static delay(time: number): Promise { 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(items: T[], weights: number[]): [T, number] { 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], i]; } }