aboutsummaryrefslogtreecommitdiff
path: root/src/libjin/graphics/particles/je_particle_emitter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libjin/graphics/particles/je_particle_emitter.cpp')
-rw-r--r--src/libjin/graphics/particles/je_particle_emitter.cpp35
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;
}
}