Пример #1
0
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);
		}
	}
}
Пример #2
0
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);
	}
}