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);
|
2024-08-05 01:48:01 -05:00
|
|
|
if ('1' in ecs.diff) {
|
|
|
|
delete ecs.diff['1'];
|
2024-08-01 14:31:54 -05:00
|
|
|
}
|
2024-08-05 01:48:01 -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);
|