X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fgameobjs.h;h=5ebbe07dfda7a12c81355e9158703dfbe70e3ff3;hb=875ef8eb7e93726bc67dfa7f05da946250e588d4;hp=8037db6624e41b9f7f173d124105a44e92455e74;hpb=039ca92dfe9c4729ebbd599bf51dffcd8380e276;p=supertux.git diff --git a/src/gameobjs.h b/src/gameobjs.h index 8037db662..5ebbe07df 100644 --- a/src/gameobjs.h +++ b/src/gameobjs.h @@ -22,115 +22,138 @@ #ifndef SUPERTUX_GAMEOBJS_H #define SUPERTUX_GAMEOBJS_H -#include "type.h" -#include "texture.h" +#include "video/surface.h" #include "timer.h" #include "scene.h" +#include "math/physic.h" +#include "collision.h" +#include "special/game_object.h" +#include "special/moving_object.h" +#include "serializable.h" +#include "utils/lispwriter.h" -enum ObjectType { OBJ_NONE, OBJ_BADGUY, OBJ_TRAMPOLINE }; +/* Bounciness of distros: */ +#define NO_BOUNCE 0 +#define BOUNCE 1 -template -struct ObjectData +namespace SuperTux { +class Sprite; +} + +class BouncyCoin : public GameObject { - 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() {}; +public: + BouncyCoin(const Vector& pos); + ~BouncyCoin(); + virtual void action(float elapsed_time); + virtual void draw(DrawingContext& context); + +private: + Sprite* sprite; + Vector position; + Timer2 timer; }; -struct TrampolineData +class BrokenBrick : public GameObject { - int power; +public: + BrokenBrick(Sprite* sprite, const Vector& pos, const Vector& movement); + ~BrokenBrick(); + + virtual void action(float elapsed_time); + virtual void draw(DrawingContext& context); + +private: + Timer2 timer; + Sprite* sprite; + Vector position; + Vector movement; }; - -/* Bounciness of distros: */ -#define NO_BOUNCE 0 -#define BOUNCE 1 - -class BouncyDistro : public GameObject +class FloatingText : public GameObject { - public: +public: + FloatingText(const Vector& pos, const std::string& text_); + FloatingText(const Vector& pos, int s); // use this for score, for instance - void init(float x, float y); - void action(double frame_ratio); - void draw(); - std::string type() { return "BouncyDistro"; }; + virtual void action(float elapsed_time); + virtual void draw(DrawingContext& context); + +private: + Vector position; + std::string text; + Timer2 timer; }; -extern Surface* img_distro[4]; +#if 0 +extern Sprite *img_trampoline; + +class Trampoline : public MovingObject, public Serializable +{ +public: + Trampoline(LispReader& reader); + Trampoline(float x, float y); + + virtual void write(LispWriter& writer); + virtual void action(float frame_ratio); + virtual void draw(DrawingContext& context); -#define BOUNCY_BRICK_MAX_OFFSET 8 -#define BOUNCY_BRICK_SPEED 0.9 + virtual void collision(const MovingObject& other, int); + void collision(void *p_c_object, int c_object, CollisionType type); -class Tile; + Physic physic; + enum { M_NORMAL, M_HELD } mode; -class BrokenBrick : public GameObject -{ - public: - 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"; }; + private: + float power; + unsigned int frame; }; +#endif -class BouncyBrick : public GameObject -{ - public: - 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"; }; -}; +extern Sprite *img_smoke_cloud; -class FloatingScore : public GameObject +class SmokeCloud : public GameObject { - public: - int value; - Timer timer; +public: + SmokeCloud(const Vector& pos); - 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(DrawingContext& context); + +private: + Timer2 timer; + Vector position; }; -class Trampoline : public GameObject +class Particles : public GameObject { - public: - void init(float x, float y); - void action(double frame_ratio); - void draw(); - std::string type() { return "Trampoline"; }; - - Trampoline(ObjectData data) - { - base.x = data.x; - base.y = data.y; - - power = data.type_specific.power; - } - - private: - int power; +public: + Particles(const Vector& epicenter, int min_angle, int max_angle, + const Vector& initial_velocity, const Vector& acceleration, + int number, Color color, int size, float life_time, int drawing_layer); + ~Particles(); + + virtual void action(float elapsed_time); + virtual void draw(DrawingContext& context); + +private: + Vector accel; + Timer2 timer; + bool live_forever; + + Color color; + float size; + int drawing_layer; + + struct Particle { + Vector pos, vel; +// float angle; + }; + std::vector particles; }; -void load_trampoline_gfx(); +void load_object_gfx(); +void free_object_gfx(); #endif