|
@@ -109,6 +109,8 @@ void ScreenParticleEmitter::applyClone(Entity *clone, bool deepClone, bool ignor
|
|
|
_clone->dirVector = this->dirVector;
|
|
_clone->dirVector = this->dirVector;
|
|
|
_clone->gravVector = this->gravVector;
|
|
_clone->gravVector = this->gravVector;
|
|
|
_clone->deviation = this->deviation;
|
|
_clone->deviation = this->deviation;
|
|
|
|
|
+
|
|
|
|
|
+ _clone->setIgnoreParentMatrix(getIgnoreParentMatrix());
|
|
|
|
|
|
|
|
_clone->brightnessDeviation = this->brightnessDeviation;
|
|
_clone->brightnessDeviation = this->brightnessDeviation;
|
|
|
_clone->particleSize = this->particleSize;
|
|
_clone->particleSize = this->particleSize;
|
|
@@ -163,6 +165,7 @@ ParticleEmitter::ParticleEmitter(const String& imageFile, Mesh *particleMesh, in
|
|
|
isScreenEmitter = false;
|
|
isScreenEmitter = false;
|
|
|
dirVector = direction;
|
|
dirVector = direction;
|
|
|
gravVector = gravity;
|
|
gravVector = gravity;
|
|
|
|
|
+ ignoreParentMatrix = false;
|
|
|
this->emitterType = emitterType;
|
|
this->emitterType = emitterType;
|
|
|
this->emitSpeed = emitSpeed;
|
|
this->emitSpeed = emitSpeed;
|
|
|
this->deviation = deviation;
|
|
this->deviation = deviation;
|
|
@@ -211,6 +214,18 @@ ParticleEmitter::ParticleEmitter(const String& imageFile, Mesh *particleMesh, in
|
|
|
useScaleCurves = false;
|
|
useScaleCurves = false;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+bool ParticleEmitter::getIgnoreParentMatrix() {
|
|
|
|
|
+ return ignoreParentMatrix;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+void ParticleEmitter::setIgnoreParentMatrix(bool val) {
|
|
|
|
|
+ ignoreParentMatrix = val;
|
|
|
|
|
+ for(int i=0; i < particles.size(); i++) {
|
|
|
|
|
+ particles[i]->particleBody->ignoreParentMatrix = ignoreParentMatrix;
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
Texture *ParticleEmitter::getParticleTexture() {
|
|
Texture *ParticleEmitter::getParticleTexture() {
|
|
|
return particleTexture;
|
|
return particleTexture;
|
|
|
}
|
|
}
|
|
@@ -233,7 +248,7 @@ void ParticleEmitter::createParticles() {
|
|
|
Particle *particle;
|
|
Particle *particle;
|
|
|
for(int i=0; i < numParticles; i++) {
|
|
for(int i=0; i < numParticles; i++) {
|
|
|
particle = new Particle(particleType, isScreenEmitter, particleMaterial, particleTexture, pMesh);
|
|
particle = new Particle(particleType, isScreenEmitter, particleMaterial, particleTexture, pMesh);
|
|
|
- particle->particleBody->ignoreParentMatrix = true;
|
|
|
|
|
|
|
+ particle->particleBody->ignoreParentMatrix = ignoreParentMatrix;
|
|
|
particle->velVector = dirVector;
|
|
particle->velVector = dirVector;
|
|
|
particle->dirVector = dirVector;
|
|
particle->dirVector = dirVector;
|
|
|
particle->deviation = deviation;
|
|
particle->deviation = deviation;
|
|
@@ -320,7 +335,7 @@ void ParticleEmitter::setParticleCount(int count) {
|
|
|
Particle *particle;
|
|
Particle *particle;
|
|
|
for(int i=0; i < oldSize; i++) {
|
|
for(int i=0; i < oldSize; i++) {
|
|
|
particle = new Particle(particleType, isScreenEmitter, particleMaterial, particleTexture, pMesh);
|
|
particle = new Particle(particleType, isScreenEmitter, particleMaterial, particleTexture, pMesh);
|
|
|
- particle->particleBody->ignoreParentMatrix = true;
|
|
|
|
|
|
|
+ particle->particleBody->ignoreParentMatrix = ignoreParentMatrix;
|
|
|
particle->velVector = dirVector;
|
|
particle->velVector = dirVector;
|
|
|
particle->dirVector = dirVector;
|
|
particle->dirVector = dirVector;
|
|
|
particle->deviation = deviation;
|
|
particle->deviation = deviation;
|
|
@@ -373,7 +388,10 @@ void ParticleEmitter::resetParticle(Particle *particle) {
|
|
|
|
|
|
|
|
Vector3 startVector;
|
|
Vector3 startVector;
|
|
|
|
|
|
|
|
- Vector3 compoundScale = getParticleCompoundScale();
|
|
|
|
|
|
|
+ Vector3 compoundScale(1.0, 1.0, 1.0);
|
|
|
|
|
+ if(ignoreParentMatrix) {
|
|
|
|
|
+ compoundScale = getParticleCompoundScale();
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
particle->dirVector = dirVector;
|
|
particle->dirVector = dirVector;
|
|
|
// if(emitterMesh) {
|
|
// if(emitterMesh) {
|
|
@@ -397,9 +415,13 @@ void ParticleEmitter::resetParticle(Particle *particle) {
|
|
|
particle->brightnessDeviation = 1.0f - ( (-brightnessDeviation) + ((brightnessDeviation*2) * ((Number)rand()/RAND_MAX)));
|
|
particle->brightnessDeviation = 1.0f - ( (-brightnessDeviation) + ((brightnessDeviation*2) * ((Number)rand()/RAND_MAX)));
|
|
|
|
|
|
|
|
// particle->velVector = concatMatrix.rotateVector(particle->velVector);
|
|
// particle->velVector = concatMatrix.rotateVector(particle->velVector);
|
|
|
|
|
+
|
|
|
|
|
+ if(ignoreParentMatrix) {
|
|
|
|
|
+ particle->particleBody->setPosition(concatMatrix.getPosition());
|
|
|
|
|
+ } else {
|
|
|
|
|
+ particle->particleBody->setPosition(0.0, 0.0, 0.0);
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- particle->particleBody->setPosition(concatMatrix.getPosition());
|
|
|
|
|
-// particle->particleBody->setPosition(0.0, 0.0, 0.0);
|
|
|
|
|
particle->particleBody->Translate(startVector);
|
|
particle->particleBody->Translate(startVector);
|
|
|
particle->particleBody->rebuildTransformMatrix();
|
|
particle->particleBody->rebuildTransformMatrix();
|
|
|
|
|
|
|
@@ -471,7 +493,10 @@ void ParticleEmitter::updateEmitter() {
|
|
|
Particle *particle;
|
|
Particle *particle;
|
|
|
Number normLife;
|
|
Number normLife;
|
|
|
|
|
|
|
|
- Vector3 compoundScale = getParticleCompoundScale();
|
|
|
|
|
|
|
+ Vector3 compoundScale(1.0, 1.0, 1.0);
|
|
|
|
|
+ if(ignoreParentMatrix) {
|
|
|
|
|
+ compoundScale = getParticleCompoundScale();
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
for(int i=0;i < numParticles; i++) {
|
|
for(int i=0;i < numParticles; i++) {
|
|
|
particle = particles[i];
|
|
particle = particles[i];
|