particleEmitterSystem = (env, ents) => {
for (const ent of ents) {
if (ent.particleEmitter && ent.position) {
const { _particles, emit, perFrame, forces, dieAfter } =
ent.particleEmitter;
let i = dieAfter < perFrame ? dieAfter : perFrame;
ent.particleEmitter.dieAfter -= i;
while (i--) {
const p = emit(ent);
if (p) _particles.push(p);
}
i = _particles.length;
while (i--) {
_particles[i].update(forces);
if (_particles[i].isDead) _particles.splice(i, 1);
}
if (ent.particleEmitter.dieAfter <= 0 && _particles.length === 0) {
env.killEntity(ent);
}
}
}
}