#include <string>
#include "refcounter.hpp"
-#include "lisp/lisp.hpp"
class DrawingContext;
class ObjectRemoveListener;
* 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 : public RefCounter
{
public:
- GameObject(std::string name = "");
- GameObject(const lisp::Lisp& lisp);
+ GameObject();
virtual ~GameObject();
/** This function is called once per frame and allows the object to update
/** 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;
- }
+ void add_remove_listener(ObjectRemoveListener* listener);
+
+ /**
+ * unregisters a remove listener, so it will no longer be called if the object
+ * gets removed/destroyed
+ */
+ void del_remove_listener(ObjectRemoveListener* listener);
- std::string get_name() const
+ const std::string& get_name() const
{
return name;
}
- // --- BEGIN METHODS TO EXPOSE TO SQUIRREL --- //
- //void set_visible(bool visible);
- //bool is_visible();
- // --- END METHODS TO EXPOSE TO SQUIRREL --- //
private:
/** this flag indicates if the object should be removed at the end of the
RemoveListenerListEntry* remove_listeners;
protected:
- std::string name; /**< user-defined name for use in scripts or empty string if not scriptable */
+ /**
+ * a name for the gameobject, this is mostly a hint for scripts and for
+ * debugging, don't rely on names being set or being unique
+ */
+ std::string name;
};
#endif /*SUPERTUX_GAMEOBJECT_H*/