aboutsummaryrefslogtreecommitdiff
path: root/src/libjin/Graphics/particle
diff options
context:
space:
mode:
Diffstat (limited to 'src/libjin/Graphics/particle')
-rw-r--r--src/libjin/Graphics/particle/je_particle.h71
-rw-r--r--src/libjin/Graphics/particle/je_particle_emitter.h64
-rw-r--r--src/libjin/Graphics/particle/je_particle_system.h7
3 files changed, 131 insertions, 11 deletions
diff --git a/src/libjin/Graphics/particle/je_particle.h b/src/libjin/Graphics/particle/je_particle.h
index 474e15b..cb176bb 100644
--- a/src/libjin/Graphics/particle/je_particle.h
+++ b/src/libjin/Graphics/particle/je_particle.h
@@ -10,6 +10,77 @@ namespace JinEngine
class ParticleSystem;
+ struct LifeTimeDef
+ {
+ bool enableRandom = false;
+ union
+ {
+ struct
+ {
+ float min, max;
+ } random;
+ float life;
+ } life;
+ };
+
+ struct SpeedOverTimeDef
+ {
+ bool enable = false;
+ bool enableRandom = false;
+ union
+ {
+ struct
+ {
+ Math::Vector2<float> startFloor;
+ Math::Vector2<float> startCeil;
+ Math::Vector2<float> endFloor;
+ Math::Vector2<float> endCeil;
+ } random;
+ struct
+ {
+ Math::Vector2<float> start;
+ Math::Vector2<float> end;
+ } speed;
+ } speed;
+ };
+
+ struct SizeOverTimeDef
+ {
+ bool enable = false;
+ bool enableRandom = false;
+ union {
+ struct {
+ float startFloor = 1;
+ float startCeil = 1;
+ float endFloor = 1;
+ float endCeil = 1;
+ } random;
+ struct {
+ float start = 1;
+ float end = 1;
+ } size;
+ } size;
+ };
+
+ struct ColorOverTime
+ {
+ bool enable = false;
+ Color colorStart = Color::WHITE;
+ Color colorEnd = Color::WHITE;
+ };
+
+ ///
+ ///
+ ///
+ struct ParticleDef
+ {
+ LifeTimeDef lifeTimeDef; ///<
+ // Optional definitions.
+ SpeedOverTimeDef speedOverTimeDef; ///<
+ SizeOverTimeDef sizeOverTimeDef; ///<
+ ColorOverTime colorOverTimeDef; ///<
+ };
+
///
/// A single particle contains various properties of particle, such as position, accelaration, color and
/// other attributes changed over time.
diff --git a/src/libjin/Graphics/particle/je_particle_emitter.h b/src/libjin/Graphics/particle/je_particle_emitter.h
index 95b7875..e700f16 100644
--- a/src/libjin/Graphics/particle/je_particle_emitter.h
+++ b/src/libjin/Graphics/particle/je_particle_emitter.h
@@ -11,29 +11,75 @@ namespace JinEngine
namespace Graphics
{
+ struct PositionDef
+ {
+ bool enableRandom = false;
+ union
+ {
+ struct
+ {
+ Math::Vector2<float> min;
+ Math::Vector2<float> max;
+ } random;
+ Math::Vector2<float> position;
+ } position;
+ };
+
+ struct DirectionDef
+ {
+ bool enableRandom = false;
+ union
+ {
+ struct
+ {
+ float min = 0;
+ float max = 0;
+ } random;
+ float direction = 0;
+ } direction;
+ };
+
+ struct EmitRateDef
+ {
+ bool enableRandom = false;
+ union
+ {
+ struct
+ {
+ float min = 1;
+ float max = 1;
+ } random;
+ float rate = 1;
+ } rate;
+ };
+
///
/// Definition of particle emitter.
///
struct ParticleEmitterDef : public Temporary
{
- Math::Vector2<float> position;
-
+ PositionDef positionDef; ///< Emit position(relativily to the particle system center).
+ DirectionDef directionDef; ///< Emit direction.
+ EmitRateDef emitRateDef; ///< Emit rate.
+ ///
+ /// Particle definition.
+ ///
+ ParticleDef particleDef; ///< Particle definition.
};
+ ///
+ /// Emit a single particle.
+ ///
class ParticleEmitter
{
public:
ParticleEmitter(const ParticleEmitterDef& def);
///
- /// Create new particle.
- ///
- Particle* emit();
-
- ///
- /// Emitter position.
+ /// Emit a particle, particle system should assign particle value to the particle in particle pool,
+ /// but not use this return particle.
///
- Math::Vector2<float> mPosition;
+ Particle emit();
///
///
diff --git a/src/libjin/Graphics/particle/je_particle_system.h b/src/libjin/Graphics/particle/je_particle_system.h
index c5db938..9ccb8df 100644
--- a/src/libjin/Graphics/particle/je_particle_system.h
+++ b/src/libjin/Graphics/particle/je_particle_system.h
@@ -4,6 +4,7 @@
#include <vector>
#include "../../common/je_temporary.h"
+#include "../../game/je_game_object.h"
#include "../je_sprite.h"
@@ -21,14 +22,16 @@ namespace JinEngine
///
struct ParticleSystemDef : public Temporary
{
- uint maxParticleCount = 1; ///< Max count of particles. 1 by default.
+ uint maxParticleCount = 1; ///< Max count of particles in pool. 1 by default.
+
+ ParticleEmitter emitterDef;
};
///
/// Particle emitter, handle all particles it emitts.
///
- class ParticleSystem
+ class ParticleSystem : public Game::GameObject
{
public:
///