X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fgame_object.h;h=8ad6f92b7b33d026c17d031a11a62a15645b8fac;hb=60908c905544776c376421b8d3e12eeb936c068f;hp=e5df93beff5a0033805cf5794a5b73ddd1a15c1d;hpb=b145cb4377ee4ba2b2c725e3e1f36a27bcae2ff5;p=supertux.git diff --git a/src/game_object.h b/src/game_object.h index e5df93bef..8ad6f92b7 100644 --- a/src/game_object.h +++ b/src/game_object.h @@ -1,9 +1,28 @@ -#ifndef __GAMEOBJECT_HPP__ -#define __GAMEOBJECT_HPP__ +// $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 +// 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_GAMEOBJECT_H +#define SUPERTUX_GAMEOBJECT_H #include -class DisplayManager; +class DrawingContext; +class ObjectRemoveListener; /** * Base class for all game objects. This contains functions for: @@ -17,36 +36,75 @@ class DisplayManager; * 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(); + GameObject(); + virtual ~GameObject(); - /** returns the name of the objecttype, this is mainly usefull for the editor. - * For the coding part you should use C++ RTTI (ie. typeid and dynamic_cast) - * instead. - */ - virtual std::string type() const = 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 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; + /** 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; } + { + 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*/