X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Flevel.cpp;h=6c87b816e32e4c5e96a0103e96aa6be824fe346b;hb=a40453e7f04c072a8054063f1826ff9d7446fe22;hp=b097cc42285427e2af83ae37234e132e70034e46;hpb=60908c905544776c376421b8d3e12eeb936c068f;p=supertux.git diff --git a/src/level.cpp b/src/level.cpp index b097cc422..6c87b816e 100644 --- a/src/level.cpp +++ b/src/level.cpp @@ -29,29 +29,29 @@ #include #include -#include "video/screen.h" -#include "lisp/parser.h" -#include "lisp/lisp.h" -#include "lisp/list_iterator.h" -#include "lisp/writer.h" -#include "level.h" -#include "physic.h" -#include "sector.h" -#include "tile.h" -#include "resources.h" -#include "file_system.h" -#include "object/gameobjs.h" -#include "object/camera.h" -#include "object/tilemap.h" -#include "object/coin.h" +#include "video/screen.hpp" +#include "lisp/parser.hpp" +#include "lisp/lisp.hpp" +#include "lisp/list_iterator.hpp" +#include "lisp/writer.hpp" +#include "level.hpp" +#include "physic.hpp" +#include "sector.hpp" +#include "tile.hpp" +#include "resources.hpp" +#include "file_system.hpp" +#include "object/gameobjs.hpp" +#include "object/camera.hpp" +#include "object/tilemap.hpp" +#include "object/coin.hpp" // test -#include "flip_level_transformer.h" +#include "flip_level_transformer.hpp" using namespace std; Level::Level() - : name("noname"), author("Mr. X"), timelimit(500) + : name("noname"), author("Mr. X"), extro_music("leveldone.ogg"), extro_length(7.0) { } @@ -70,13 +70,6 @@ Level::load(const std::string& filepath) level->get("version", version); if(version == 1) { load_old_format(*level); - -#if 0 - // test for now - FlipLevelTransformer* transformer = new FlipLevelTransformer(); - transformer->transform(this); -#endif - return; } @@ -92,8 +85,17 @@ Level::load(const std::string& filepath) iter.value()->get(name); } else if(token == "author") { iter.value()->get(author); - } else if(token == "time") { - iter.value()->get(timelimit); + } else if(token == "extro") { + const lisp::Lisp* ext = iter.lisp(); + lisp::ListIterator ext_iter(ext); + while(ext_iter.next()) { + const std::string& ext_token = ext_iter.item(); + if(ext_token == "music") { + ext_iter.value()->get(extro_music); + } else if(ext_token == "length") { + ext_iter.value()->get(extro_length); + } + } } else if(token == "sector") { Sector* sector = new Sector; sector->parse(*(iter.lisp())); @@ -116,7 +118,6 @@ Level::load_old_format(const lisp::Lisp& reader) { reader.get("name", name); reader.get("author", author); - reader.get("time", timelimit); Sector* sector = new Sector; sector->parse_old_format(reader); @@ -126,12 +127,7 @@ Level::load_old_format(const lisp::Lisp& reader) void Level::save(const std::string& filename) { - std::string filepath = "levels/" + filename; - int last_slash = filepath.find_last_of('/'); - FileSystem::fcreatedir(filepath.substr(0,last_slash).c_str()); - filepath = user_dir + "/" + filepath; - ofstream file(filepath.c_str(), ios::out); - lisp::Writer* writer = new lisp::Writer(file); + lisp::Writer* writer = new lisp::Writer(filename); writer->write_comment("Level made using SuperTux's built-in Level Editor"); @@ -142,7 +138,6 @@ Level::save(const std::string& filename) writer->write_string("name", name, true); writer->write_string("author", author); - writer->write_int("time", timelimit); for(Sectors::iterator i = sectors.begin(); i != sectors.end(); ++i) { Sector* sector = *i; @@ -154,7 +149,6 @@ Level::save(const std::string& filename) writer->end_list("supertux-level"); delete writer; - file.close(); } Level::~Level()