UNPKG

gpu-curtains

Version:

gpu-curtains is a 3D WebGPU rendering engine. It can be used as a standalone 3D engine, but also includes extra classes focused on mapping 3d objects to DOM elements; It allows users to synchronize values such as position, sizing, or scale between them.

69 lines (67 loc) 2.44 kB
var __typeError = (msg) => { throw TypeError(msg); }; var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg); var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj)); var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value); var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value); var __privateWrapper = (obj, member, setter, getter) => ({ set _(value) { __privateSet(obj, member, value); }, get _() { return __privateGet(obj, member, getter); } }); var _taskCount; class TasksQueueManager { /** * TaskQueueManager constructor */ constructor() { /** Private number to assign a unique id to each {@link TaskQueueItem | task queue item} */ __privateAdd(this, _taskCount, 0); this.queue = []; } /** * Add a {@link TaskQueueItem | task queue item} to the queue * @param callback - callback to add to the {@link TaskQueueItem | task queue item} * @param parameters - {@link TaskQueueItemParams | parameters} of the {@link TaskQueueItem | task queue item} to add * @returns - {@link TaskQueueItem#id | id} of the new {@link TaskQueueItem | task queue item}, useful to later remove the task if needed */ add(callback = (args) => { }, { order = this.queue.length, once = false } = {}) { const task = { callback, order, once, id: __privateGet(this, _taskCount) }; __privateWrapper(this, _taskCount)._++; this.queue.push(task); this.queue.sort((a, b) => { return a.order - b.order; }); return task.id; } /** * Remove a {@link TaskQueueItem | task queue item} from the queue * @param taskId - {@link TaskQueueItem#id | id} of the new {@link TaskQueueItem | task queue item} to remove */ remove(taskId = 0) { this.queue = this.queue.filter((task) => task.id !== taskId); } /** * Execute the {@link TasksQueueManager#queue | tasks queue array} */ execute(args) { this.queue.forEach((task) => { task.callback(args); if (task.once) { this.remove(task.id); } }); } } _taskCount = new WeakMap(); export { TasksQueueManager };