Particle ParticleEmitter::emit () { int mass = randomness ? randBetween(1, 10) : 1; Particle particle = Particle(this->location, mass); Vector3 emitDirection = direction; // Add random variation to emit direction if (randomness) { int offsetSign = randBetween(0, 1); int spread = randBetween(0, emitSpread); emitDirection.x += (offsetSign == 0 ? spread : -spread); spread = randBetween(1, emitSpread); offsetSign = randBetween(0, 1); emitDirection.y += (offsetSign == 0 ? spread : -spread); spread = randBetween(1, emitSpread); offsetSign = randBetween(0, 1); emitDirection.z += (offsetSign == 0 ? spread : -spread); } // Add random variation to emit velocity double velocity = Particle::initialVelocity; //velocity += randBetween(-5, 5); Vector3 emitForce = emitDirection.normalise().mult(velocity); particle.applyForce(emitForce); return particle; }
void Emitter::createParticle() { float x; float y; Particle particle = Particle(boundary, location, 10); //if (leftParticles) //{ // x = vx(generator); // y = vy(generator); // leftParticles = false; //} //else //{ x = explosionVX(generator); y = explosionVY(generator); // leftParticles = true; //} particle.setVelocity(sf::Vector2f(x, y)); sf::Sprite sprite = particle.getSprite(); sprite.setTexture(texture1); sprite.setPosition(particle.getLocation()); particle.applyForce(sf::Vector2f(0, 10000)); particle.setSprite(sprite); this->particles.push_front(particle); }