import Emitter from '@/particles/emitter.js'; import createEcs from '@/server/create/ecs.js'; import ClientEcs from './client-ecs.js'; const ecs = createEcs(ClientEcs); [ 'ClampPositions', 'Colliders', 'MaintainColliderHash', 'VisibleAabbs', ] .forEach((system) => { ecs.system(system).active = false; }) 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 = performance.now(); function tick(now) { const elapsed = (now - last) / 1000; last = now; requestAnimationFrame(tick); if (!ecs.get(1)) { return; } ecs.tick(elapsed); emitter.tick(elapsed); if ('1' in ecs.diff) { delete ecs.diff['1']; } if (Object.keys(ecs.diff).length > 0) { postMessage(ecs.diff); } ecs.setClean(); } requestAnimationFrame(tick);