#include "package.hpp" #include #include #include #include namespace silly::editor { TileSet &LevelPackage::get_tileset() { return this->tileset; } void LevelPackage::add_level(TileLevel level) { this->levels.push_back(level); } TileLevel &LevelPackage::get_current_level() { return this->levels.at(this->currentLevelIndex); } void LevelPackage::move_to_level_index(int index) { this->currentLevelIndex = std::min(index, (int)this->levels.size() - 1); } const int LevelPackage::get_current_level_index() const { return this->currentLevelIndex; } const std::vector &LevelPackage::get_levels() const { return this->levels; } const std::string &LevelPackage::get_name() const { return this->name; } std::string LevelPackage::export_to_string() const { std::ostringstream oss; // package data oss << "[package]\n" << "# name,version\n" << name << "," << "0\n"; // tileset data oss << this->tileset.export_to_string() << "\n"; // level data for (auto it = this->levels.begin(); it != this->levels.end(); ++it) { oss << it->export_to_string() << "\n"; } return oss.str(); } void LevelPackage::save(LevelPackageFormat format, std::string &file_path) const { if (format != PACKAGE_TXT) { return; } // writing package file std::stringstream pkg_file_path; pkg_file_path << file_path << "/" << this->name << ".txt"; std::string package = this->export_to_string(); std::ofstream ifs(pkg_file_path.str()); ifs << package; ifs.close(); // copying resource files for (auto it = this->tileset.get_entries().begin(); it != this->tileset.get_entries().end(); ++it) { TilesetTile *t = it->get(); std::string old_path = t->path; std::string new_path = file_path + "/" + t->name + "." + t->extension; std::filesystem::copy_file(old_path, new_path); } } }