From f0f340dec7821cee103ab9267ef941a917ef4dc4 Mon Sep 17 00:00:00 2001 From: chai Date: Sun, 18 Nov 2018 23:31:17 +0800 Subject: =?UTF-8?q?*=E7=9B=AE=E5=BD=95=E6=94=B9=E4=B8=BA=E5=B0=8F=E5=86=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/libjin/graphics/particles/je_particle.cpp | 72 +++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 src/libjin/graphics/particles/je_particle.cpp (limited to 'src/libjin/graphics/particles/je_particle.cpp') diff --git a/src/libjin/graphics/particles/je_particle.cpp b/src/libjin/graphics/particles/je_particle.cpp new file mode 100644 index 0000000..53f4570 --- /dev/null +++ b/src/libjin/graphics/particles/je_particle.cpp @@ -0,0 +1,72 @@ +#include "../../math/je_math.h" + +#include "je_particle.h" + +using namespace JinEngine::Math; + +namespace JinEngine +{ + namespace Graphics + { + namespace Particles + { + + Particle::Particle(const Graphic* grc) + : graphic(grc) + { + reset(); + } + + void Particle::reset() + { + transform.set(0, 0, 1, 1, 0, 0, 0); + lifeTime = 1.0f; + life = 0.0f; + speed.set(0, 0); + linearAcceleration.set(0, 0); + radialAcceleration = 0.0f; + 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(colorStart.r, colorEnd.r, t); + color.g = lerp(colorStart.g, colorEnd.g, t); + color.b = lerp(colorStart.b, colorEnd.b, t); + color.a = lerp(colorStart.a, colorEnd.a, t); + // Lerp scale. + Vector2 scale = transform.getScale(); + scale.x = lerp(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 -- cgit v1.1-26-g67d0