X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fgameobjs.h;h=49515a34551f9ef1e05045b23ff9a677fd8a515d;hb=5dba61177d71c5572fd29af172fcdab7b1f9a561;hp=cc1a1daf6b3a9908706e856d07df4ee01937cf5a;hpb=b145cb4377ee4ba2b2c725e3e1f36a27bcae2ff5;p=supertux.git diff --git a/src/gameobjs.h b/src/gameobjs.h index cc1a1daf6..49515a345 100644 --- a/src/gameobjs.h +++ b/src/gameobjs.h @@ -30,38 +30,19 @@ #include "collision.h" #include "game_object.h" #include "drawable.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 "moving_object.h" +#include "lispwriter.h" /* Bounciness of distros: */ #define NO_BOUNCE 0 #define BOUNCE 1 -class BouncyDistro : public _GameObject, public Drawable +class BouncyDistro : public GameObject, public Drawable { public: BouncyDistro(DisplayManager& displaymanager, 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(Camera& viewport, int layer); private: Vector position; @@ -75,17 +56,14 @@ extern Surface* img_distro[4]; class Tile; -class BrokenBrick : public _GameObject, public Drawable +class BrokenBrick : public GameObject, public Drawable { public: BrokenBrick(DisplayManager& displaymanager, 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(Camera& viewport, int layer); private: Timer timer; @@ -94,16 +72,13 @@ private: Vector movement; }; -class BouncyBrick : public _GameObject, public Drawable +class BouncyBrick : public GameObject, public Drawable { public: BouncyBrick(DisplayManager& displaymanager, const Vector& pos); virtual void action(float elapsed_time); - virtual void draw(ViewPort& viewport, int layer); + virtual void draw(Camera& viewport, int layer); - virtual std::string type() const - { return "BouncyBrick"; }; - private: Vector position; float offset; @@ -111,15 +86,13 @@ private: int shape; }; -class FloatingScore : public _GameObject, public Drawable +class FloatingScore : public GameObject, public Drawable { public: FloatingScore(DisplayManager& displaymanager, const Vector& pos, int s); virtual void action(float elapsed_time); - virtual void draw(ViewPort& viewport, int layer); - virtual std::string type() const - { return "FloatingScore"; }; + virtual void draw(Camera& viewport, int layer); private: Vector position; @@ -127,28 +100,16 @@ private: Timer timer; }; - -/* Trampoline */ -struct TrampolineData -{ - float power; -}; - -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"; }; - - Trampoline(ObjectData data) - { - power = data.type_specific.power; - - init(data.x, data.y); - }; +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); Physic physic; @@ -159,56 +120,38 @@ class Trampoline : public GameObject unsigned int frame; }; -void load_object_gfx(); - - -class ObjectManager +class FlyingPlatform : public MovingObject, public Drawable, public Serializable { - private: - ObjectManager(); - ~ObjectManager(); +public: + FlyingPlatform(DisplayManager& displaymanager, LispReader& reader); + + virtual void write(LispWriter& writer); + virtual void action(float frame_ratio); + virtual void draw(Camera& viewport, int layer); - static ObjectManager* instance_; + virtual void collision(const MovingObject& other, int); + void collision(void *p_c_object, int c_object, CollisionType type); - // XXX Objects will have to be split up into two categories: - // - Drawn before tux - // - Drawn after tux - // Eventually Player should be a part of ObjectManager + float get_vel_x() { return vel_x; } + float get_vel_y() { return vel_y; } - std::vector badguys; - std::vector trampolines; - std::vector bouncy_distros; - std::vector broken_bricks; - std::vector bouncy_bricks; - //std::vector upgrades; - //std::vector bullets; + Physic physic; + enum { M_NORMAL, M_HELD } mode; - void load_badguys(std::string filename); + private: + std::vector pos_x; + std::vector pos_y; + float velocity; - public: - static ObjectManager* instance() { return instance_ ? instance_ : instance_ = new ObjectManager(); } - static void destroy_instance() { delete instance_; instance_ = 0; } + float vel_x, vel_y; // calculated based in the velocity - void draw_bg(); - void draw_fg(); - void actions(); - -/* Object* get(unsigned int id) { - if(id < badguys.size()) - { - return badguys[id]; - } - else - { - // Never return 0, but return the 0th tile instead so that - // user code doesn't have to check for NULL pointers all over - // the place - return badguys[0]; - } - } -*/ + int point; + bool move; + unsigned int frame; }; +void load_object_gfx(); + #endif /* Local Variables: */