diff --git a/src/content/ContentBuilder.hpp b/src/content/ContentBuilder.hpp index 44099304..cc35838c 100644 --- a/src/content/ContentBuilder.hpp +++ b/src/content/ContentBuilder.hpp @@ -35,11 +35,13 @@ public: : allNames(allNames), type(type) { } - T& create(const std::string& id) { + T& create(const std::string& id, bool* created = nullptr) { auto found = defs.find(id); if (found != defs.end()) { + if (created) *created = false; return *found->second; } + if (created) *created = true; checkIdentifier(id); allNames[id] = type; names.push_back(id); diff --git a/src/content/ContentLoader.cpp b/src/content/ContentLoader.cpp index 1b650f1d..ce3f5060 100644 --- a/src/content/ContentLoader.cpp +++ b/src/content/ContentLoader.cpp @@ -530,7 +530,8 @@ void ContentLoader::loadBlock( if (fs::exists(configFile)) loadBlock(def, full, configFile); if (!def.hidden) { - auto& item = builder.items.create(full + BLOCK_ITEM_SUFFIX); + bool created; + auto& item = builder.items.create(full + BLOCK_ITEM_SUFFIX, &created); item.generated = true; item.caption = def.caption; item.iconType = ItemIconType::BLOCK; @@ -540,7 +541,7 @@ void ContentLoader::loadBlock( for (uint j = 0; j < 4; j++) { item.emission[j] = def.emission[j]; } - stats->totalItems++; + stats->totalItems += created; } } @@ -602,9 +603,10 @@ void ContentLoader::loadContent(const dv::value& root) { if (parent.empty() || builder.blocks.get(parent)) { // No dependency or dependency already loaded/exists in another // content pack - auto& def = builder.blocks.create(full); + bool created; + auto& def = builder.blocks.create(full, &created); loadBlock(def, full, name); - stats->totalBlocks++; + stats->totalBlocks += created; } else { // Dependency not loaded yet, add to pending items pendingDefs.emplace_back(full, name); @@ -621,9 +623,10 @@ void ContentLoader::loadContent(const dv::value& root) { if (builder.blocks.get(parent)) { // Dependency resolved or parent exists in another pack, // load the item - auto& def = builder.blocks.create(it->first); + bool created; + auto& def = builder.blocks.create(it->first, &created); loadBlock(def, it->first, it->second); - stats->totalBlocks++; + stats->totalBlocks += created; it = pendingDefs.erase(it); // Remove resolved item progressMade = true; } else { @@ -647,9 +650,10 @@ void ContentLoader::loadContent(const dv::value& root) { if (parent.empty() || builder.items.get(parent)) { // No dependency or dependency already loaded/exists in another // content pack - auto& def = builder.items.create(full); + bool created; + auto& def = builder.items.create(full, &created); loadItem(def, full, name); - stats->totalItems++; + stats->totalItems += created; } else { // Dependency not loaded yet, add to pending items pendingDefs.emplace_back(full, name); @@ -666,9 +670,10 @@ void ContentLoader::loadContent(const dv::value& root) { if (builder.items.get(parent)) { // Dependency resolved or parent exists in another pack, // load the item - auto& def = builder.items.create(it->first); + bool created; + auto& def = builder.items.create(it->first, &created); loadItem(def, it->first, it->second); - stats->totalItems++; + stats->totalItems += created; it = pendingDefs.erase(it); // Remove resolved item progressMade = true; } else { @@ -692,9 +697,10 @@ void ContentLoader::loadContent(const dv::value& root) { if (parent.empty() || builder.entities.get(parent)) { // No dependency or dependency already loaded/exists in another // content pack - auto& def = builder.entities.create(full); + bool created; + auto& def = builder.entities.create(full, &created); loadEntity(def, full, name); - stats->totalEntities++; + stats->totalEntities += created; } else { // Dependency not loaded yet, add to pending items pendingDefs.emplace_back(full, name); @@ -711,9 +717,10 @@ void ContentLoader::loadContent(const dv::value& root) { if (builder.entities.get(parent)) { // Dependency resolved or parent exists in another pack, // load the item - auto& def = builder.entities.create(it->first); + bool created; + auto& def = builder.entities.create(it->first, &created); loadEntity(def, it->first, it->second); - stats->totalEntities++; + stats->totalEntities += created; it = pendingDefs.erase(it); // Remove resolved item progressMade = true; } else {