Просмотр исходного кода

Added a color variation setting to particle system

Ivan Safrin 11 лет назад
Родитель
Сommit
00523995f2

+ 3 - 0
Core/Contents/Include/PolyParticleEmitter.h

@@ -133,6 +133,9 @@ namespace Polycode {
             BezierCurve colorCurveA;
         
         
+            Color colorDeviation;
+        
+        
             virtual Entity *Clone(bool deepClone, bool ignoreEditorOnly) const;
             virtual void applyClone(Entity *clone, bool deepClone, bool ignoreEditorOnly) const;
         

+ 6 - 2
Core/Contents/Source/PolyParticleEmitter.cpp

@@ -37,6 +37,7 @@ SceneParticleEmitter::SceneParticleEmitter(unsigned int particleCount, Number li
     depthWrite = false;
     systemEnabled = true;
     setParticleCount(particleCount);
+    colorDeviation = Color(0.0, 0.0, 0.0, 0.0);
 }
 
 SceneParticleEmitter::~SceneParticleEmitter() {
@@ -96,6 +97,11 @@ void SceneParticleEmitter::resetParticle(unsigned int index) {
         particles[index].position = systemTrasnformMatrix * particles[index].position;
         particles[index].velocity = systemTrasnformMatrix.rotateVector( particles[index].velocity);
     }
+    
+    particles[index].color = Color(1.0 - (RANDOM_NUMBER*colorDeviation.r),
+                                   1.0 - (RANDOM_NUMBER*colorDeviation.g),
+                                   1.0 - (RANDOM_NUMBER*colorDeviation.b),
+                                   1.0 - (RANDOM_NUMBER*colorDeviation.a));
 }
 
 void SceneParticleEmitter::setParticleCount(unsigned int newParticleCount) {
@@ -360,8 +366,6 @@ void SceneParticleEmitter::updateParticles() {
                                         colorCurveG.getHeightAt(normLife)*particles[i].brightnessDeviation,
                                         colorCurveB.getHeightAt(normLife)*particles[i].brightnessDeviation,
                                         colorCurveA.getHeightAt(normLife)*particles[i].brightnessDeviation);
-        } else {
-            particles[i].color = color;
         }
         
         if(useScaleCurve) {