Pausing Particle Emission

Godot Version



I’m writing a custom particle shader for a one-shot particle effect. I’ve got a fixed amount of particles I want to emit, but I want to be able to stop/start the emission at various points; for example, I want to emit 10% of the total particles now, then wait an arbitrary amount of time, then emit 20% of them, then wait, then emit more, etc.

The start position and behaviour of the particles change based on whether a particle is emitted earlier or later in the sequence (i.e. the first 20% of particles don’t do the same thing as the second 20% of particles), so I need to know where a given Nth particle is in relation to the total number of particles that will be emitted. And I need previous particles to live out their full lifespan even if I’m emitting the next set of particles. So, I don’t think I can just restart the particle emitter with a new amount of particles.

Currently, I don’t see a way for the particle shader to access the amount value of the GPUParticles3D, just the AMOUNT_RATIO, which doesn’t seem helpful here. I also don’t see a way to just “pause” the particle emitter and have it continue from where it was when I resume; switching emitting between true and false seems to restart the process, because after setting emitting=true, the particles are being spawned with the position/behaviour I want from the initial particles, rather than the particles that are, say, 20% into the sequence.

I’m not sure if I’m explaining that right, but my question is essentially - is there a way to pause a particle node without resetting its internal ordering or sequence of the particles, or to pause particles based on their rank within the total number of particles in the system?