#ifndef EFFECT_H #define EFFECT_H #include "particle.h" #include "pixelGameEngine.h" using namespace olc; class Effect{ public: std::vector<Particle*> particles; int maxLifeTime=0; virtual void create(std::vector<Particle*>&PARTICLES)=0; virtual bool update()=0; Effect(){} void render(PixelGameEngine*game) { for (int i=0;i<particles.size();i++) { particles[i]->render(game); } } }; class FountainEffect:public Effect{ int fountainDensity=0; int lifetime=0; public: FountainEffect(int fountainDensity,int lifetime) :fountainDensity(fountainDensity),lifetime(lifetime){ this->maxLifeTime=lifetime; } void create(std::vector<Particle*>&PARTICLES){ lifetime=maxLifeTime; for (int i=0;i<fountainDensity;i++) { PARTICLES.push_back(new WaterParticle({WIDTH/2,HEIGHT},{(double)(rand()%3+1),(double)(rand()%3+1)},{0,rand()%10/10.0F+0.1F},lifetime,Pixel(rand()%128,rand()%128,255))); } } bool update()override{ lifetime--; return lifetime>0; } }; class FireFountainEffect:public Effect{ int fountainDensity=0; int lifetime=0; public: FireFountainEffect(int fountainDensity,int lifetime) :fountainDensity(fountainDensity),lifetime(lifetime){ this->maxLifeTime=lifetime; } void create(std::vector<Particle*>&PARTICLES){ lifetime=maxLifeTime; for (int i=0;i<fountainDensity;i++) { PARTICLES.push_back(new FireParticle({(double)(rand()%3+1),(double)(rand()%3+1)},{0,rand()%10/10.0F+0.1F},lifetime,Pixel(255,rand()%255,0))); } for (int i=0;i<60;i++) { PARTICLES.push_back(new StaticLineParticle(maxLifeTime,Pixel(255,rand()%255,0,rand()%255))); } } bool update()override{ lifetime--; return lifetime>0; } }; #endif