History

improved particle rainbow color cycle mode

Jeffrey Ventrella committed 13 years ago

Commit 6e69c4f1 parent d87b4a85 files · +72 −162Browse files

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

Unified · Split

interface/src/ParticleSystem.cpp+30−9
@@ -322,27 +322,48 @@ void ParticleSystem::updateParticle(int p, float deltaTime) { · 321 unmodified lines
322322
323323 // apply color modulation
324324 if (myEmitter.particleAttributes[lifeStage ].modulationAmplitude > 0.0f) {
325− float modulation = 0.0f;
325+ float redModulation = 0.0f;
326+ float greenModulation = 0.0f;
327+ float bueModulation = 0.0f;
326328 float radian = _timer * myEmitter.particleAttributes[lifeStage ].modulationRate * PI_TIMES_TWO;
329+
327330 if (myEmitter.particleAttributes[lifeStage ].modulationStyle == COLOR_MODULATION_STYLE_LIGHNTESS_PULSE) {
328331 if (sinf(radian) > 0.0f) {
329− modulation = myEmitter.particleAttributes[lifeStage].modulationAmplitude;
332+ redModulation = myEmitter.particleAttributes[lifeStage].modulationAmplitude;
333+ greenModulation = myEmitter.particleAttributes[lifeStage].modulationAmplitude;
334+ bueModulation = myEmitter.particleAttributes[lifeStage].modulationAmplitude;
330335 }
336+
331337 } else if (myEmitter.particleAttributes[lifeStage].modulationStyle == COLOR_MODULATION_STYLE_LIGHTNESS_WAVE) {
332− float a = myEmitter.particleAttributes[lifeStage].modulationAmplitude;
333− modulation = a * ONE_HALF + sinf(radian) * a * ONE_HALF;
338+ float amp = myEmitter.particleAttributes[lifeStage].modulationAmplitude;
339+ float brightness = amp * ONE_HALF + sinf(radian) * amp * ONE_HALF;
340+ redModulation = brightness;
341+ greenModulation = brightness;
342+ bueModulation = brightness;
343+
344+ } else if (myEmitter.particleAttributes[lifeStage].modulationStyle == COLOR_MODULATION_STYLE_RAINBOW_CYCLE) {
345+
346+ float amp = myEmitter.particleAttributes[lifeStage].modulationAmplitude * ONE_HALF;
347+ redModulation = sinf(radian * 0.5f) * amp;
348+ greenModulation = sinf(radian * 0.7f) * amp;
349+ bueModulation = sinf(radian * 1.0f) * amp;
334350 }
335351
336− _particle[p].color.r += modulation;
337− _particle[p].color.g += modulation;
338− _particle[p].color.b += modulation;
339− _particle[p].color.a += modulation;
352+ _particle[p].color.r += redModulation;
353+ _particle[p].color.g += greenModulation;
354+ _particle[p].color.b += bueModulation;
355+ _particle[p].color.a = 1.0f;
340356
341357 if (_particle[p].color.r > 1.0f) {_particle[p].color.r = 1.0f;}
342358 if (_particle[p].color.g > 1.0f) {_particle[p].color.g = 1.0f;}
343359 if (_particle[p].color.b > 1.0f) {_particle[p].color.b = 1.0f;}
344360 if (_particle[p].color.a > 1.0f) {_particle[p].color.a = 1.0f;}
345− }
361+
362+ if (_particle[p].color.r < 0.0f) {_particle[p].color.r = 0.0f;}
363+ if (_particle[p].color.g < 0.0f) {_particle[p].color.g = 0.0f;}
364+ if (_particle[p].color.b < 0.0f) {_particle[p].color.b = 0.0f;}
365+ if (_particle[p].color.a < 0.0f) {_particle[p].color.a = 0.0f;}
366+ }
346367
347368 // do this at the end...
348369 _particle[p].age += deltaTime;