diff options
Diffstat (limited to 'src/libjin/graphics/particles')
-rw-r--r-- | src/libjin/graphics/particles/je_particle.cpp | 15 | ||||
-rw-r--r-- | src/libjin/graphics/particles/je_particle.h | 6 | ||||
-rw-r--r-- | src/libjin/graphics/particles/je_particle_emitter.cpp | 2 | ||||
-rw-r--r-- | src/libjin/graphics/particles/je_particle_system.cpp | 17 | ||||
-rw-r--r-- | src/libjin/graphics/particles/je_particle_system.h | 28 |
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. |