X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fobject_factory.cpp;h=667a12f36ceaa3fb4e7fe22e5045508914860c69;hb=ba5f95533903ed6190b0fddede258c86540afffa;hp=8d78c9a2b6df3d7d925bb209861d5ed67d7c71d1;hpb=5b7f9214cb929399f1a855ef5807018a9447d510;p=supertux.git diff --git a/src/object_factory.cpp b/src/object_factory.cpp index 8d78c9a2b..667a12f36 100644 --- a/src/object_factory.cpp +++ b/src/object_factory.cpp @@ -1,7 +1,8 @@ // $Id$ // -// SuperTux - A Jump'n Run +// SuperTux // Copyright (C) 2004 Ricardo Cruz +// Copyright (C) 2006 Matthias Braun // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -24,13 +25,12 @@ #include "lisp/lisp.hpp" #include "lisp/parser.hpp" #include "object_factory.hpp" - -Factories* object_factories = 0; +#include "math/vector.hpp" GameObject* create_object(const std::string& name, const lisp::Lisp& reader) { - Factories::iterator i = object_factories->find(name); - if(i == object_factories->end()) { + Factory::Factories::iterator i = Factory::get_factories().find(name); + if(i == Factory::get_factories().end()) { std::stringstream msg; msg << "No factory for object '" << name << "' found."; throw std::runtime_error(msg.str()); @@ -42,11 +42,27 @@ GameObject* create_object(const std::string& name, const lisp::Lisp& reader) GameObject* create_object(const std::string& name, const Vector& pos) { std::stringstream lisptext; - lisptext << "(" << name - << " (x " << pos.x << ")" + lisptext << "((x " << pos.x << ")" << " (y " << pos.y << "))"; - + lisp::Parser parser; - std::auto_ptr lisp (parser.parse(lisptext)); - return create_object(name, *lisp); + const lisp::Lisp* lisp = parser.parse(lisptext, "create_object"); + GameObject* object = create_object(name, *(lisp->get_car())); + + return object; } + +GameObject* create_badguy_object(const std::string& name, const Vector& pos, const Direction dir) +{ + std::stringstream lisptext; + lisptext << "((x " << pos.x << ")" + << " (y " << pos.y << ")" + << " (direction " << dir << "))"; + + lisp::Parser parser; + const lisp::Lisp* lisp = parser.parse(lisptext, "create_object"); + GameObject* object = create_object(name, *(lisp->get_car())); + + return object; +} +