X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fparticlesystem.h;h=d11c5c13daaf309f2b3dda963862847d2365924e;hb=f41a5719a2dc1a50674c69fa511c38a152cc4b03;hp=01ba5862dca514b0b068e3ff3694a0f1e1da069d;hpb=84160722392a024dda42bd86ca9bd85b68c49457;p=supertux.git diff --git a/src/particlesystem.h b/src/particlesystem.h index 01ba5862d..d11c5c13d 100644 --- a/src/particlesystem.h +++ b/src/particlesystem.h @@ -21,7 +21,18 @@ #define SUPERTUX_PARTICLESYSTEM_H #include -#include "texture.h" + +#include "video/surface.h" +#include "special/game_object.h" +#include "serializable.h" + +using namespace SuperTux; + +namespace SuperTux { +class LispReader; +} + +class DisplayManager; /** * This is the base class for particle systems. It is responsible for storing a @@ -38,25 +49,24 @@ * initialize particles in the constructor and move them in the simulate * function. */ -class ParticleSystem +class ParticleSystem : public GameObject { public: ParticleSystem(); virtual ~ParticleSystem(); - void draw(float scrollx, float scrolly, int layer); - - virtual void simulate(float elapsed_time) = 0; + virtual void draw(DrawingContext& context); protected: + int layer; + class Particle { public: virtual ~Particle() { } - float x, y; - int layer; + Vector pos; Surface* texture; }; @@ -64,13 +74,19 @@ protected: float virtual_width, virtual_height; }; -class SnowParticleSystem : public ParticleSystem +class SnowParticleSystem : public ParticleSystem, public Serializable { public: SnowParticleSystem(); virtual ~SnowParticleSystem(); - virtual void simulate(float elapsed_time); + void parse(LispReader& reader); + void write(LispWriter& writer); + + virtual void action(float elapsed_time); + + std::string type() const + { return "SnowParticleSystem"; } private: class SnowParticle : public Particle @@ -82,13 +98,19 @@ private: Surface* snowimages[3]; }; -class CloudParticleSystem : public ParticleSystem +class CloudParticleSystem : public ParticleSystem, public Serializable { public: CloudParticleSystem(); virtual ~CloudParticleSystem(); - virtual void simulate(float elapsed_time); + void parse(LispReader& reader); + void write(LispWriter& writer); + + virtual void action(float elapsed_time); + + std::string type() const + { return "SnowParticleSystem"; } private: class CloudParticle : public Particle