X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fgameobjs.h;h=197273f0aac01cfc0584111fe3fa2b0406a79f5e;hb=e4db6eb50cd6bcba607858b5e6c4c5d53531ed1f;hp=bc0d0e7f108bb1d21e993e44b7b4d183d688cdf2;hpb=5ab69550afb268f8775d876406a9a5797f224f97;p=supertux.git diff --git a/src/gameobjs.h b/src/gameobjs.h index bc0d0e7f1..197273f0a 100644 --- a/src/gameobjs.h +++ b/src/gameobjs.h @@ -22,29 +22,33 @@ #ifndef SUPERTUX_GAMEOBJS_H #define SUPERTUX_GAMEOBJS_H -#include "type.h" -#include "texture.h" -#include "timer.h" +#include "special/base.h" +#include "video/surface.h" +#include "special/timer.h" #include "scene.h" -#include "physic.h" +#include "math/physic.h" #include "collision.h" -#include "game_object.h" -#include "drawable.h" -#include "moving_object.h" -#include "lispwriter.h" +#include "special/game_object.h" +#include "special/moving_object.h" +#include "serializable.h" +#include "utils/lispwriter.h" /* Bounciness of distros: */ #define NO_BOUNCE 0 #define BOUNCE 1 -class BouncyDistro : public GameObject, public Drawable +namespace SuperTux { +class Sprite; +} + +struct TileId; + +class BouncyDistro : public GameObject { public: - BouncyDistro(DisplayManager& displaymanager, const Vector& pos); + BouncyDistro(const Vector& pos); virtual void action(float elapsed_time); - virtual void draw(ViewPort& viewport, int layer); - virtual std::string type() const - { return "BouncyDistro"; }; + virtual void draw(DrawingContext& context); private: Vector position; @@ -58,17 +62,13 @@ extern Surface* img_distro[4]; class Tile; -class BrokenBrick : public GameObject, public Drawable +class BrokenBrick : public GameObject { public: - BrokenBrick(DisplayManager& displaymanager, Tile* tile, - const Vector& pos, const Vector& movement); + BrokenBrick(Tile* tile, const Vector& pos, const Vector& movement); virtual void action(float elapsed_time); - virtual void draw(ViewPort& viewport, int layer); - - virtual std::string type() const - { return "BrokenBrick"; }; + virtual void draw(DrawingContext& context); private: Timer timer; @@ -77,49 +77,46 @@ private: Vector movement; }; -class BouncyBrick : public GameObject, public Drawable +class BouncyBrick : public GameObject { public: - BouncyBrick(DisplayManager& displaymanager, const Vector& pos); + BouncyBrick(const Vector& pos); virtual void action(float elapsed_time); - virtual void draw(ViewPort& viewport, int layer); + virtual void draw(DrawingContext& context); - virtual std::string type() const - { return "BouncyBrick"; }; - private: Vector position; float offset; float offset_m; - int shape; + TileId& shape; }; -class FloatingScore : public GameObject, public Drawable +class FloatingText : public GameObject { public: - FloatingScore(DisplayManager& displaymanager, const Vector& pos, int s); + FloatingText(const Vector& pos, const std::string& text_); + FloatingText(const Vector& pos, int s); // use this for score, for instance virtual void action(float elapsed_time); - virtual void draw(ViewPort& viewport, int layer); - virtual std::string type() const - { return "FloatingScore"; }; + virtual void draw(DrawingContext& context); private: Vector position; - char str[10]; + std::string text; Timer timer; }; -class Trampoline : public MovingObject, public Drawable, public Serializable +extern Sprite *img_trampoline; + +class Trampoline : public MovingObject, public Serializable { public: - Trampoline(DisplayManager& displaymanager, LispReader& reader); + Trampoline(LispReader& reader); + Trampoline(float x, float y); virtual void write(LispWriter& writer); virtual void action(float frame_ratio); - virtual void draw(ViewPort& viewport, int layer); - virtual std::string type() const - { return "Trampoline"; }; + virtual void draw(DrawingContext& context); virtual void collision(const MovingObject& other, int); void collision(void *p_c_object, int c_object, CollisionType type); @@ -132,20 +129,24 @@ public: unsigned int frame; }; -class FlyingPlatform : public MovingObject, public Drawable, public Serializable +extern Sprite *img_flying_platform; + +class FlyingPlatform : public MovingObject, public Serializable { public: - FlyingPlatform(DisplayManager& displaymanager, LispReader& reader); + FlyingPlatform(LispReader& reader); + FlyingPlatform(int x, int y); virtual void write(LispWriter& writer); virtual void action(float frame_ratio); - virtual void draw(ViewPort& viewport, int layer); - virtual std::string type() const - { return "Trampoline"; }; + virtual void draw(DrawingContext& context); virtual void collision(const MovingObject& other, int); void collision(void *p_c_object, int c_object, CollisionType type); + float get_vel_x() { return vel_x; } + float get_vel_y() { return vel_y; } + Physic physic; enum { M_NORMAL, M_HELD } mode; @@ -154,11 +155,51 @@ public: std::vector pos_y; float velocity; + float vel_x, vel_y; // calculated based in the velocity + int point; bool move; unsigned int frame; }; +extern Sprite *img_smoke_cloud; + +class SmokeCloud : public GameObject +{ +public: + SmokeCloud(const Vector& pos); + + virtual void action(float elapsed_time); + virtual void draw(DrawingContext& context); + +private: + Timer timer; + Vector position; +}; + +class Particles : public GameObject +{ +public: + Particles(const Vector& epicenter, const Vector& velocity, const Vector& acceleration, int number, Color color, int size, int life_time); + ~Particles(); + + virtual void action(float elapsed_time); + virtual void draw(DrawingContext& context); + +private: + Color color; + float size; + Vector vel, accel; + Timer timer; + bool live_forever; + + struct Particle { + Vector pos; + float angle; + }; + std::vector particles; +}; + void load_object_gfx(); #endif