diff options
-rw-r--r-- | bin/Jin.exe | bin | 2147328 -> 2342912 bytes | |||
-rw-r--r-- | src/libjin/Graphics/particles/je_particle.cpp | 14 | ||||
-rw-r--r-- | src/libjin/Graphics/particles/je_particle.h | 42 | ||||
-rw-r--r-- | src/libjin/Graphics/particles/je_particle_emitter.cpp | 29 | ||||
-rw-r--r-- | src/libjin/Graphics/particles/je_particle_emitter.h | 33 | ||||
-rw-r--r-- | src/libjin/Graphics/particles/je_particle_system.h | 24 | ||||
-rw-r--r-- | src/libjin/Math/je_vector2.hpp | 12 |
7 files changed, 109 insertions, 45 deletions
diff --git a/bin/Jin.exe b/bin/Jin.exe Binary files differindex 4ed442b..a0fe1a8 100644 --- a/bin/Jin.exe +++ b/bin/Jin.exe diff --git a/src/libjin/Graphics/particles/je_particle.cpp b/src/libjin/Graphics/particles/je_particle.cpp index 9179093..20bbd03 100644 --- a/src/libjin/Graphics/particles/je_particle.cpp +++ b/src/libjin/Graphics/particles/je_particle.cpp @@ -7,7 +7,19 @@ namespace JinEngine namespace Particles { - + void Particle::reset() + { + lifeTime = 0.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; + alive = true; + } } } diff --git a/src/libjin/Graphics/particles/je_particle.h b/src/libjin/Graphics/particles/je_particle.h index 73803e8..2d112d1 100644 --- a/src/libjin/Graphics/particles/je_particle.h +++ b/src/libjin/Graphics/particles/je_particle.h @@ -32,14 +32,6 @@ namespace JinEngine /// /// /// - struct LinearAccelaration - { - - }; - - /// - /// - /// struct SpeedOverTimeDef { bool enable = false; @@ -79,13 +71,23 @@ namespace JinEngine } size; }; - struct ColorOverTime + struct ColorOverTimeDef { bool enable = false; Color colorStart = Color::WHITE; Color colorEnd = Color::WHITE; }; + struct linearAccelarationDef + { + Math::Vector2<float> linearAccelaration; + }; + + struct RadialAccelarationDef + { + float radialAccelaration; + }; + /// /// /// @@ -96,12 +98,13 @@ namespace JinEngine public: // Basic definitions. - LifeTimeDef lifeTimeDef; ///< + LifeTimeDef lifeTimeDef; ///< + linearAccelarationDef linearAccelarationDef; ///< + RadialAccelarationDef radialAccelarationDef; ///< // Optional definitions. - - SpeedOverTimeDef speedOverTimeDef; ///< - SizeOverTimeDef sizeOverTimeDef; ///< - ColorOverTime colorOverTimeDef; ///< + SpeedOverTimeDef speedOverTimeDef; ///< + SizeOverTimeDef sizeOverTimeDef; ///< + ColorOverTimeDef colorOverTimeDef; ///< }; /// @@ -113,12 +116,12 @@ namespace JinEngine /// /// Default constructor. /// - Particle(); + Particle() {}; /// - /// Initialize with given definition. + /// Reset to default. /// - void initialize(const ParticleDef& particleDef); + void reset(); /// /// Whole life time. @@ -133,7 +136,7 @@ namespace JinEngine /// /// Current position. /// - float position[2] = { 0,0 }; + Math::Vector2<float> position; /// /// Emitte direction. @@ -143,7 +146,6 @@ namespace JinEngine Math::Vector2<float> speed; Math::Vector2<float> linearAcceleration; float radialAcceleration = 0; - float tangetialAcceleration = 0; /// /// Size over lifetime. @@ -165,7 +167,7 @@ namespace JinEngine /// /// Is particle still alive? Alive is equivalent to NOT available in particle pool. /// - bool alive = false; + bool alive = true; }; diff --git a/src/libjin/Graphics/particles/je_particle_emitter.cpp b/src/libjin/Graphics/particles/je_particle_emitter.cpp index 36ae16f..ded7b8b 100644 --- a/src/libjin/Graphics/particles/je_particle_emitter.cpp +++ b/src/libjin/Graphics/particles/je_particle_emitter.cpp @@ -1,14 +1,33 @@ -#ifndef __JE_PARTICLE_SYSTEM_H__ -#define __JE_PARTICLE_SYSTEM_H__ +#include "je_particle_emitter.h" namespace JinEngine { namespace Graphics { + namespace Particles + { + ParticleEmitter::ParticleEmitter(ParticleSystem& ps) + : mParticleSystem(ps) + { + } + void ParticleEmitter::update(float dt) + { + mTime += dt; + if (mTime < 1) + return; - } -} -#endif
\ No newline at end of file + mTime -= 1; + } + + void ParticleEmitter::emit(const ParticleEmitterDef& emitterDef, const ParticleDef& def, Particle& particle) + { + particle.reset(); + + } + + } + } +}
\ No newline at end of file diff --git a/src/libjin/Graphics/particles/je_particle_emitter.h b/src/libjin/Graphics/particles/je_particle_emitter.h index 5ffbdf2..34d0ee4 100644 --- a/src/libjin/Graphics/particles/je_particle_emitter.h +++ b/src/libjin/Graphics/particles/je_particle_emitter.h @@ -41,6 +41,9 @@ namespace JinEngine } direction; }; + /// + /// How many particles emitted per second. + /// struct EmitRateDef { bool enableRandom = false; @@ -65,6 +68,8 @@ namespace JinEngine EmitRateDef emitRateDef; ///< Emit rate. }; + class ParticleSystem; + /// /// Emit a single particle. /// @@ -72,23 +77,31 @@ namespace JinEngine { public: /// - /// ParticleEmitter constructor. - /// - /// @param emitterDef Definition of particle emitter. - /// @param particleDef Definition of particle. /// - ParticleEmitter(const ParticleEmitterDef& emitterDef, const ParticleDef& particleDef); + /// + ParticleEmitter(ParticleSystem& ps); + + /// + /// + /// + void update(float dt); + + private: + /// + /// + /// + ParticleSystem& mParticleSystem; /// /// Emit a particle according to emitter definition and particle definition, particle system should /// assign particle value to the particle in particle pool, but not use this return particle. /// - Particle emit(); + void emit(const ParticleEmitterDef& emitterDef, const ParticleDef& def, Particle& particle); - private: - float mDirection; - ParticleEmitterDef mEmitterDef; - ParticleDef mParticleDef; + /// + /// + /// + float mTime; }; diff --git a/src/libjin/Graphics/particles/je_particle_system.h b/src/libjin/Graphics/particles/je_particle_system.h index fa050f7..76d86fa 100644 --- a/src/libjin/Graphics/particles/je_particle_system.h +++ b/src/libjin/Graphics/particles/je_particle_system.h @@ -49,7 +49,12 @@ namespace JinEngine ~ParticleSystem(); /// - /// Render particle system's all particles. + /// Update particle system and all alive particles. + /// + void update(float sec); + + /// + /// Render particle system it self. /// void render(int x, int y, float sx = 1, float sy = 1, float r = 0, float ax = 0, float ay = 0); @@ -60,19 +65,16 @@ namespace JinEngine /// void setSprite(Sprite* sprite); - /// - /// Release particle and make it available in particle pool. - /// - void releaseParticle() - { - Particle*p = mParticlePool.New(); - } - private: // Disable default constructor. ParticleSystem(); /// + /// Particle system definition. + /// + ParticleSystemDef mDef; + + /// /// Sprite to be drawn. /// Sprite* mSprite; @@ -81,6 +83,10 @@ namespace JinEngine /// Particle emitter. /// ParticleEmitter mEmitter; + + /// + /// Particle pool. + /// ParticlePool mParticlePool; /// diff --git a/src/libjin/Math/je_vector2.hpp b/src/libjin/Math/je_vector2.hpp index c55ae03..e9599e1 100644 --- a/src/libjin/Math/je_vector2.hpp +++ b/src/libjin/Math/je_vector2.hpp @@ -25,6 +25,18 @@ namespace JinEngine data[1] = v.data[1]; } + void operator = (const Vector2<T>& v) + { + data[0] = v.data[0]; + data[1] = v.data[1]; + } + + void set(T _x, T _y) + { + data[0] = _x; + data[1] = _y; + } + T &x = data[0], &y = data[1]; // xy T &w = data[0], &h = data[1]; // wh T &colum = data[0], &row = data[1]; // colum row |