X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Flevel_subset.cpp;h=5cd4d2abd4f7836fb2b8658c8b03303653c15b99;hb=42503cac8eac1199cccec2d4fbed7fde41a2bb55;hp=25785d164376d516409858caf74592e0f7adfdae;hpb=7dd997b1207127e88f42915ec8bc1aa8e7599ad1;p=supertux.git diff --git a/src/level_subset.cpp b/src/level_subset.cpp index 25785d164..5cd4d2abd 100644 --- a/src/level_subset.cpp +++ b/src/level_subset.cpp @@ -19,12 +19,15 @@ // 02111-1307, USA. #include -#include "setup.h" +#include +#include "app/setup.h" #include "level.h" -#include "globals.h" -#include "screen/surface.h" +#include "app/globals.h" +#include "video/surface.h" #include "level_subset.h" +using namespace SuperTux; + static bool has_suffix(const std::string& data, const std::string& suffix) { if (data.length() >= suffix.length()) @@ -61,8 +64,8 @@ void LevelSubset::read_info_file(const std::string& info_file) { LispReader reader(lisp_cdr(root_obj)); - reader.read_string("title", title); - reader.read_string("description", description); + reader.read_string("title", title, true); + reader.read_string("description", description, true); reader.read_string_vector("levels", levels); } else @@ -73,22 +76,22 @@ void LevelSubset::read_info_file(const std::string& info_file) lisp_free(root_obj); } -void LevelSubset::load(const char* subset) +void LevelSubset::load(const std::string& subset) { name = subset; // Check in which directory our subset is located (ie. ~/.supertux/ // or SUPERTUX_DATADIR) - char filename[1024]; - snprintf(filename, 1024, "%s/levels/%s/", st_dir, subset); - if (access(filename, R_OK) == 0) + std::string filename; + filename = st_dir + "/levels/" + subset + "/"; + if (access(filename.c_str(), R_OK) == 0) { directory = filename; } else { - snprintf(filename, 1024, "%s/levels/%s/", datadir.c_str(), subset); - if (access(filename, R_OK) == 0) + filename = datadir + "/levels/" + subset + "/"; + if (access(filename.c_str(), R_OK) == 0) directory = filename; else std::cout << "Error: LevelSubset: couldn't find subset: " << subset << std::endl; @@ -99,20 +102,20 @@ void LevelSubset::load(const char* subset) if (levels.empty()) { // Level info file doesn't define any levels, so read the // directory to see what we can find - std::vector files; + std::set files; - snprintf(filename, 1024, "%s/levels/%s/", st_dir, subset); - if(access(filename, R_OK) == 0) + filename = st_dir + "/levels/" + subset + "/"; + if(access(filename.c_str(), R_OK) == 0) { - files = read_directory(filename); + files = FileSystem::read_directory(filename); } else { - snprintf(filename, 1024, "%s/levels/%s/", datadir.c_str(), subset); - files = read_directory(filename); + filename = datadir + "/levels/" + subset + "/"; + files = FileSystem::read_directory(filename); } - for(std::vector::iterator i = files.begin(); i != files.end(); ++i) + for(std::set::iterator i = files.begin(); i != files.end(); ++i) { if (has_suffix(*i, ".stl")) levels.push_back(*i); @@ -129,11 +132,11 @@ LevelSubset::save() /* Save data file: */ filename = "/levels/" + name + "/"; - fcreatedir(filename.c_str()); + FileSystem::fcreatedir(filename.c_str()); filename = std::string(st_dir) + "/levels/" + name + "/info"; - if(!fwriteable(filename.c_str())) + if(!FileSystem::fwriteable(filename.c_str())) filename = datadir + "/levels/" + name + "/info"; - if(fwriteable(filename.c_str())) + if(FileSystem::fwriteable(filename.c_str())) { fi = fopen(filename.c_str(), "w"); if (fi == NULL) @@ -167,6 +170,7 @@ LevelSubset::get_level_filename(unsigned int num) { assert(num < levels.size()); +std::cerr << "levels[" << num << "]: " << levels[num] << std::endl; return directory + levels[num]; }