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
29 29
30 Emitter * e = &_emitter[emitterIndex];30 Emitter * e = &_emitter[emitterIndex];
31 e->position = glm::vec3(0.0f, 0.0f, 0.0f);31 e->position = glm::vec3(0.0f, 0.0f, 0.0f);
32 e->previousPosition = glm::vec3(0.0f, 0.0f, 0.0f);
32 e->direction = glm::vec3(0.0f, 1.0f, 0.0f);33 e->direction = glm::vec3(0.0f, 1.0f, 0.0f);
33 e->visible = false;34 e->visible = false;
34 e->particleResolution = DEFAULT_PARTICLE_SPHERE_RESOLUTION;35 e->particleResolution = DEFAULT_PARTICLE_SPHERE_RESOLUTION;
@@ -39,6 +40,7 @@ ParticleSystem::ParticleSystem() { · 4 unmodified lines
39 e->rate = 0.0f;40 e->rate = 0.0f;
40 e->currentParticle = 0;41 e->currentParticle = 0;
41 e->particleRenderStyle = PARTICLE_RENDER_STYLE_SPHERE;42 e->particleRenderStyle = PARTICLE_RENDER_STYLE_SPHERE;
43 e->numParticlesEmittedThisTime = 0;
42 44
43 for (int lifeStage = 0; lifeStage<NUM_PARTICLE_LIFE_STAGES; lifeStage++) {45 for (int lifeStage = 0; lifeStage<NUM_PARTICLE_LIFE_STAGES; lifeStage++) {
44 setParticleAttributesToDefault(&_emitter[emitterIndex].particleAttributes[lifeStage]);46 setParticleAttributesToDefault(&_emitter[emitterIndex].particleAttributes[lifeStage]);
@@ -80,12 +82,13 @@ void ParticleSystem::simulate(float deltaTime) { · 35 unmodified lines
80 82
81 _emitter[e].emitReserve += _emitter[e].rate * deltaTime;83 _emitter[e].emitReserve += _emitter[e].rate * deltaTime;
82 84
83 int numParticlesEmittedThisTime = (int)_emitter[e].emitReserve;85 _emitter[e].numParticlesEmittedThisTime = (int)_emitter[e].emitReserve;
84 86
85 _emitter[e].emitReserve -= numParticlesEmittedThisTime;87 _emitter[e].emitReserve -= _emitter[e].numParticlesEmittedThisTime;
86 88
87 for (int p = 0; p < numParticlesEmittedThisTime; p++) {89 for (int p = 0; p < _emitter[e].numParticlesEmittedThisTime; p++) {
88 createParticle(e);90 float timeFraction = (float)p / (float)_emitter[e].numParticlesEmittedThisTime;
91 createParticle(e, timeFraction);
89 }92 }
90 }93 }
91 94
@@ -102,7 +105,7 @@ void ParticleSystem::simulate(float deltaTime) { · 10 unmodified lines
102 }105 }
103}106}
104 107
105void ParticleSystem::createParticle(int e) {108void ParticleSystem::createParticle(int e, float timeFraction) {
106 109
107 for (unsigned int p = 0; p < MAX_PARTICLES; p++) {110 for (unsigned int p = 0; p < MAX_PARTICLES; p++) {
108 if (!_particle[p].alive) {111 if (!_particle[p].alive) {
@@ -111,7 +114,10 @@ void ParticleSystem::createParticle(int e) { · 2 unmodified lines
111 _particle[p].alive = true;114 _particle[p].alive = true;
112 _particle[p].age = 0.0f;115 _particle[p].age = 0.0f;
113 _particle[p].velocity = _emitter[e].direction * _emitter[e].thrust;116 _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
115 _particle[p].radius = _emitter[e].particleAttributes[0].radius;121 _particle[p].radius = _emitter[e].particleAttributes[0].radius;
116 _particle[p].color = _emitter[e].particleAttributes[0].color;122 _particle[p].color = _emitter[e].particleAttributes[0].color;
117 _particle[p].previousParticle = -1;123 _particle[p].previousParticle = -1;
@@ -150,6 +156,12 @@ void ParticleSystem::killParticle(int p) { · 32 unmodified lines
150 }156 }
151 157
152 158
159void ParticleSystem::setEmitterPosition(int emitterIndex, glm::vec3 position) {
160 _emitter[emitterIndex].previousPosition = _emitter[emitterIndex].position;
161 _emitter[emitterIndex].position = position;
162}
163
164
153void ParticleSystem::setParticleAttributes(int emitterIndex, ParticleAttributes attributes) {165void ParticleSystem::setParticleAttributes(int emitterIndex, ParticleAttributes attributes) {
154 166
155 for (int lifeStage = 0; lifeStage < NUM_PARTICLE_LIFE_STAGES; lifeStage ++ ) {167 for (int lifeStage = 0; lifeStage < NUM_PARTICLE_LIFE_STAGES; lifeStage ++ ) {