aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/libjin/Graphics/particles/je_particle.cpp14
-rw-r--r--src/libjin/Graphics/particles/je_particle.h42
-rw-r--r--src/libjin/Graphics/particles/je_particle_emitter.cpp29
-rw-r--r--src/libjin/Graphics/particles/je_particle_emitter.h33
-rw-r--r--src/libjin/Graphics/particles/je_particle_system.h24
-rw-r--r--src/libjin/Math/je_vector2.hpp12
6 files changed, 109 insertions, 45 deletions
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