X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fparticlesystem.h;h=d11c5c13daaf309f2b3dda963862847d2365924e;hb=ff0b765ffd32fdea963562ce2c38ffdde81e3416;hp=b90b277a76b42dcf05877b47dabc2969f2023227;hpb=8fa514bf18494f19ca1fbae3512354f0fab22bce;p=supertux.git diff --git a/src/particlesystem.h b/src/particlesystem.h index b90b277a7..d11c5c13d 100644 --- a/src/particlesystem.h +++ b/src/particlesystem.h @@ -16,11 +16,23 @@ // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + #ifndef SUPERTUX_PARTICLESYSTEM_H #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 @@ -37,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; }; @@ -63,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 @@ -81,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