world/content added to packs search paths

This commit is contained in:
MihailRis 2024-01-03 15:22:52 +03:00
parent 01121b6d27
commit 6198ca22f6
3 changed files with 21 additions and 11 deletions

View File

@ -71,20 +71,25 @@ std::vector<std::string> ContentPack::worldPacksList(fs::path folder) {
return files::read_list(listfile);
}
fs::path ContentPack::findPack(const EnginePaths* paths, std::string name) {
auto folder = paths->getResources() / fs::path("content") / fs::path(name);
if (!fs::is_directory(folder)) {
throw contentpack_error(name, folder,
"could not to find pack '"+name+"'");
fs::path ContentPack::findPack(const EnginePaths* paths, fs::path worldDir, std::string name) {
fs::path folder = worldDir / fs::path("content") / fs::path(name);
if (fs::is_directory(folder)) {
return folder;
}
return folder;
folder = paths->getResources() / fs::path("content") / fs::path(name);
if (fs::is_directory(folder)) {
return folder;
}
throw contentpack_error(name, folder,
"could not to find pack '"+name+"'");
}
void ContentPack::readPacks(const EnginePaths* paths,
std::vector<ContentPack>& packs,
const std::vector<std::string>& packnames) {
const std::vector<std::string>& packnames,
std::filesystem::path worldDir) {
for (const auto& name : packnames) {
fs::path packfolder = ContentPack::findPack(paths, name);
fs::path packfolder = ContentPack::findPack(paths, worldDir, name);
packs.push_back(ContentPack::read(packfolder));
}
}

View File

@ -37,10 +37,15 @@ struct ContentPack {
static void scan(std::filesystem::path folder,
std::vector<ContentPack>& packs);
static std::vector<std::string> worldPacksList(std::filesystem::path folder);
static std::filesystem::path findPack(const EnginePaths* paths, std::string name);
static std::filesystem::path findPack(
const EnginePaths* paths,
std::filesystem::path worldDir,
std::string name);
static void readPacks(const EnginePaths* paths,
std::vector<ContentPack>& packs,
const std::vector<std::string>& names);
const std::vector<std::string>& names,
std::filesystem::path worldDir);
};
#endif // CONTENT_CONTENT_PACK_H_

View File

@ -153,7 +153,7 @@ void open_world(std::string name, Engine* engine) {
packs.clear();
try {
auto packNames = ContentPack::worldPacksList(folder);
ContentPack::readPacks(paths, packs, packNames);
ContentPack::readPacks(paths, packs, packNames, folder);
} catch (contentpack_error& error) {
// could not to find or read pack
guiutil::alert(engine->getGUI(),