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 538x 538x 848x 314x 314x 314x 538x 538x 538x 330x 330x 538x 2x 2x 2x 2x 2x 2x 2x 2x 415x 415x 415x 415x 214x 214x 415x 415x 415x 415x 415x 415x 159x 159x 415x 415x | 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); } }; } |