import Emitter from '@/particles/emitter.js'; import createEcs from '@/server/create/ecs.js'; import ClientEcs from './client-ecs.js'; const ecs = createEcs(ClientEcs); ecs.$$caret = Math.pow(2, 31); const emitter = new Emitter(ecs); addEventListener('message', (particle) => { if (!ecs.get(1)) { ecs.createManySpecific([[1, particle.data]]); return; } emitter.emit(particle.data) .onEnd(() => {}); }); let last = Date.now(); function tick() { const now = Date.now(); const elapsed = (now - last) / 1000; last = now; if (ecs.get(1)) { ecs.tick(elapsed); emitter.tick(elapsed); if ('1' in ecs.diff) { delete ecs.diff['1']; } postMessage(ecs.diff); ecs.setClean(); } requestAnimationFrame(tick); } requestAnimationFrame(tick);