Showing the changes to interface/src/ParticleSystem.cpp (1 of 5 files). Show all
Unified · Split
| @@ -322,27 +322,48 @@ void ParticleSystem::updateParticle(int p, float deltaTime) { · 321 unmodified lines | ||
| 322 | 322 | |
| 323 | 323 | // apply color modulation |
| 324 | 324 | 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; | |
| 326 | 328 | float radian = _timer * myEmitter.particleAttributes[lifeStage ].modulationRate * PI_TIMES_TWO; |
| 329 | + | |
| 327 | 330 | if (myEmitter.particleAttributes[lifeStage ].modulationStyle == COLOR_MODULATION_STYLE_LIGHNTESS_PULSE) { |
| 328 | 331 | 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; | |
| 330 | 335 | } |
| 336 | + | |
| 331 | 337 | } 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; | |
| 334 | 350 | } |
| 335 | 351 | |
| 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; | |
| 340 | 356 | |
| 341 | 357 | if (_particle[p].color.r > 1.0f) {_particle[p].color.r = 1.0f;} |
| 342 | 358 | if (_particle[p].color.g > 1.0f) {_particle[p].color.g = 1.0f;} |
| 343 | 359 | if (_particle[p].color.b > 1.0f) {_particle[p].color.b = 1.0f;} |
| 344 | 360 | 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 | + } | |
| 346 | 367 | |
| 347 | 368 | // do this at the end... |
| 348 | 369 | _particle[p].age += deltaTime; |