update assets errors handling & add 'atlases' to preload

This commit is contained in:
MihailRis
2024-07-23 19:27:46 +03:00
parent ed60bdc333
commit f9df873382
7 changed files with 112 additions and 51 deletions
+14 -24
View File
@@ -56,7 +56,7 @@ aloader_func AssetsLoader::getLoader(AssetType tag) {
return found->second;
}
bool AssetsLoader::loadNext() {
void AssetsLoader::loadNext() {
const aloader_entry& entry = entries.front();
logger.info() << "loading " << entry.filename << " as " << entry.alias;
try {
@@ -64,11 +64,13 @@ bool AssetsLoader::loadNext() {
auto postfunc = loader(this, paths, entry.filename, entry.alias, entry.config);
postfunc(assets);
entries.pop();
return true;
} catch (std::runtime_error& err) {
logger.error() << err.what();
auto type = entry.tag;
std::string filename = entry.filename;
std::string reason = err.what();
entries.pop();
return false;
throw assetload::error(type, std::move(filename), std::move(reason));
}
}
@@ -154,6 +156,7 @@ void AssetsLoader::processPreloadList(AssetType tag, dynamic::List* list) {
void AssetsLoader::processPreloadConfig(const fs::path& file) {
auto root = files::read_json(file);
processPreloadList(AssetType::ATLAS, root->list("atlases").get());
processPreloadList(AssetType::FONT, root->list("fonts").get());
processPreloadList(AssetType::SHADER, root->list("shaders").get());
processPreloadList(AssetType::TEXTURE, root->list("textures").get());
@@ -163,6 +166,13 @@ void AssetsLoader::processPreloadConfig(const fs::path& file) {
}
void AssetsLoader::processPreloadConfigs(const Content* content) {
auto preloadFile = paths->getMainRoot()/fs::path("preload.json");
if (fs::exists(preloadFile)) {
processPreloadConfig(preloadFile);
}
if (content == nullptr) {
return;
}
for (auto& entry : content->getPacks()) {
const auto& pack = entry.second;
auto preloadFile = pack->getInfo().folder / fs::path("preload.json");
@@ -170,29 +180,11 @@ void AssetsLoader::processPreloadConfigs(const Content* content) {
processPreloadConfig(preloadFile);
}
}
auto preloadFile = paths->getMainRoot()/fs::path("preload.json");
if (fs::exists(preloadFile)) {
processPreloadConfig(preloadFile);
}
}
void AssetsLoader::addDefaults(AssetsLoader& loader, const Content* content) {
loader.add(AssetType::FONT, FONTS_FOLDER+"/font", "normal");
loader.add(AssetType::SHADER, SHADERS_FOLDER+"/ui", "ui");
loader.add(AssetType::SHADER, SHADERS_FOLDER+"/main", "main");
loader.add(AssetType::SHADER, SHADERS_FOLDER+"/entity", "entity");
loader.add(AssetType::SHADER, SHADERS_FOLDER+"/lines", "lines");
loader.add(AssetType::TEXTURE, TEXTURES_FOLDER+"/gui/menubg", "gui/menubg");
loader.add(AssetType::TEXTURE, TEXTURES_FOLDER+"/gui/delete_icon", "gui/delete_icon");
loader.add(AssetType::TEXTURE, TEXTURES_FOLDER+"/gui/no_icon", "gui/no_icon");
loader.add(AssetType::TEXTURE, TEXTURES_FOLDER+"/gui/no_world_icon", "gui/no_world_icon");
loader.add(AssetType::TEXTURE, TEXTURES_FOLDER+"/gui/warning", "gui/warning");
loader.add(AssetType::TEXTURE, TEXTURES_FOLDER+"/gui/error", "gui/error");
loader.add(AssetType::TEXTURE, TEXTURES_FOLDER+"/gui/cross", "gui/cross");
loader.add(AssetType::TEXTURE, TEXTURES_FOLDER+"/gui/refresh", "gui/refresh");
loader.processPreloadConfigs(content);
if (content) {
loader.processPreloadConfigs(content);
for (auto& entry : content->getBlockMaterials()) {
auto& material = *entry.second;
loader.tryAddSound(material.stepsSound);
@@ -218,8 +210,6 @@ void AssetsLoader::addDefaults(AssetsLoader& loader, const Content* content) {
}
}
}
loader.add(AssetType::ATLAS, TEXTURES_FOLDER+"/blocks", "blocks");
loader.add(AssetType::ATLAS, TEXTURES_FOLDER+"/items", "items");
}
bool AssetsLoader::loadExternalTexture(