aboutsummaryrefslogtreecommitdiff
path: root/src/libjin/graphics/particles
diff options
context:
space:
mode:
Diffstat (limited to 'src/libjin/graphics/particles')
-rw-r--r--src/libjin/graphics/particles/je_particle.cpp15
-rw-r--r--src/libjin/graphics/particles/je_particle.h6
-rw-r--r--src/libjin/graphics/particles/je_particle_emitter.cpp2
-rw-r--r--src/libjin/graphics/particles/je_particle_system.cpp17
-rw-r--r--src/libjin/graphics/particles/je_particle_system.h28
5 files changed, 50 insertions, 18 deletions
diff --git a/src/libjin/graphics/particles/je_particle.cpp b/src/libjin/graphics/particles/je_particle.cpp
index 20e4b9e..1fa8bc2 100644
--- a/src/libjin/graphics/particles/je_particle.cpp
+++ b/src/libjin/graphics/particles/je_particle.cpp
@@ -1,5 +1,7 @@
#include "../../math/je_math.h"
+#include "../je_sprite.h"
+
#include "je_particle.h"
using namespace JinEngine::Math;
@@ -11,8 +13,8 @@ namespace JinEngine
namespace Particles
{
- Particle::Particle(const Graphic* grc)
- : graphic(grc)
+ Particle::Particle(const Sprite* spr)
+ : sprite(spr)
{
reset();
}
@@ -62,8 +64,13 @@ namespace JinEngine
{
Color c = gl.getColor();
gl.setColor(color);
- if (graphic != nullptr)
- graphic->render(transform);
+ if (sprite != nullptr)
+ {
+ Vector2<float>& position = transform.getPosition();
+ Vector2<float>& scale = transform.getScale();
+ float r = transform.getRotation();
+ sprite->render(position.x, position.y, scale.x, scale.y, r);
+ }
gl.getColor();
}
diff --git a/src/libjin/graphics/particles/je_particle.h b/src/libjin/graphics/particles/je_particle.h
index 6da05ac..c03f4ca 100644
--- a/src/libjin/graphics/particles/je_particle.h
+++ b/src/libjin/graphics/particles/je_particle.h
@@ -4,7 +4,7 @@
#include "../../math/je_transform.h"
#include "../../math/je_vector2.hpp"
#include "../je_color.h"
-#include "../je_graphic.h"
+#include "../je_sprite.h"
namespace JinEngine
{
@@ -95,7 +95,7 @@ namespace JinEngine
///
/// Default constructor.
///
- Particle(const Graphic* graphic);
+ Particle(const Sprite* sprite);
///
/// Reset to default.
@@ -124,7 +124,7 @@ namespace JinEngine
///
float life = 0.0f;
- const Graphic* graphic;
+ const Sprite* sprite;
///
/// Color over lifetime.
diff --git a/src/libjin/graphics/particles/je_particle_emitter.cpp b/src/libjin/graphics/particles/je_particle_emitter.cpp
index 35d654e..de5ef5d 100644
--- a/src/libjin/graphics/particles/je_particle_emitter.cpp
+++ b/src/libjin/graphics/particles/je_particle_emitter.cpp
@@ -54,6 +54,8 @@ namespace JinEngine
{
float x = rng.randf(mDef.positionDef.position.random.floor.x, mDef.positionDef.position.random.ceil.x, ACCURACY_4);
float y = rng.randf(mDef.positionDef.position.random.floor.y, mDef.positionDef.position.random.ceil.y, ACCURACY_4);
+ x += mPS.mPosition.x;
+ y += mPS.mPosition.y;
p->transform.setPosition(x, y);
}
else
diff --git a/src/libjin/graphics/particles/je_particle_system.cpp b/src/libjin/graphics/particles/je_particle_system.cpp
index 942da99..dcb84dd 100644
--- a/src/libjin/graphics/particles/je_particle_system.cpp
+++ b/src/libjin/graphics/particles/je_particle_system.cpp
@@ -18,6 +18,12 @@ namespace JinEngine
{
}
+ void ParticleSystem::setPosition(float x, float y)
+ {
+ mPosition.x = x;
+ mPosition.y = y;
+ }
+
void ParticleSystem::update(float dt)
{
mEmitter.update(dt);
@@ -36,23 +42,20 @@ namespace JinEngine
}
}
- void ParticleSystem::render(float x, float y, float sx /* = 1 */, float sy /* = 1 */, float r /* = 0 */, float ax /* = 0 */, float ay /* = 0 */)
+ void ParticleSystem::render()
{
- gl.push();
- gl.translate(x, y);
for (Particle* p : mAliveParticles)
p->render();
- gl.pop();
}
- void ParticleSystem::setGraphic(const Graphic* graphic)
+ void ParticleSystem::setSprite(const Sprite* sprite)
{
- mGraphic = graphic;
+ mSprite = sprite;
}
Particle* ParticleSystem::claim()
{
- Particle* p = new (mParticlePool.GetNextWithoutInitializing()) Particle(mGraphic);
+ Particle* p = new (mParticlePool.GetNextWithoutInitializing()) Particle(mSprite);
mAliveParticles.push_back(p);
return p;
}
diff --git a/src/libjin/graphics/particles/je_particle_system.h b/src/libjin/graphics/particles/je_particle_system.h
index 8ee79ec..fb4b8c7 100644
--- a/src/libjin/graphics/particles/je_particle_system.h
+++ b/src/libjin/graphics/particles/je_particle_system.h
@@ -33,7 +33,7 @@ namespace JinEngine
///
/// Particle emitter, handle all particles it emitts.
///
- class ParticleSystem/* : public Game::GameObject*/
+ class ParticleSystem
{
public:
///
@@ -56,14 +56,29 @@ namespace JinEngine
///
/// Render particle system.
///
- void render(float x, float y, float sx = 1, float sy = 1, float r = 0, float ax = 0, float ay = 0);
+ void render();
///
/// Set sprite to render.
///
/// @param sprite Sprite to render.
///
- void setGraphic(const Graphic* graphic);
+ void setSprite(const Sprite* sprite);
+
+ ///
+ /// Set particle system position.
+ ///
+ void setPosition(float x, float y);
+
+ ///
+ /// Pause particle spawn.
+ ///
+ void pause(bool isPause);
+
+ ///
+ /// Clear all particles.
+ ///
+ void clear();
private:
@@ -72,6 +87,11 @@ namespace JinEngine
ParticleSystem();
///
+ /// Particle system position.
+ ///
+ Math::Vector2<float> mPosition;
+
+ ///
///
///
Particle* claim();
@@ -89,7 +109,7 @@ namespace JinEngine
///
/// Sprite to be drawn.
///
- const Graphic* mGraphic;
+ const Sprite* mSprite;
///
/// Particle emitter.