History

added extra mode and improved particle system

Jeffrey Ventrella committed 13 years ago

Commit ad0ca741 parent 05039b44 files · +63 −50Browse files

Showing the changes to interface/src/ParticleSystem.cpp (1 of 4 files). Show all

Unified · Split

interface/src/ParticleSystem.cpp+10−16
@@ -30,7 +30,8 @@ ParticleSystem::ParticleSystem() { · 29 unmodified lines
3030 _emitter[emitterIndex].particleLifespan = DEFAULT_PARTICLE_LIFESPAN;
3131 _emitter[emitterIndex].baseParticle.alive = false;
3232 _emitter[emitterIndex].baseParticle.age = 0.0f;
33− _emitter[emitterIndex].baseParticle.lifespan = 0.0f;
33+ _emitter[emitterIndex].thrust = 0.0f;
34+ _emitter[emitterIndex].rate = 0.0f;
3435 _emitter[emitterIndex].baseParticle.radius = 0.0f;
3536 _emitter[emitterIndex].baseParticle.emitterIndex = 0;
3637 _emitter[emitterIndex].baseParticle.position = glm::vec3(0.0f, 0.0f, 0.0f);
@@ -59,7 +60,6 @@ ParticleSystem::ParticleSystem() { · 22 unmodified lines
5960 for (unsigned int p = 0; p < MAX_PARTICLES; p++) {
6061 _particle[p].alive = false;
6162 _particle[p].age = 0.0f;
62− _particle[p].lifespan = 0.0f;
6363 _particle[p].radius = 0.0f;
6464 _particle[p].emitterIndex = 0;
6565 _particle[p].position = glm::vec3(0.0f, 0.0f, 0.0f);
@@ -84,7 +84,7 @@ void ParticleSystem::simulate(float deltaTime) { · 18 unmodified lines
8484 // update particles
8585 for (unsigned int p = 0; p < _numParticles; p++) {
8686 if (_particle[p].alive) {
87− if (_particle[p].age > _particle[p].lifespan) {
87+ if (_particle[p].age > _emitter[_particle[p].emitterIndex].particleLifespan) {
8888 killParticle(p);
8989 } else {
9090 updateParticle(p, deltaTime);
@@ -93,10 +93,10 @@ void ParticleSystem::simulate(float deltaTime) { · 2 unmodified lines
9393 }
9494 }
9595
96−void ParticleSystem::emitParticlesNow(int e, int num, float thrust) {
96+void ParticleSystem::emitNow(int e) {
9797
98− for (unsigned int p = 0; p < num; p++) {
99− createParticle(e, _emitter[e].direction * thrust);
98+ for (unsigned int p = 0; p < _emitter[e].rate; p++) {
99+ createParticle(e, _emitter[e].direction);
100100 }
101101 }
102102
@@ -108,8 +108,7 @@ void ParticleSystem::createParticle(int e, glm::vec3 velocity) { · 5 unmodified lines
108108 _particle[p].emitterIndex = e;
109109 _particle[p].alive = true;
110110 _particle[p].age = 0.0f;
111− _particle[p].velocity = velocity;
112− _particle[p].lifespan = _emitter[e].particleLifespan;
111+ _particle[p].velocity = _emitter[e].direction * _emitter[e].thrust;
113112 _particle[p].position = _emitter[e].position;
114113 _particle[p].radius = _emitter[e].particleAttributes[0].radius;
115114 _particle[p].color = _emitter[e].particleAttributes[0].color;
@@ -163,9 +162,9 @@ void ParticleSystem::setParticleAttributes(int emitterIndex, int lifeStage, Part · 47 unmodified lines
163162
164163 void ParticleSystem::updateParticle(int p, float deltaTime) {
165164
166− assert(_particle[p].age <= _particle[p].lifespan);
165+ assert(_particle[p].age <= _emitter[_particle[p].emitterIndex].particleLifespan);
167166
168− float ageFraction = _particle[p].age / _particle[p].lifespan;
167+ float ageFraction = _particle[p].age / _emitter[_particle[p].emitterIndex].particleLifespan;
169168
170169 int lifeStage = (int)( ageFraction * (NUM_PARTICLE_LIFE_STAGES-1) );
171170
@@ -257,7 +256,7 @@ void ParticleSystem::updateParticle(int p, float deltaTime) { · 85 unmodified lines
257256 _particle[p].age += deltaTime;
258257 }
259258
260−void ParticleSystem::setEmitterBaseParticle(int emitterIndex, bool showing ) {
259+void ParticleSystem::setShowingEmitterBaseParticle(int emitterIndex, bool showing ) {
261260
262261 _emitter[emitterIndex].baseParticle.alive = true;
263262 _emitter[emitterIndex].baseParticle.emitterIndex = emitterIndex;
@@ -271,7 +270,6 @@ void ParticleSystem::killAllParticles() { · 7 unmodified lines
271270 }
272271
273272
274−
275273 void ParticleSystem::render() {
276274
277275 // render the emitters
@@ -346,8 +344,6 @@ void ParticleSystem::renderParticle(int p) { · 68 unmodified lines
346344 }
347345 }
348346
349−
350−
351347 void ParticleSystem::renderEmitter(int e, float size) {
352348
353349 glLineWidth(2.0f);
@@ -362,5 +358,3 @@ void ParticleSystem::renderEmitter(int e, float size) { · 8 unmodified lines
362358
363359
364360
365−
366−