lingo3d
Version:
Lingo3D is a React/Vue 3d game development framework that ships with a complete visual editor
40 lines • 1.3 kB
JavaScript
import { onBeforeRender } from "../../events/onBeforeRender";
import Appendable from "../../display/core/Appendable";
export default (cb) => {
const queued = new Map();
const processed = new Map();
const execute = () => {
if (processed.size === 0)
for (const [target, data] of queued)
processed.set(target, data);
for (const [target, data] of processed) {
processed.delete(target);
if (cb(target, data))
break;
}
};
let handle;
const start = () => (handle = onBeforeRender(execute));
const deleteSystem = (item) => {
if (!queued.delete(item))
return;
processed.delete(item);
item instanceof Appendable && item.$deleteSystemSet.delete(deleteSystem);
queued.size === 0 && handle?.cancel();
};
return [
(item, data) => {
if (queued.has(item)) {
queued.set(item, data);
return;
}
queued.set(item, data);
item instanceof Appendable &&
item.$deleteSystemSet.add(deleteSystem);
if (queued.size === 1)
start();
},
deleteSystem
];
};
//# sourceMappingURL=deferredRenderSystemWithData.js.map