silphius/app/react/components/particle-worker.js

50 lines
975 B
JavaScript
Raw Normal View History

2024-07-30 09:56:53 -05:00
import Emitter from '@/particles/emitter.js';
import createEcs from '@/server/create/ecs.js';
import ClientEcs from './client-ecs.js';
const ecs = createEcs(ClientEcs);
2024-08-04 21:51:48 -05:00
[
'ClampPositions',
'Colliders',
'MaintainColliderHash',
'VisibleAabbs',
]
.forEach((system) => {
ecs.system(system).active = false;
})
2024-07-30 09:56:53 -05:00
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(() => {});
});
2024-07-31 09:47:51 -05:00
let last = performance.now();
function tick(now) {
2024-07-30 09:56:53 -05:00
const elapsed = (now - last) / 1000;
last = now;
2024-08-01 14:31:54 -05:00
requestAnimationFrame(tick);
if (!ecs.get(1)) {
return;
}
ecs.tick(elapsed);
emitter.tick(elapsed);
if ('1' in ecs.diff) {
delete ecs.diff['1'];
2024-08-01 14:31:54 -05:00
}
if (Object.keys(ecs.diff).length > 0) {
postMessage(ecs.diff);
2024-08-01 14:31:54 -05:00
}
ecs.setClean();
2024-07-30 09:56:53 -05:00
}
requestAnimationFrame(tick);