diff options
-rw-r--r-- | examples/particle_system/main.cpp | 33 | ||||
-rw-r--r-- | src/libjin/game/je_application.cpp | 2 | ||||
-rw-r--r-- | src/libjin/graphics/particles/je_particle.cpp | 2 | ||||
-rw-r--r-- | src/libjin/graphics/particles/je_particle_emitter.cpp | 12 | ||||
-rw-r--r-- | src/libjin/graphics/particles/je_particle_system.cpp | 3 | ||||
-rw-r--r-- | src/libjin/input/je_mouse.h | 2 | ||||
-rw-r--r-- | src/libjin/math/je_math.h | 18 | ||||
-rw-r--r-- | src/libjin/math/je_random.cpp | 6 |
8 files changed, 46 insertions, 32 deletions
diff --git a/examples/particle_system/main.cpp b/examples/particle_system/main.cpp index 0d2b0f4..f4b047c 100644 --- a/examples/particle_system/main.cpp +++ b/examples/particle_system/main.cpp @@ -33,34 +33,37 @@ Color frag(Color col, Texture tex, Vertex v) } #END_FRAGMENT_SHADER )"; +const float Pi = 3.14f; void onLoad() { - tex = Texture::createTexture("smoke.png"); + tex = Texture::createTexture("texture.png"); shader = Shader::createShader(shader_code); ParticleSystemDef def; def.maxParticleCount = 30; - def.emitterDef.emitRateDef.rate.rate = 0.5f; + def.emitterDef.emitRateDef.rate.rate = 0.03f; def.emitterDef.forceDef.force.force = 20.f; - def.emitterDef.positionDef.position.position = Vector2<float>(200, 200); + def.emitterDef.positionDef.enableRandom = true; + def.emitterDef.positionDef.position.random.floor = Vector2<float>(0, 0); + def.emitterDef.positionDef.position.random.ceil = Vector2<float>(0, 0); def.emitterDef.directionDef.enableRandom = true; - def.emitterDef.directionDef.direction.random.floor = 0; - def.emitterDef.directionDef.direction.random.ceil = 3.14 * 2; + def.emitterDef.directionDef.direction.random.floor = -Pi /6 - Pi /2; + def.emitterDef.directionDef.direction.random.ceil = Pi /6 - Pi / 2; def.particleDef.colorOverTimeDef.enable = true; - def.particleDef.colorOverTimeDef.colorStart = Color(255, 255, 255, 255); - def.particleDef.colorOverTimeDef.colorEnd = Color(255, 255, 255, 0); - + def.particleDef.colorOverTimeDef.colorStart = Color(255, 255, 0, 255); + def.particleDef.colorOverTimeDef.colorEnd = Color(255, 0, 0, 0); +/* def.particleDef.angularSpeedDef.enableRandom = true; - def.particleDef.angularSpeedDef.angularSpeed.random.floor = 0.05; + def.particleDef.angularSpeedDef.angularSpeed.random.floor = -1; def.particleDef.angularSpeedDef.angularSpeed.random.ceil = 1; - +*/ def.particleDef.sizeOverTimeDef.enable = true; def.particleDef.sizeOverTimeDef.start = 1; - def.particleDef.sizeOverTimeDef.end = 3; + def.particleDef.sizeOverTimeDef.end = 0.1; - def.particleDef.lifeTimeDef.life.life = 5; + def.particleDef.lifeTimeDef.life.life = 4; p = new ParticleSystem(def); p->setGraphic(tex); } @@ -81,8 +84,10 @@ void onUpdate(int ms) void onDraw() { shader->use(); - p->render(50, 50); - //tex->render(10, 10); + Mouse* m = Mouse::get(); + int x, y; + m->getState(&x, &y); + p->render(x, y); shader->unuse(); } diff --git a/src/libjin/game/je_application.cpp b/src/libjin/game/je_application.cpp index 723a809..9460738 100644 --- a/src/libjin/game/je_application.cpp +++ b/src/libjin/game/je_application.cpp @@ -54,7 +54,7 @@ namespace JinEngine if (_onDraw != nullptr) _onDraw(); wnd->swapBuffers(); - sleep(1); + sleep(16); } quitloop:; } diff --git a/src/libjin/graphics/particles/je_particle.cpp b/src/libjin/graphics/particles/je_particle.cpp index 53f4570..20e4b9e 100644 --- a/src/libjin/graphics/particles/je_particle.cpp +++ b/src/libjin/graphics/particles/je_particle.cpp @@ -37,7 +37,7 @@ namespace JinEngine void Particle::update(float dt) { float t = life / lifeTime; - // Lerp color + // Lerp color. color.r = lerp<int>(colorStart.r, colorEnd.r, t); color.g = lerp<int>(colorStart.g, colorEnd.g, t); color.b = lerp<int>(colorStart.b, colorEnd.b, t); diff --git a/src/libjin/graphics/particles/je_particle_emitter.cpp b/src/libjin/graphics/particles/je_particle_emitter.cpp index d8fb78d..35d654e 100644 --- a/src/libjin/graphics/particles/je_particle_emitter.cpp +++ b/src/libjin/graphics/particles/je_particle_emitter.cpp @@ -57,9 +57,7 @@ namespace JinEngine p->transform.setPosition(x, y); } else - { p->transform.setPosition(mDef.positionDef.position.position); - } // Init speed. float r = 0; if (mDef.directionDef.enableRandom) @@ -72,27 +70,27 @@ namespace JinEngine else f = mDef.forceDef.force.force; p->speed.set(f*cos(r), f*sin(r)); - // Init life time + // Init life time. if (mPDef.lifeTimeDef.enableRandom) p->lifeTime = rng.randf(mPDef.lifeTimeDef.life.random.floor, mPDef.lifeTimeDef.life.random.floor, ACCURACY_4); else p->lifeTime = mPDef.lifeTimeDef.life.life; - // Init linear accelaration + // Init linear accelaration. p->linearAcceleration = mPDef.linearAccelarationDef.linearAccelaration; - // Init angular accelaration + // Init angular accelaration. p->radialAcceleration = mPDef.radialAccelarationDef.radialAccelaration; // Init Angular speed. if (mPDef.angularSpeedDef.enableRandom) p->angularSpeed = rng.randf(mPDef.angularSpeedDef.angularSpeed.random.floor, mPDef.angularSpeedDef.angularSpeed.random.ceil, ACCURACY_4); else p->angularSpeed = mPDef.angularSpeedDef.angularSpeed.angularSpeed; - // Scale over time + // Scale over time. if (mPDef.sizeOverTimeDef.enable) { p->scaleBegin = mPDef.sizeOverTimeDef.start; p->scaleEnd = mPDef.sizeOverTimeDef.end; } - // Color over time + // Color over time. if (mPDef.colorOverTimeDef.enable) { p->colorStart = mPDef.colorOverTimeDef.colorStart; diff --git a/src/libjin/graphics/particles/je_particle_system.cpp b/src/libjin/graphics/particles/je_particle_system.cpp index a81a3c9..942da99 100644 --- a/src/libjin/graphics/particles/je_particle_system.cpp +++ b/src/libjin/graphics/particles/je_particle_system.cpp @@ -38,8 +38,11 @@ namespace JinEngine void ParticleSystem::render(float x, float y, float sx /* = 1 */, float sy /* = 1 */, float r /* = 0 */, float ax /* = 0 */, float ay /* = 0 */) { + gl.push(); + gl.translate(x, y); for (Particle* p : mAliveParticles) p->render(); + gl.pop(); } void ParticleSystem::setGraphic(const Graphic* graphic) diff --git a/src/libjin/input/je_mouse.h b/src/libjin/input/je_mouse.h index 3c4ad9b..a4e71fc 100644 --- a/src/libjin/input/je_mouse.h +++ b/src/libjin/input/je_mouse.h @@ -46,4 +46,4 @@ namespace JinEngine #endif // defined(jin_input) -#endif // __JE_MOUSE_H__ +#endif // __JE_MOUSE_H__
\ No newline at end of file diff --git a/src/libjin/math/je_math.h b/src/libjin/math/je_math.h index de57e36..ae4017f 100644 --- a/src/libjin/math/je_math.h +++ b/src/libjin/math/je_math.h @@ -48,12 +48,6 @@ namespace JinEngine } template<typename T> - inline T abs(T a) - { - return a > 0 ? a : -a; - } - - template<typename T> inline T lowerBound(T a, T lower) { return a < lower ? lower : a; @@ -77,6 +71,18 @@ namespace JinEngine return a + f * (b - a); } + template<typename T> + inline T abs(T a) + { + return a > 0 ? a : -a; + } + + template<typename T> + inline T reverse(T a) + { + return -a; + } + } // namespace Math } // namespace JinEngine diff --git a/src/libjin/math/je_random.cpp b/src/libjin/math/je_random.cpp index 216fd79..b9313d2 100644 --- a/src/libjin/math/je_random.cpp +++ b/src/libjin/math/je_random.cpp @@ -1,4 +1,5 @@ #include <math.h> +#include "je_math.h" #include "je_random.h" namespace JinEngine @@ -43,9 +44,10 @@ namespace JinEngine float RandomGenerator::randf(float min, float max, int ac) { + float floor = 0, ceil = max + reverse<float>(min); uint32 a = pow(10.f, ac); - uint32 n = rand(min*a, max*a); - return (float)n / a; + uint32 n = rand(floor*a, ceil*a); + return (float)n / a + min; } } |