X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fgame_object.h;h=1131847fb9d00adebcc78be6e94027cc3be50684;hb=36266bca23c8ef1a4b036572b7c5fa07df7a1afd;hp=fe81d95af976160ed93d1cfdebd9255f2d1970b7;hpb=03fe5c560a616e7d38a8b1d5d11bfe4675fa8896;p=supertux.git diff --git a/src/game_object.h b/src/game_object.h index fe81d95af..1131847fb 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,36 +16,37 @@ // 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 __GAMEOBJECT_HPP__ -#define __GAMEOBJECT_HPP__ +#ifndef SUPERTUX_GAMEOBJECT_H +#define SUPERTUX_GAMEOBJECT_H #include class DrawingContext; +class ObjectRemoveListener; /** - * 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. + * This is a base class for all game objects. Each sector of a level will hold a + * list of active GameObject while the game is played. + * + * This class is responsible for: + * - Updating and Drawing the object. This should happen in the update() and + * draw() functions. Both are called once per frame. + * - Providing a safe way to remove the object by calling the remove_me + * functions. + * - a 32bit bitset for flags... */ -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; + virtual void update(float elapsed_time) = 0; /** The GameObject should draw itself onto the provided DrawingContext if this * function is called. @@ -54,17 +55,55 @@ 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 +#endif /*SUPERTUX_GAMEOBJECT_H*/