1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-06-25 00:37:24 +02:00

Implemented preset management for Start Game tab

This commit is contained in:
Ivan Savenko
2024-12-08 20:56:19 +00:00
parent 277adab03f
commit 0fde7942d2
9 changed files with 314 additions and 33 deletions

View File

@ -326,6 +326,61 @@ void ModsPresetState::saveConfigurationState() const
file << modConfig.toCompactString();
}
void ModsPresetState::createNewPreset(const std::string & presetName)
{
if (modConfig["presets"][presetName].isNull())
modConfig["presets"][presetName]["mods"].Vector().emplace_back("vcmi");
}
void ModsPresetState::deletePreset(const std::string & presetName)
{
if (modConfig["presets"].Struct().size() < 2)
throw std::runtime_error("Unable to delete last preset!");
modConfig["presets"].Struct().erase(presetName);
}
void ModsPresetState::activatePreset(const std::string & presetName)
{
if (modConfig["presets"].Struct().count(presetName) == 0)
throw std::runtime_error("Unable to activate non-exinsting preset!");
modConfig["activePreset"].String() = presetName;
}
void ModsPresetState::renamePreset(const std::string & oldPresetName, const std::string & newPresetName)
{
if (oldPresetName == newPresetName)
throw std::runtime_error("Unable to rename preset to the same name!");
if (modConfig["presets"].Struct().count(oldPresetName) == 0)
throw std::runtime_error("Unable to rename non-existing last preset!");
if (modConfig["presets"].Struct().count(newPresetName) != 0)
throw std::runtime_error("Unable to rename preset - preset with such name already exists!");
modConfig["presets"][newPresetName] = modConfig["presets"][oldPresetName];
modConfig["presets"].Struct().erase(oldPresetName);
if (modConfig["activePreset"].String() == oldPresetName)
modConfig["activePreset"].String() = newPresetName;
}
std::vector<std::string> ModsPresetState::getAllPresets() const
{
std::vector<std::string> presets;
for (const auto & preset : modConfig["presets"].Struct())
presets.push_back(preset.first);
return presets;
}
std::string ModsPresetState::getActivePreset() const
{
return modConfig["activePreset"].String();
}
ModsStorage::ModsStorage(const std::vector<TModID> & modsToLoad, const JsonNode & repositoryList)
{
JsonNode coreModConfig(JsonPath::builtin("config/gameConfig.json"));
@ -703,4 +758,38 @@ void ModDependenciesResolver::tryAddMods(TModList modsToResolve, const ModsStora
brokenMods.insert(brokenMods.end(), modsToResolve.begin(), modsToResolve.end());
}
void ModManager::createNewPreset(const std::string & presetName)
{
modsPreset->createNewPreset(presetName);
modsPreset->saveConfigurationState();
}
void ModManager::deletePreset(const std::string & presetName)
{
modsPreset->deletePreset(presetName);
modsPreset->saveConfigurationState();
}
void ModManager::activatePreset(const std::string & presetName)
{
modsPreset->activatePreset(presetName);
modsPreset->saveConfigurationState();
}
void ModManager::renamePreset(const std::string & oldPresetName, const std::string & newPresetName)
{
modsPreset->renamePreset(oldPresetName, newPresetName);
modsPreset->saveConfigurationState();
}
std::vector<std::string> ModManager::getAllPresets() const
{
return modsPreset->getAllPresets();
}
std::string ModManager::getActivePreset() const
{
return modsPreset->getActivePreset();
}
VCMI_LIB_NAMESPACE_END