History

cleanup

Jeffrey Ventrella committed 13 years ago

Commit df32c181 parent 4b07d653 files · +27 −17Browse files

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

Unified · Split

interface/src/ParticleSystem.cpp+18−6
@@ -29,6 +29,7 @@ ParticleSystem::ParticleSystem() { · 28 unmodified lines
2929
3030 Emitter * e = &_emitter[emitterIndex];
3131 e->position = glm::vec3(0.0f, 0.0f, 0.0f);
32+ e->previousPosition = glm::vec3(0.0f, 0.0f, 0.0f);
3233 e->direction = glm::vec3(0.0f, 1.0f, 0.0f);
3334 e->visible = false;
3435 e->particleResolution = DEFAULT_PARTICLE_SPHERE_RESOLUTION;
@@ -39,6 +40,7 @@ ParticleSystem::ParticleSystem() { · 4 unmodified lines
3940 e->rate = 0.0f;
4041 e->currentParticle = 0;
4142 e->particleRenderStyle = PARTICLE_RENDER_STYLE_SPHERE;
43+ e->numParticlesEmittedThisTime = 0;
4244
4345 for (int lifeStage = 0; lifeStage<NUM_PARTICLE_LIFE_STAGES; lifeStage++) {
4446 setParticleAttributesToDefault(&_emitter[emitterIndex].particleAttributes[lifeStage]);
@@ -80,12 +82,13 @@ void ParticleSystem::simulate(float deltaTime) { · 35 unmodified lines
8082
8183 _emitter[e].emitReserve += _emitter[e].rate * deltaTime;
8284
83− int numParticlesEmittedThisTime = (int)_emitter[e].emitReserve;
85+ _emitter[e].numParticlesEmittedThisTime = (int)_emitter[e].emitReserve;
8486
85− _emitter[e].emitReserve -= numParticlesEmittedThisTime;
87+ _emitter[e].emitReserve -= _emitter[e].numParticlesEmittedThisTime;
8688
87− for (int p = 0; p < numParticlesEmittedThisTime; p++) {
88− createParticle(e);
89+ for (int p = 0; p < _emitter[e].numParticlesEmittedThisTime; p++) {
90+ float timeFraction = (float)p / (float)_emitter[e].numParticlesEmittedThisTime;
91+ createParticle(e, timeFraction);
8992 }
9093 }
9194
@@ -102,7 +105,7 @@ void ParticleSystem::simulate(float deltaTime) { · 10 unmodified lines
102105 }
103106 }
104107
105−void ParticleSystem::createParticle(int e) {
108+void ParticleSystem::createParticle(int e, float timeFraction) {
106109
107110 for (unsigned int p = 0; p < MAX_PARTICLES; p++) {
108111 if (!_particle[p].alive) {
@@ -111,7 +114,10 @@ void ParticleSystem::createParticle(int e) { · 2 unmodified lines
111114 _particle[p].alive = true;
112115 _particle[p].age = 0.0f;
113116 _particle[p].velocity = _emitter[e].direction * _emitter[e].thrust;
114− _particle[p].position = _emitter[e].position;
117+
118+//_particle[p].position = _emitter[e].position;
119+_particle[p].position = _emitter[e].previousPosition + timeFraction * (_emitter[e].position - _emitter[e].previousPosition);
120+
115121 _particle[p].radius = _emitter[e].particleAttributes[0].radius;
116122 _particle[p].color = _emitter[e].particleAttributes[0].color;
117123 _particle[p].previousParticle = -1;
@@ -150,6 +156,12 @@ void ParticleSystem::killParticle(int p) { · 32 unmodified lines
150156 }
151157
152158
159+void ParticleSystem::setEmitterPosition(int emitterIndex, glm::vec3 position) {
160+ _emitter[emitterIndex].previousPosition = _emitter[emitterIndex].position;
161+ _emitter[emitterIndex].position = position;
162+}
163+
164+
153165 void ParticleSystem::setParticleAttributes(int emitterIndex, ParticleAttributes attributes) {
154166
155167 for (int lifeStage = 0; lifeStage < NUM_PARTICLE_LIFE_STAGES; lifeStage ++ ) {