diff options
Diffstat (limited to 'src/libjin/Graphics/particles')
| -rw-r--r-- | src/libjin/Graphics/particles/je_particle.cpp | 72 | ||||
| -rw-r--r-- | src/libjin/Graphics/particles/je_particle.h | 166 | ||||
| -rw-r--r-- | src/libjin/Graphics/particles/je_particle_emitter.cpp | 105 | ||||
| -rw-r--r-- | src/libjin/Graphics/particles/je_particle_emitter.h | 136 | ||||
| -rw-r--r-- | src/libjin/Graphics/particles/je_particle_pool.h | 24 | ||||
| -rw-r--r-- | src/libjin/Graphics/particles/je_particle_system.cpp | 67 | ||||
| -rw-r--r-- | src/libjin/Graphics/particles/je_particle_system.h | 115 | 
7 files changed, 0 insertions, 685 deletions
| diff --git a/src/libjin/Graphics/particles/je_particle.cpp b/src/libjin/Graphics/particles/je_particle.cpp deleted file mode 100644 index 53f4570..0000000 --- a/src/libjin/Graphics/particles/je_particle.cpp +++ /dev/null @@ -1,72 +0,0 @@ -#include "../../math/je_math.h" - -#include "je_particle.h" - -using namespace JinEngine::Math; - -namespace JinEngine -{ -    namespace Graphics -    { -        namespace Particles -        { - -            Particle::Particle(const Graphic* grc) -                : graphic(grc) -            { -                reset(); -            } - -            void Particle::reset() -            { -                transform.set(0, 0, 1, 1, 0, 0, 0); -                lifeTime = 1.0f;  -                life = 0.0f;  -                speed.set(0, 0);  -                linearAcceleration.set(0, 0);  -                radialAcceleration = 0.0f;  -                angularSpeed = 0; -                scaleBegin = 1; -                scaleEnd = 1; -                color = Color::WHITE; -                colorStart = Color::WHITE; -                colorEnd = Color::WHITE; -                alive = true; -            } - -            void Particle::update(float dt) -            { -                float t = life / lifeTime; -                // Lerp color  -                color.r = lerp<int>(colorStart.r, colorEnd.r, t); -                color.g = lerp<int>(colorStart.g, colorEnd.g, t); -                color.b = lerp<int>(colorStart.b, colorEnd.b, t); -                color.a = lerp<int>(colorStart.a, colorEnd.a, t); -                // Lerp scale. -                Vector2<float> scale = transform.getScale(); -                scale.x = lerp<float>(scaleBegin, scaleEnd, t); -                scale.y = scale.x; -                transform.setScale(scale.x, scale.y); -                // Calculate position. -                speed += linearAcceleration * dt; -                transform.move(speed * dt); -                // Calculate rotation. -                angularSpeed += radialAcceleration * dt; -                transform.rotate(angularSpeed * dt); -                // Update life time. -                life += dt; -                alive = life < lifeTime; -            } - -            void Particle::render() -            { -                Color c = gl.getColor(); -                gl.setColor(color); -                if (graphic != nullptr) -                    graphic->render(transform); -                gl.getColor(); -            } - -        } -    } -}
\ No newline at end of file diff --git a/src/libjin/Graphics/particles/je_particle.h b/src/libjin/Graphics/particles/je_particle.h deleted file mode 100644 index 6da05ac..0000000 --- a/src/libjin/Graphics/particles/je_particle.h +++ /dev/null @@ -1,166 +0,0 @@ -#ifndef __JE_PARTICLE_H__ -#define __JE_PARTICLE_H__ - -#include "../../math/je_transform.h" -#include "../../math/je_vector2.hpp" -#include "../je_color.h" -#include "../je_graphic.h" - -namespace JinEngine -{ -    namespace Graphics -    { -        namespace Particles -        { - -            class ParticleEmitter; - -            /// -            /// -            /// -            struct LifeTimeDef -            { -                bool enableRandom = false; -                Struct(life, -                    struct -                    { -                        float floor, ceil; -                    } random; -                    float life = 1.0f; -                ); -            }; - -            struct ScaleOverTimeDef -            { -                bool enable = false; -                float start = 1; -                float end = 1; -            }; - -            struct ColorOverTimeDef -            { -                bool enable = false; -                Color colorStart = Color::WHITE; -                Color colorEnd = Color::WHITE; -            }; - -            struct linearAccelarationDef -            { -                Math::Vector2<float> linearAccelaration; -            }; - -            struct RadialAccelarationDef -            { -                float radialAccelaration = 0.f; -            }; - -            struct AngularSpeedDef -            { -                bool enableRandom = false; -                Struct(angularSpeed, -                    struct -                { -                    float floor = 0; -                    float ceil = 0; -                } random; -                float angularSpeed = 0; -                ); -            }; - -            /// -            /// -            /// -            struct ParticleDef -            { -            private: -                friend class ParticleEmitter; - -            public: -                // Basic definitions. -                LifeTimeDef lifeTimeDef;                     ///<  -                linearAccelarationDef linearAccelarationDef; ///< -                RadialAccelarationDef radialAccelarationDef; ///<  -                AngularSpeedDef angularSpeedDef;             ///< -                // Optional definitions. -                ScaleOverTimeDef sizeOverTimeDef;            ///<  -                ColorOverTimeDef colorOverTimeDef;           ///<  -            }; - -            /// -            /// A single particle contains various properties of particle, such as position, accelaration, color  -            /// and other attributes changed over time. -            /// -            struct Particle -            { -                /// -                /// Default constructor. -                /// -                Particle(const Graphic* graphic); -                 -                /// -                /// Reset to default. -                /// -                void reset(); - -                /// -                /// -                /// -                void update(float dt); - -                /// -                /// -                /// -                void render(); - -                ////////////////////////////////////////////////////////////////////////////////////////////////// - -                /// -                /// Whole life time. -                /// -                float lifeTime = 1.0f; - -                /// -                /// Current life time. -                /// -                float life = 0.0f; - -                const Graphic* graphic; - -                /// -                /// Color over lifetime. -                /// -                Color color = Color::WHITE; -                Color colorStart = Color::WHITE; -                Color colorEnd = Color::WHITE; - -                /// -                /// Position scale rotation origin. -                /// -                Math::Transform transform; - -                /// -                /// Speeds. -                /// -                Math::Vector2<float> speed; -                Math::Vector2<float> linearAcceleration; -                float angularSpeed; -                float radialAcceleration = 0; - -                /// -                /// Size over lifetime. -                /// -                float scaleBegin = 1; -                float scaleEnd = 1; - -                /// -                /// Is particle still alive? Alive is equivalent to NOT available in particle pool. -                /// -                bool alive = true; - -            }; - -        } // namespace Particles -    } // namespace Graphics -} // namespace JinEngine - -#endif
\ No newline at end of file diff --git a/src/libjin/Graphics/particles/je_particle_emitter.cpp b/src/libjin/Graphics/particles/je_particle_emitter.cpp deleted file mode 100644 index d8fb78d..0000000 --- a/src/libjin/Graphics/particles/je_particle_emitter.cpp +++ /dev/null @@ -1,105 +0,0 @@ -#include <time.h> - -#include "../../math/je_random.h" - -#include "je_particle_emitter.h" -#include "je_particle_system.h" - -using namespace JinEngine::Math; - -namespace JinEngine -{ -    namespace Graphics -    { -        namespace Particles -        { - -            static const uint8 ACCURACY_4 = 4; -            static const uint8 ACCURACY_5 = 5; -            static const uint8 ACCURACY_6 = 6; - -            // Particle emitter  -            static RandomGenerator rng(0xEA44944); - -            ParticleEmitter::ParticleEmitter(ParticleSystem& ps) -                : mPS(ps) -                , mDef(ps.mDef.emitterDef) -                , mPDef(ps.mDef.particleDef) -                , mTime(0) -            { -            } - -            void ParticleEmitter::update(float dt) -            { -                mTime += dt;  -                for (;mTime >= mInterval; mTime -= mInterval) -                { -                    emit(); -                    // Random rate. -                    if (mDef.emitRateDef.enableRandom) -                        mInterval = rng.randf(mDef.emitRateDef.rate.random.floor, mDef.emitRateDef.rate.random.ceil, ACCURACY_5); -                    else -                        mInterval = mDef.emitRateDef.rate.rate; -                } -            } - -            void ParticleEmitter::emit() -            { -                Particle* p = mPS.claim(); -                if (p == nullptr) -                    return; -                p->reset(); -                // Init position. -                if (mDef.positionDef.enableRandom) -                { -                    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); -                    p->transform.setPosition(x, y); -                } -                else -                { -                    p->transform.setPosition(mDef.positionDef.position.position); -                } -                // Init speed. -                float r = 0; -                if (mDef.directionDef.enableRandom) -                    r = rng.randf(mDef.directionDef.direction.random.floor, mDef.directionDef.direction.random.ceil, ACCURACY_4); -                else -                    r = mDef.directionDef.direction.direction; -                float f = 0;  -                if (mDef.forceDef.enableRandom) -                    f = rng.randf(mDef.forceDef.force.random.floor, mDef.forceDef.force.random.ceil, ACCURACY_4); -                else -                    f = mDef.forceDef.force.force; -                p->speed.set(f*cos(r), f*sin(r)); -                // Init life time -                if (mPDef.lifeTimeDef.enableRandom) -                    p->lifeTime = rng.randf(mPDef.lifeTimeDef.life.random.floor, mPDef.lifeTimeDef.life.random.floor, ACCURACY_4); -                else -                    p->lifeTime = mPDef.lifeTimeDef.life.life; -                // Init linear accelaration -                p->linearAcceleration = mPDef.linearAccelarationDef.linearAccelaration; -                // Init angular accelaration -                p->radialAcceleration = mPDef.radialAccelarationDef.radialAccelaration; -                // Init Angular speed. -                if (mPDef.angularSpeedDef.enableRandom) -                    p->angularSpeed = rng.randf(mPDef.angularSpeedDef.angularSpeed.random.floor, mPDef.angularSpeedDef.angularSpeed.random.ceil, ACCURACY_4); -                else -                    p->angularSpeed = mPDef.angularSpeedDef.angularSpeed.angularSpeed; -                // Scale over time -                if (mPDef.sizeOverTimeDef.enable) -                { -                    p->scaleBegin = mPDef.sizeOverTimeDef.start; -                    p->scaleEnd = mPDef.sizeOverTimeDef.end; -                } -                // Color over time  -                if (mPDef.colorOverTimeDef.enable) -                { -                    p->colorStart = mPDef.colorOverTimeDef.colorStart; -                    p->colorEnd = mPDef.colorOverTimeDef.colorEnd; -                } -            } - -        } -    } -}
\ 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 deleted file mode 100644 index 44bd1fb..0000000 --- a/src/libjin/Graphics/particles/je_particle_emitter.h +++ /dev/null @@ -1,136 +0,0 @@ -#ifndef __JE_PARTICLE_EMITTER_H__ -#define __JE_PARTICLE_EMITTER_H__ - -#include "../../common/je_temporary.h" -#include "../../math/je_vector2.hpp" - -#include "je_particle.h" - -namespace JinEngine -{ -    namespace Graphics -    { -        namespace Particles -        { - -            struct PositionDef -            { -                bool enableRandom = false; -                Struct(position, -                    struct -                    { -                        Math::Vector2<float> floor; -                        Math::Vector2<float> ceil; -                    } random; -                    Math::Vector2<float> position; -                ); -            }; - -            struct DirectionDef -            { -                bool enableRandom = false; -                Struct(direction, -                    struct -                    { -                        float floor = 0; -                        float ceil = 0; -                    } random; -                    float direction = 0; -                ); -            }; - -            /// -            /// How many particles emitted per second. -            /// -            struct EmitRateDef -            { -                bool enableRandom = false; -                Struct(rate, -                    struct -                    { -                        float floor = 1; -                        float ceil = 1; -                    } random; -                    float rate = 1; -                ); -            }; - -            /// -            /// Initial speed of particle. -            /// -            struct ForceDef -            { -                bool enableRandom = false; -                Struct(force, -                    struct -                    { -                        float floor = 1; -                        float ceil = 1; -                    } random; -                float force = 1; -                ); -            }; - -            /// -            /// Definition of particle emitter. -            /// -            struct ParticleEmitterDef -            { -                EmitRateDef emitRateDef;   ///< Emit rate. - -                PositionDef positionDef;   ///< Emit position(relativily to the particle system center). -                DirectionDef directionDef; ///< Emit direction. -                ForceDef forceDef;         ///< Emit force. -            }; - -            class ParticleSystem; - -            /// -            /// Emit a single particle. -            /// -            class ParticleEmitter -            { -            public: -                /// -                /// -                /// -                ParticleEmitter(ParticleSystem& ps); - -                /// -                /// -                /// -                void update(float dt); - -            private: -                /// -                /// -                /// -                ParticleSystem& mPS; - -                const ParticleEmitterDef& mDef; - -                const ParticleDef& mPDef; - -                /// -                /// Emit 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. -                /// -                void emit(); - -                /// -                /// -                /// -                float mTime; - -                /// -                /// -                /// -                float mInterval; - -            }; - -        } // namespace Particles -    } // namespace Graphics -} // namespace JinEngine - -#endif
\ No newline at end of file diff --git a/src/libjin/Graphics/particles/je_particle_pool.h b/src/libjin/Graphics/particles/je_particle_pool.h deleted file mode 100644 index 46cd73a..0000000 --- a/src/libjin/Graphics/particles/je_particle_pool.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef __JE_PARTICLE_BATCH_H__ -#define __JE_PARTICLE_BATCH_H__ - -#include "../../common/je_pool.hpp" - -#include "je_particle.h" - -namespace JinEngine -{ -    namespace Graphics -    { -        namespace Particles -        { - -            /// -            /// Particle pool for reducing memory fragmentation. -            /// -            typedef Pool<Particle> ParticlePool; - -        } // namespace Particles -    } // namespace Graphics -} // namespace JinEngine - -#endif
\ No newline at end of file diff --git a/src/libjin/Graphics/particles/je_particle_system.cpp b/src/libjin/Graphics/particles/je_particle_system.cpp deleted file mode 100644 index a81a3c9..0000000 --- a/src/libjin/Graphics/particles/je_particle_system.cpp +++ /dev/null @@ -1,67 +0,0 @@ -#include "je_particle_system.h" - -namespace JinEngine -{ -    namespace Graphics -    { -        namespace Particles -        { - -            ParticleSystem::ParticleSystem(const ParticleSystemDef& def) -                : mDef(def) -                , mEmitter(*this) -                , mParticlePool(def.maxParticleCount, sizeof(Particle)) -            { -            } - -            ParticleSystem::~ParticleSystem() -            { -            } - -            void ParticleSystem::update(float dt) -            { -                mEmitter.update(dt); -                for (int i = 0; i < mAliveParticles.size(); ++i) -                { -                    Particle* p = mAliveParticles[i]; -                    if (p->alive == false) -                    { -                        recycle(i, p); -                        --i; -                    } -                    else -                    { -                        p->update(dt); -                    } -                } -            } - -            void ParticleSystem::render(float x, float y, float sx /* = 1 */, float sy /* = 1 */, float r /* = 0 */, float ax /* = 0 */, float ay /* = 0 */) -            { -                for (Particle* p : mAliveParticles) -                    p->render(); -            } - -            void ParticleSystem::setGraphic(const Graphic* graphic) -            { -                mGraphic = graphic; -            } - -            Particle* ParticleSystem::claim() -            { -                Particle* p = new (mParticlePool.GetNextWithoutInitializing()) Particle(mGraphic); -                mAliveParticles.push_back(p); -                return p; -            } - -            void ParticleSystem::recycle(int i, Particle* p) -            { -                if (i >= mAliveParticles.size()) -                    return; -                mAliveParticles.erase(mAliveParticles.begin() + i); -                mParticlePool.Delete(p); -            } - -        } -    } -}
\ No newline at end of file diff --git a/src/libjin/Graphics/particles/je_particle_system.h b/src/libjin/Graphics/particles/je_particle_system.h deleted file mode 100644 index 8ee79ec..0000000 --- a/src/libjin/Graphics/particles/je_particle_system.h +++ /dev/null @@ -1,115 +0,0 @@ -#ifndef __JE_PARTICLE_EMMITTER_H__ -#define __JE_PARTICLE_EMMITTER_H__ - -#include <vector> - -#include "../../common/je_temporary.h" -#include "../../game/je_gameobject.h" - -#include "../je_sprite.h" - -#include "je_particle_emitter.h" -#include "je_particle_pool.h" -#include "je_particle.h" - -namespace JinEngine -{ -    namespace Graphics -    { -        namespace Particles -        { - -            /// -            /// Definition of particle system. -            /// -            struct ParticleSystemDef -            { -                ParticleSystemDef() {} -                uint maxParticleCount = 1;     ///< Max count of particles in pool. 1 by default. -                ParticleEmitterDef emitterDef; ///< Particle emitter definition.  -                ParticleDef particleDef;       ///< Particle definition. -            }; - -            /// -            /// Particle emitter, handle all particles it emitts. -            /// -            class ParticleSystem/* : public Game::GameObject*/ -            { -            public: -                /// -                /// Particle system constructor  -                ///  -                /// @param def Definition of particle system. -                /// -                ParticleSystem(const ParticleSystemDef& def); - -                /// -                /// Particle system destructor. -                /// -                ~ParticleSystem(); - -                /// -                /// Update particle system and all alive particles. -                /// -                void update(float dt); - -                /// -                /// Render particle system. -                /// -                void render(float x, float y, float sx = 1, float sy = 1, float r = 0, float ax = 0, float ay = 0); - -                /// -                /// Set sprite to render.  -                ///  -                /// @param sprite Sprite to render. -                /// -                void setGraphic(const Graphic* graphic); - -            private: - -                friend class ParticleEmitter; - -                ParticleSystem(); - -                /// -                /// -                /// -                Particle* claim(); - -                /// -                /// -                /// -                void recycle(int i, Particle* p); - -                /// -                /// Particle system definition. -                /// -                ParticleSystemDef mDef; - -                /// -                /// Sprite to be drawn. -                /// -                const Graphic* mGraphic; - -                /// -                /// Particle emitter. -                /// -                ParticleEmitter mEmitter; - -                /// -                /// Particle pool. -                /// -                ParticlePool mParticlePool; - -                /// -                /// Alive particles, that means these particles could join to the life cycle loop. -                /// -                std::vector<Particle*> mAliveParticles; - -            }; - -        } // namespace Particles -    } // namespace Graphics -} // namespace JinEngine  - -#endif
\ No newline at end of file | 
