#include <memory>
#include "supertux/direction.hpp"
+#include "supertux/game_object_ptr.hpp"
#include "util/reader_fwd.hpp"
class Vector;
/** Creates a new gameobject from a lisp node.
* Remember to delete the objects later
*/
- virtual GameObject* create(const Reader& reader) = 0;
+ virtual GameObjectPtr create(const Reader& reader) = 0;
};
template<class C>
ConcreteObjectFactory() {}
~ConcreteObjectFactory() {}
- GameObject* create(const Reader& reader)
+ GameObjectPtr create(const Reader& reader)
{
- return new C(reader);
+ return std::make_shared<C>(reader);
}
};
ObjectFactory();
~ObjectFactory();
- GameObject* create(const std::string& name, const Reader& reader);
- GameObject* create(const std::string& name, const Vector& pos, const Direction dir = AUTO);
+ GameObjectPtr create(const std::string& name, const Reader& reader);
+ GameObjectPtr create(const std::string& name, const Vector& pos, const Direction dir = AUTO);
private:
template<class C>