diff options
Diffstat (limited to 'src/libjin/Graphics/particles/je_particle.cpp')
-rw-r--r-- | src/libjin/Graphics/particles/je_particle.cpp | 56 |
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 |