I managed to get them resetting properly but I had to make the member variable 'fraction' of emitter to public so I could reset it.
Heres my current implementation:
void ParticleSystem::start(void) {
Emitter *emitter;
int i;
// Set alive flag
m_isAlive = true;
// Empty the particle system
m_sparkParticleSystem->empty();
// Set the emitters tank values back to their initial values
for (i=0; i<m_emitters.size(); ++i) {
emitter = &m_emitters[i];
emitter->m_sparkEmitter->setTank(emitter->m_initialTank);
emitter->m_sparkEmitter->fraction = Rand::getFloat(1.0f); }
}
The red bit is the only bit I had to hack in. If you could please add some method to reset this or something then that'll be great and I can remove my hacks