From 5bd4477d4cf413e90a6b9ef5c8991798a687a0ec Mon Sep 17 00:00:00 2001 From: chai Date: Tue, 20 Nov 2018 08:35:18 +0800 Subject: =?UTF-8?q?*=E6=9B=B4=E6=96=B0sprite?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/libjin/graphics/particles/je_particle.cpp | 15 ++++++++---- src/libjin/graphics/particles/je_particle.h | 6 ++--- .../graphics/particles/je_particle_emitter.cpp | 2 ++ .../graphics/particles/je_particle_system.cpp | 17 +++++++------ src/libjin/graphics/particles/je_particle_system.h | 28 ++++++++++++++++++---- 5 files changed, 50 insertions(+), 18 deletions(-) (limited to 'src/libjin/graphics/particles') 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& position = transform.getPosition(); + Vector2& 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: @@ -71,6 +86,11 @@ namespace JinEngine ParticleSystem(); + /// + /// Particle system position. + /// + Math::Vector2 mPosition; + /// /// /// @@ -89,7 +109,7 @@ namespace JinEngine /// /// Sprite to be drawn. /// - const Graphic* mGraphic; + const Sprite* mSprite; /// /// Particle emitter. -- cgit v1.1-26-g67d0