X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fsupertux%2Fobject_factory.hpp;h=9e3d2f12668e1c1196f60f9c4ac7e22c087940dd;hb=146cb5cf3c1ea9bd8f884e3c99a7789c42d598f1;hp=b734a1f42d84e4a7d5ad172f4c0231c7ef42feca;hpb=729bc6717bf68314dc9fad25db3a9f728062263e;p=supertux.git diff --git a/src/supertux/object_factory.hpp b/src/supertux/object_factory.hpp index b734a1f42..9e3d2f126 100644 --- a/src/supertux/object_factory.hpp +++ b/src/supertux/object_factory.hpp @@ -18,10 +18,12 @@ #ifndef HEADER_SUPERTUX_SUPERTUX_OBJECT_FACTORY_HPP #define HEADER_SUPERTUX_SUPERTUX_OBJECT_FACTORY_HPP -#include #include +#include +#include #include "supertux/direction.hpp" +#include "supertux/game_object_ptr.hpp" #include "util/reader_fwd.hpp" class Vector; @@ -36,19 +38,19 @@ public: /** 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 ConcreteObjectFactory : public AbstractObjectFactory { public: - ConcreteObjectFactory() {} + ConcreteObjectFactory() {} ~ConcreteObjectFactory() {} - GameObject* create(const Reader& reader) + GameObjectPtr create(const Reader& reader) { - return new C(reader); + return std::make_shared(reader); } }; @@ -58,22 +60,22 @@ public: static ObjectFactory& instance(); private: - typedef std::map Factories; + typedef std::map > Factories; Factories factories; public: 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 void add_factory(const char* name) { assert(factories.find(name) == factories.end()); - factories[name] = new ConcreteObjectFactory(); + factories[name] = std::unique_ptr(new ConcreteObjectFactory()); } void init_factories(); };