X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=lib%2Fspecial%2Fgame_object.h;h=88e1ccb52c1c601290ee00b00eff1f66d605d55c;hb=133d94d5b145f325c38c8c15c9ea561bfffb092d;hp=8c6c3bfc459cf331724ddab411280c4ffd863703;hpb=9c511ea692d3a2339597211f08f18ea74fad35ec;p=supertux.git diff --git a/lib/special/game_object.h b/lib/special/game_object.h index 8c6c3bfc4..88e1ccb52 100644 --- a/lib/special/game_object.h +++ b/lib/special/game_object.h @@ -1,7 +1,7 @@ // $Id$ // // SuperTux - A Jump'n Run -// Copyright (C) 2004 Matthias Braun // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -22,50 +22,75 @@ #include -class DrawingContext; +namespace SuperTux + { -/** - * Base class for all game objects. This contains functions for: - * -querying the actual type of the object - * -a flag that indicates if the object wants to be removed. Objects with this - * flag will be removed at the end of each frame. This is alot safer than - * having some uncontrollable "delete this" in the code. - * -an action function that is called once per frame and allows the object to - * update it's state. - * - * Most GameObjects will also implement the DrawableObject interface so that - * they can actually be drawn on screen. - */ -class GameObject // TODO rename this once the game has been converted -{ -public: - GameObject(); - virtual ~GameObject(); + class DrawingContext; - /** This function is called once per frame and allows the object to update - * it's state. The elapsed_time is the time since the last frame and should be - * the base for all timed things. + /** + * Base class for all game objects. This contains functions for: + * -querying the actual type of the object + * -a flag that indicates if the object wants to be removed. Objects with this + * flag will be removed at the end of each frame. This is alot safer than + * having some uncontrollable "delete this" in the code. + * -an action function that is called once per frame and allows the object to + * update it's state. + * + * Most GameObjects will also implement the DrawableObject interface so that + * they can actually be drawn on screen. */ - virtual void action(float elapsed_time) = 0; + class GameObject + { + public: + GameObject(); + virtual ~GameObject(); - /** The GameObject should draw itself onto the provided DrawingContext if this - * function is called. - */ - virtual void draw(DrawingContext& context) = 0; + /** This function is called once per frame and allows the object to update + * it's state. The elapsed_time is the time since the last frame in + * seconds and should be the base for all timed calculations (don't use + * SDL_GetTicks directly as this will fail in pause mode) + */ + virtual void action(float elapsed_time) = 0; - /** returns true if the object is not scheduled to be removed yet */ - bool is_valid() const - { return !wants_to_die; } - /** schedules this object to be removed at the end of the frame */ - void remove_me() - { wants_to_die = true; } - -private: - /** this flag indicates if the object should be removed at the end of the - * frame - */ - bool wants_to_die; -}; + /** The GameObject should draw itself onto the provided DrawingContext if this + * function is called. + */ + virtual void draw(DrawingContext& context) = 0; + + /** returns true if the object is not scheduled to be removed yet */ + bool is_valid() const + { + return !wants_to_die; + } + /** schedules this object to be removed at the end of the frame */ + void remove_me() + { + wants_to_die = true; + } + + // flags + enum { + /// the tile so you can stand on it + FLAG_SOLID = 0x0001, + /// can be used to temporatily disable collision detection + FLAG_NO_COLLDET = 0x0002 + }; + + int get_flags() const + { + return flags; + } + + private: + /** this flag indicates if the object should be removed at the end of the + * frame + */ + bool wants_to_die; + + protected: + int flags; + }; +} #endif /*SUPERTUX_GAMEOBJECT_H*/