Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | 2x 2x 2x 2x 2x 2x 2x 2x 356x 356x 648x 246x 246x 246x 356x 356x 356x 212x 212x 356x 2x 2x 2x 2x 2x 2x 2x 2x 321x 321x 321x 321x 150x 150x 321x 321x 321x 321x 321x 321x 129x 129x 321x 321x | import { raf } from './timing.js'; // TODO move this into timing.js where it probably belongs /** * @param {number} now * @returns {void} */ function run_tasks(now) { raf.tasks.forEach((task) => { if (!task.c(now)) { raf.tasks.delete(task); task.f(); } }); if (raf.tasks.size !== 0) { raf.tick(run_tasks); } } /** * Creates a new task that runs on each raf frame * until it returns a falsy value or is aborted * @param {import('#client').TaskCallback} callback * @returns {import('#client').Task} */ export function loop(callback) { /** @type {import('#client').TaskEntry} */ let task; if (raf.tasks.size === 0) { raf.tick(run_tasks); } return { promise: new Promise((fulfill) => { raf.tasks.add((task = { c: callback, f: fulfill })); }), abort() { raf.tasks.delete(task); } }; } |