X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fgame_object.h;h=8ad6f92b7b33d026c17d031a11a62a15645b8fac;hb=60908c905544776c376421b8d3e12eeb936c068f;hp=8c6c3bfc459cf331724ddab411280c4ffd863703;hpb=308f11e38981077626fe0ea9887094f3c28b02f9;p=supertux.git diff --git a/src/game_object.h b/src/game_object.h index 8c6c3bfc4..8ad6f92b7 100644 --- a/src/game_object.h +++ b/src/game_object.h @@ -1,7 +1,7 @@ -// $Id$ +// $Id: game_object.h 2293 2005-03-25 20:39:56Z matzebraun $ // // 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 @@ -16,13 +16,13 @@ // 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_GAMEOBJECT_H #define SUPERTUX_GAMEOBJECT_H #include class DrawingContext; +class ObjectRemoveListener; /** * Base class for all game objects. This contains functions for: @@ -36,15 +36,16 @@ class DrawingContext; * 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 +class GameObject { public: GameObject(); virtual ~GameObject(); /** 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. + * 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; @@ -55,16 +56,54 @@ public: /** returns true if the object is not scheduled to be removed yet */ bool is_valid() const - { return !wants_to_die; } + { + return !wants_to_die; + } /** schedules this object to be removed at the end of the frame */ void remove_me() - { wants_to_die = true; } + { + wants_to_die = true; + } + /** registers a remove listener which will be called if the object + * gets removed/destroyed + */ + void add_remove_listener(ObjectRemoveListener* listener) + { + RemoveListenerListEntry* entry = new RemoveListenerListEntry(); + entry->next = remove_listeners; + entry->listener = listener; + + remove_listeners = entry; + } + // 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; + + struct RemoveListenerListEntry + { + RemoveListenerListEntry* next; + ObjectRemoveListener* listener; + }; + RemoveListenerListEntry* remove_listeners; + +protected: + int flags; }; #endif /*SUPERTUX_GAMEOBJECT_H*/