X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fgameobjs.h;h=5ebbe07dfda7a12c81355e9158703dfbe70e3ff3;hb=875ef8eb7e93726bc67dfa7f05da946250e588d4;hp=2e24a34bfa9c2998032f3f715b6c2506bfb20696;hpb=168c326b585555e4ea6d444ad96a83d880d5c7e3;p=supertux.git diff --git a/src/gameobjs.h b/src/gameobjs.h index 2e24a34bf..5ebbe07df 100644 --- a/src/gameobjs.h +++ b/src/gameobjs.h @@ -1,74 +1,162 @@ +// $Id$ +// +// SuperTux +// Copyright (C) 2000 Bill Kendrick +// Copyright (C) 2004 Tobias Glaesser +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// 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_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" /* Bounciness of distros: */ #define NO_BOUNCE 0 #define BOUNCE 1 -class bouncy_distro_type +namespace SuperTux { +class Sprite; +} + +class BouncyCoin : public GameObject { - public: - base_type base; +public: + BouncyCoin(const Vector& pos); + ~BouncyCoin(); + virtual void action(float elapsed_time); + virtual void draw(DrawingContext& context); + +private: + Sprite* sprite; + Vector position; + Timer2 timer; }; -extern texture_type img_distro[4]; - -void bouncy_distro_init(bouncy_distro_type* pbouncy_distro, float x, float y); -void bouncy_distro_action(bouncy_distro_type* pbouncy_distro); -void bouncy_distro_draw(bouncy_distro_type* pbouncy_distro); -void bouncy_distro_collision(bouncy_distro_type* pbouncy_distro, int c_object); +class BrokenBrick : public GameObject +{ +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; +}; -#define BOUNCY_BRICK_MAX_OFFSET 8 -#define BOUNCY_BRICK_SPEED 0.9 +class FloatingText : public GameObject +{ +public: + 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(DrawingContext& context); + +private: + Vector position; + std::string text; + Timer2 timer; +}; -class Tile; +#if 0 +extern Sprite *img_trampoline; -class broken_brick_type +class Trampoline : public MovingObject, public Serializable { - public: - base_type base; - timer_type timer; - Tile* tile; +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); + + virtual void collision(const MovingObject& other, int); + void collision(void *p_c_object, int c_object, CollisionType type); + + Physic physic; + enum { M_NORMAL, M_HELD } mode; + + private: + float power; + unsigned int frame; }; +#endif -void broken_brick_init(broken_brick_type* pbroken_brick, Tile* tile, - float x, float y, float xm, float ym); -void broken_brick_action(broken_brick_type* pbroken_brick); -void broken_brick_draw(broken_brick_type* pbroken_brick); +extern Sprite *img_smoke_cloud; -class bouncy_brick_type +class SmokeCloud : public GameObject { - public: - float offset; - float offset_m; - int shape; - base_type base; +public: + SmokeCloud(const Vector& pos); + + virtual void action(float elapsed_time); + virtual void draw(DrawingContext& context); + +private: + Timer2 timer; + Vector position; }; -void bouncy_brick_init(bouncy_brick_type* pbouncy_brick, float x, float y); -void bouncy_brick_action(bouncy_brick_type* pbouncy_brick); -void bouncy_brick_draw(bouncy_brick_type* pbouncy_brick); - -class floating_score_type +class Particles : public GameObject { - public: - int value; - timer_type timer; - base_type base; +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 floating_score_init(floating_score_type* pfloating_score, float x, float y, int s); -void floating_score_action(floating_score_type* pfloating_score); -void floating_score_draw(floating_score_type* pfloating_score); +void load_object_gfx(); +void free_object_gfx(); #endif /* Local Variables: */ /* mode:c++ */ -/* End */ +/* End: */