aboutsummaryrefslogtreecommitdiff
path: root/src/libjin/Graphics/particles/je_particle.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libjin/Graphics/particles/je_particle.cpp')
-rw-r--r--src/libjin/Graphics/particles/je_particle.cpp56
1 files changed, 51 insertions, 5 deletions
diff --git a/src/libjin/Graphics/particles/je_particle.cpp b/src/libjin/Graphics/particles/je_particle.cpp
index 20bbd03..53f4570 100644
--- a/src/libjin/Graphics/particles/je_particle.cpp
+++ b/src/libjin/Graphics/particles/je_particle.cpp
@@ -1,5 +1,9 @@
+#include "../../math/je_math.h"
+
#include "je_particle.h"
+using namespace JinEngine::Math;
+
namespace JinEngine
{
namespace Graphics
@@ -7,20 +11,62 @@ namespace JinEngine
namespace Particles
{
+ Particle::Particle(const Graphic* grc)
+ : graphic(grc)
+ {
+ reset();
+ }
+
void Particle::reset()
{
- lifeTime = 0.0f;
+ transform.set(0, 0, 1, 1, 0, 0, 0);
+ lifeTime = 1.0f;
life = 0.0f;
- position.set(0, 0);
- direction = 0.0f;
speed.set(0, 0);
linearAcceleration.set(0, 0);
radialAcceleration = 0.0f;
- size = 1;
- sizeBegin = 1;
+ angularSpeed = 0;
+ scaleBegin = 1;
+ scaleEnd = 1;
+ color = Color::WHITE;
+ colorStart = Color::WHITE;
+ colorEnd = Color::WHITE;
alive = true;
}
+ void Particle::update(float dt)
+ {
+ float t = life / lifeTime;
+ // 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);
+ color.a = lerp<int>(colorStart.a, colorEnd.a, t);
+ // Lerp scale.
+ Vector2<float> scale = transform.getScale();
+ scale.x = lerp<float>(scaleBegin, scaleEnd, t);
+ scale.y = scale.x;
+ transform.setScale(scale.x, scale.y);
+ // Calculate position.
+ speed += linearAcceleration * dt;
+ transform.move(speed * dt);
+ // Calculate rotation.
+ angularSpeed += radialAcceleration * dt;
+ transform.rotate(angularSpeed * dt);
+ // Update life time.
+ life += dt;
+ alive = life < lifeTime;
+ }
+
+ void Particle::render()
+ {
+ Color c = gl.getColor();
+ gl.setColor(color);
+ if (graphic != nullptr)
+ graphic->render(transform);
+ gl.getColor();
+ }
+
}
}
} \ No newline at end of file