// 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 <vector>
#include "video/surface.h"
-#include "special/game_object.h"
+#include "game_object.h"
#include "serializable.h"
+#include "sector.h"
+#include "math/vector.h"
-using namespace SuperTux;
-
-namespace SuperTux {
-class LispReader;
+namespace lisp {
+class Lisp;
}
class DisplayManager;
* layer where it should be drawn and a texture.
* The coordinate system used here is a virtual one. It would be a bad idea to
* populate whole levels with particles. So we're using a virtual rectangle
- * here that is tiled onto the level when drawing. This rectangle has the size
+ * here that is tiled onto the level when drawing. This rect.has the size
* (virtual_width, virtual_height). We're using modulo on the particle
* coordinates, so when a particle leaves left, it'll reenter at the right
* side.
SnowParticleSystem();
virtual ~SnowParticleSystem();
- void parse(LispReader& reader);
- void write(LispWriter& writer);
+ void parse(const lisp::Lisp& lisp);
+ void write(lisp::Writer& writer);
- virtual void action(float elapsed_time);
+ virtual void update(float elapsed_time);
std::string type() const
{ return "SnowParticleSystem"; }
Surface* snowimages[3];
};
+class GhostParticleSystem : public ParticleSystem, public Serializable
+{
+public:
+ GhostParticleSystem();
+ virtual ~GhostParticleSystem();
+
+ void parse(const lisp::Lisp& lisp);
+ void write(lisp::Writer& writer);
+
+ virtual void update(float elapsed_time);
+
+ std::string type() const
+ { return "GhostParticleSystem"; }
+
+private:
+ class GhostParticle : public Particle
+ {
+ public:
+ float speed;
+ };
+
+ Surface* ghosts[2];
+};
+
class CloudParticleSystem : public ParticleSystem, public Serializable
{
public:
CloudParticleSystem();
virtual ~CloudParticleSystem();
- void parse(LispReader& reader);
- void write(LispWriter& writer);
+ void parse(const lisp::Lisp& lisp);
+ void write(lisp::Writer& writer);
- virtual void action(float elapsed_time);
+ virtual void update(float elapsed_time);
std::string type() const
{ return "SnowParticleSystem"; }