diff options
Diffstat (limited to 'src/libjin/Graphics/particle')
-rw-r--r-- | src/libjin/Graphics/particle/je_particle.h | 71 | ||||
-rw-r--r-- | src/libjin/Graphics/particle/je_particle_emitter.h | 64 | ||||
-rw-r--r-- | src/libjin/Graphics/particle/je_particle_system.h | 7 |
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: /// |