void ParticleComponent::update(sf::Time dt) { if (mEmitting) { emitParticles(computeParticleCount(dt)); } mNeedsVertexUpdate = true; for (std::size_t i = 0; i < mParticles.size();) { updateParticle(mParticles[i], dt); // lifetime, move, rotate if (mParticles[i].passedLifetime < mParticles[i].totalLifetime) { for (std::size_t j = 0; j < mAffectors.size(); ++j) { if (mAffectors[j]) { mAffectors[j](mParticles[i], dt); } } ++i; } else { mParticles.erase(mParticles.begin() + i); } } }
void UniversalEmitter::operator() (EmissionInterface& system, sf::Time dt) { const std::size_t nbParticles = computeParticleCount(dt); for (std::size_t i = 0; i < nbParticles; ++i) { // Create particle and specify parameters Particle particle( mParticleLifetime() ); particle.position = mParticlePosition(); particle.velocity = mParticleVelocity(); particle.rotation = mParticleRotation(); particle.rotationSpeed = mParticleRotationSpeed(); particle.scale = mParticleScale(); particle.color = mParticleColor(); particle.textureIndex = mParticleTextureIndex(); system.emitParticle(particle); } }