fix tux jumping always full height
[supertux.git] / src / particlesystem.h
index 8bd117a..d11c5c1 100644 (file)
 #define SUPERTUX_PARTICLESYSTEM_H
 
 #include <vector>
-#include "texture.h"
-#include "drawable.h"
-#include "game_object.h"
+
+#include "video/surface.h"
+#include "special/game_object.h"
+#include "serializable.h"
+
+using namespace SuperTux;
+
+namespace SuperTux {
+class LispReader;
+}
 
 class DisplayManager;
 
@@ -42,23 +49,24 @@ class DisplayManager;
  * initialize particles in the constructor and move them in the simulate
  * function.
  */
-class ParticleSystem : public GameObject, public Drawable
+class ParticleSystem : public GameObject
 {
 public:
-    ParticleSystem(DisplayManager& displaymanager);
+    ParticleSystem();
     virtual ~ParticleSystem();
     
-    virtual void draw(Camera& view, int layer);
+    virtual void draw(DrawingContext& context);
 
 protected:
+    int layer;
+
     class Particle
     {
     public:
         virtual ~Particle()
         { }
 
-        float x, y;
-        int layer;
+        Vector pos;
         Surface* texture;
     };
     
@@ -66,12 +74,15 @@ protected:
     float virtual_width, virtual_height;
 };
 
-class SnowParticleSystem : public ParticleSystem
+class SnowParticleSystem : public ParticleSystem, public Serializable
 {
 public:
-    SnowParticleSystem(DisplayManager& displaymanager);
+    SnowParticleSystem();
     virtual ~SnowParticleSystem();
 
+    void parse(LispReader& reader);
+    void write(LispWriter& writer);
+
     virtual void action(float elapsed_time);
 
     std::string type() const
@@ -87,12 +98,15 @@ private:
     Surface* snowimages[3];
 };
 
-class CloudParticleSystem : public ParticleSystem
+class CloudParticleSystem : public ParticleSystem, public Serializable
 {
 public:
-    CloudParticleSystem(DisplayManager& displaymanager);
+    CloudParticleSystem();
     virtual ~CloudParticleSystem();
 
+    void parse(LispReader& reader);
+    void write(LispWriter& writer);
+
     virtual void action(float elapsed_time);
 
     std::string type() const