From 42421575d2e17b5c57ff0034c037b651bd6d1119 Mon Sep 17 00:00:00 2001 From: chai Date: Sun, 25 Nov 2018 00:10:10 +0800 Subject: =?UTF-8?q?*=E7=B2=92=E5=AD=90=E7=B3=BB=E7=BB=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../graphics/particles/je_particle_emitter.cpp | 35 +++++++++++++--------- 1 file changed, 21 insertions(+), 14 deletions(-) (limited to 'src/libjin/graphics/particles/je_particle_emitter.cpp') 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; } } -- cgit v1.1-26-g67d0