diff options
-rw-r--r-- | source/game/StarRoot.cpp | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/source/game/StarRoot.cpp b/source/game/StarRoot.cpp index 5adbd0c..23abfd9 100644 --- a/source/game/StarRoot.cpp +++ b/source/game/StarRoot.cpp @@ -391,13 +391,19 @@ ConfigurationPtr Root::configuration() { currentConfig = m_settings.defaultConfiguration; } else { try { - Json config = Json::parseJson(File::readFileString(*m_runtimeConfigFile)); - if (!config.isType(Json::Type::Object)) + Json jConfig = Json::parseJson(File::readFileString(*m_runtimeConfigFile)); + if (!jConfig.isType(Json::Type::Object)) throw ConfigurationException("User config is not of JSON type Object"); - if (config.get("configurationVersion", {}) != m_settings.defaultConfiguration.get("configurationVersion", {})) + if (jConfig.get("configurationVersion", {}) != m_settings.defaultConfiguration.get("configurationVersion", {})) throw ConfigurationException("User config version does not match default config version"); + auto config = jConfig.toObject(); + for (auto& entry : *m_settings.defaultConfiguration.objectPtr()) { + if (!config.contains(entry.first)) + config.insert(entry.first, entry.second); + } + currentConfig = config; } catch (std::exception const& e) { Logger::warn("Root: Failed to load user configuration file {}, resetting user config: {}", *m_runtimeConfigFile, outputException(e, false)); |