aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--examples/particle_system/main.cpp33
-rw-r--r--src/libjin/game/je_application.cpp2
-rw-r--r--src/libjin/graphics/particles/je_particle.cpp2
-rw-r--r--src/libjin/graphics/particles/je_particle_emitter.cpp12
-rw-r--r--src/libjin/graphics/particles/je_particle_system.cpp3
-rw-r--r--src/libjin/input/je_mouse.h2
-rw-r--r--src/libjin/math/je_math.h18
-rw-r--r--src/libjin/math/je_random.cpp6
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;
}
}