diff options
Diffstat (limited to 'src/libjin/graphics/particles/je_particle_emitter.cpp')
-rw-r--r-- | src/libjin/graphics/particles/je_particle_emitter.cpp | 35 |
1 files changed, 21 insertions, 14 deletions
diff --git a/src/libjin/graphics/particles/je_particle_emitter.cpp b/src/libjin/graphics/particles/je_particle_emitter.cpp index de5ef5d..533bbf4 100644 --- a/src/libjin/graphics/particles/je_particle_emitter.cpp +++ b/src/libjin/graphics/particles/je_particle_emitter.cpp @@ -49,6 +49,7 @@ namespace JinEngine if (p == nullptr) return; p->reset(); + p->def = &mPDef; // Init position. if (mDef.positionDef.enableRandom) { @@ -66,19 +67,22 @@ namespace JinEngine r = rng.randf(mDef.directionDef.direction.random.floor, mDef.directionDef.direction.random.ceil, ACCURACY_4); else r = mDef.directionDef.direction.direction; - float f = 0; + float f = 0; if (mDef.forceDef.enableRandom) f = rng.randf(mDef.forceDef.force.random.floor, mDef.forceDef.force.random.ceil, ACCURACY_4); else f = mDef.forceDef.force.force; - p->speed.set(f*cos(r), f*sin(r)); + p->velocity.set(f*cos(r), f*sin(r)); + if (f != 0) p->updateFlags |= Particle::UPDATE_POSITION; // Init life time. if (mPDef.lifeTimeDef.enableRandom) - p->lifeTime = rng.randf(mPDef.lifeTimeDef.life.random.floor, mPDef.lifeTimeDef.life.random.floor, ACCURACY_4); + p->lifeTime = rng.randf(mPDef.lifeTimeDef.life.random.floor, mPDef.lifeTimeDef.life.random.ceil, ACCURACY_4); else p->lifeTime = mPDef.lifeTimeDef.life.life; // Init linear accelaration. p->linearAcceleration = mPDef.linearAccelarationDef.linearAccelaration; + if(!p->linearAcceleration.isZero()) + p->updateFlags |= (Particle::UPDATE_VELOCITY | Particle::UPDATE_POSITION); // Init angular accelaration. p->radialAcceleration = mPDef.radialAccelarationDef.radialAccelaration; // Init Angular speed. @@ -86,18 +90,21 @@ namespace JinEngine p->angularSpeed = rng.randf(mPDef.angularSpeedDef.angularSpeed.random.floor, mPDef.angularSpeedDef.angularSpeed.random.ceil, ACCURACY_4); else p->angularSpeed = mPDef.angularSpeedDef.angularSpeed.angularSpeed; + if (p->angularSpeed != 0) + p->updateFlags |= Particle::UPDATE_ROTATION; // Scale over time. - if (mPDef.sizeOverTimeDef.enable) - { - p->scaleBegin = mPDef.sizeOverTimeDef.start; - p->scaleEnd = mPDef.sizeOverTimeDef.end; - } - // Color over time. - if (mPDef.colorOverTimeDef.enable) - { - p->colorStart = mPDef.colorOverTimeDef.colorStart; - p->colorEnd = mPDef.colorOverTimeDef.colorEnd; - } + if (mPDef.scaleDef.overTime.enable) + p->updateFlags |= Particle::UPDATE_SCALE; + else + p->transform.setScale(mPDef.scaleDef.scale, mPDef.scaleDef.scale); + // Color over time. + if (mPDef.colorDef.overTime.enable) + p->updateFlags |= Particle::UPDATE_COLOR; + else + p->color = mPDef.colorDef.color; + // Sprite + if (mPDef.spritesDef.mode != SpriteMode::SINGLE) + p->updateFlags |= Particle::UPDATE_SPRITE; } } |