X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fgameobjs.h;h=49515a34551f9ef1e05045b23ff9a677fd8a515d;hb=5dba61177d71c5572fd29af172fcdab7b1f9a561;hp=660d2f60da8398a3a3707b48d924ac83e721b0c4;hpb=25f9d115085bfd46757a5aa46951c243f748d9be;p=supertux.git diff --git a/src/gameobjs.h b/src/gameobjs.h index 660d2f60d..49515a345 100644 --- a/src/gameobjs.h +++ b/src/gameobjs.h @@ -28,38 +28,25 @@ #include "scene.h" #include "physic.h" #include "collision.h" - -enum ObjectType { OBJ_NONE, OBJ_BADGUY, OBJ_TRAMPOLINE }; - -template -struct ObjectData -{ - int x; - int y; - ObjectType type; - T type_specific; - - ObjectData(ObjectData* pobject) - : x((int)pobject->x), y((int)pobject->y), type(pobject->type), type_specific(pobject->type_specific) {}; - ObjectData(int x_, int y_, ObjectType type_, T type_specific_) - : x(x_), y(y_), type(type_), type_specific(type_specific_) {}; - - ObjectData() - : x(0), y(0), type(OBJ_NONE), type_specific() {}; -}; +#include "game_object.h" +#include "drawable.h" +#include "moving_object.h" +#include "lispwriter.h" /* Bounciness of distros: */ #define NO_BOUNCE 0 #define BOUNCE 1 -class BouncyDistro : public GameObject +class BouncyDistro : public GameObject, public Drawable { - public: - - void init(float x, float y); - void action(double frame_ratio); - void draw(); - std::string type() { return "BouncyDistro"; }; +public: + BouncyDistro(DisplayManager& displaymanager, const Vector& pos); + virtual void action(float elapsed_time); + virtual void draw(Camera& viewport, int layer); + +private: + Vector position; + float ym; }; extern Surface* img_distro[4]; @@ -69,75 +56,100 @@ extern Surface* img_distro[4]; class Tile; -class BrokenBrick : public GameObject +class BrokenBrick : public GameObject, public Drawable { - public: +public: + BrokenBrick(DisplayManager& displaymanager, Tile* tile, + const Vector& pos, const Vector& movement); + + virtual void action(float elapsed_time); + virtual void draw(Camera& viewport, int layer); + +private: Timer timer; Tile* tile; - - void init(Tile* tile, float x, float y, float xm, float ym); - void action(double frame_ratio); - void draw(); - std::string type() { return "BrokenBrick"; }; + Vector position; + Vector movement; }; -class BouncyBrick : public GameObject +class BouncyBrick : public GameObject, public Drawable { - public: - float offset; +public: + BouncyBrick(DisplayManager& displaymanager, const Vector& pos); + virtual void action(float elapsed_time); + virtual void draw(Camera& viewport, int layer); + +private: + Vector position; + float offset; float offset_m; - int shape; - - void init(float x, float y); - void action(double frame_ratio); - void draw(); - std::string type() { return "BouncyBrick"; }; + int shape; }; -class FloatingScore : public GameObject +class FloatingScore : public GameObject, public Drawable { - public: - int value; - Timer timer; +public: + FloatingScore(DisplayManager& displaymanager, const Vector& pos, int s); - void init(float x, float y, int s); - void action(double frame_ratio); - void draw(); - std::string type() { return "FloatingScore"; }; -}; + virtual void action(float elapsed_time); + virtual void draw(Camera& viewport, int layer); - -/* Trampoline */ -struct TrampolineData -{ - int power; +private: + Vector position; + char str[10]; + Timer timer; }; -class Trampoline : public GameObject +class Trampoline : public MovingObject, public Drawable, public Serializable { - public: - void init(float x, float y); - void action(double frame_ratio); - void draw(); - std::string type() { return "Trampoline"; }; +public: + Trampoline(DisplayManager& displaymanager, LispReader& reader); + + virtual void write(LispWriter& writer); + virtual void action(float frame_ratio); + virtual void draw(Camera& viewport, int layer); + + virtual void collision(const MovingObject& other, int); + void collision(void *p_c_object, int c_object, CollisionType type); - Trampoline(ObjectData data) - { - power = data.type_specific.power; + Physic physic; + enum { M_NORMAL, M_HELD } mode; - init(data.x, data.y); - }; + private: + float power; + unsigned int frame; +}; +class FlyingPlatform : public MovingObject, public Drawable, public Serializable +{ +public: + FlyingPlatform(DisplayManager& displaymanager, LispReader& reader); + + virtual void write(LispWriter& writer); + virtual void action(float frame_ratio); + virtual void draw(Camera& viewport, int layer); + + 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; private: - int power; + std::vector pos_x; + std::vector pos_y; + float velocity; + + float vel_x, vel_y; // calculated based in the velocity + + int point; + bool move; unsigned int frame; }; - void load_object_gfx(); #endif