#pragma once #include "ZLMath.h" #include #include namespace ZL { struct SparkParticle { Vector3f position; Vector3f velocity; float scale; float lifeTime; float maxLifeTime; bool active; int emitterIndex; SparkParticle() : position({ 0,0,0 }), velocity({ 0,0,0 }), scale(1.0f), lifeTime(0), maxLifeTime(1000.0f), active(false), emitterIndex(0) { } }; class SparkEmitter { private: std::vector particles; std::vector emissionPoints; std::chrono::steady_clock::time_point lastEmissionTime; float emissionRate; bool isActive; public: SparkEmitter(); SparkEmitter(const std::vector& positions, float rate = 100.0f); void setEmissionPoints(const std::vector& positions); void setEmissionRate(float rateMs); void setActive(bool active); void update(float deltaTimeMs); void emit(); const std::vector& getParticles() const; size_t getActiveParticleCount() const; private: void initParticle(SparkParticle& particle, int emitterIndex); Vector3f getRandomVelocity(int emitterIndex); }; } // namespace ZL