1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-11-27 22:49:25 +02:00

- minor refactoring for filesystem, moved checksum calculation to

loading stage from initialization
- fixes for launcher
This commit is contained in:
Ivan Savenko
2013-12-11 17:12:39 +00:00
parent 69eee05ccc
commit ed329c5a1f
5 changed files with 44 additions and 31 deletions

View File

@@ -16,7 +16,7 @@
CFilesystemList * CResourceHandler::resourceLoader = nullptr;
CFilesystemList * CResourceHandler::initialLoader = nullptr;
CFilesystemList * CResourceHandler::coreDataLoader = nullptr;
std::map<std::string, ISimpleResourceLoader*> CResourceHandler::knownLoaders = std::map<std::string, ISimpleResourceLoader*>();
CFilesystemGenerator::CFilesystemGenerator(std::string prefix):
filesystem(new CFilesystemList()),
@@ -151,40 +151,44 @@ void CResourceHandler::initialize()
recurseInDir("MODS", 2); // look for mods. Depth 2 is required for now but won't cause speed issues if no mods present
}
CFilesystemList * CResourceHandler::get()
ISimpleResourceLoader * CResourceHandler::get()
{
assert(resourceLoader);
return resourceLoader;
}
CFilesystemList * CResourceHandler::getInitial()
ISimpleResourceLoader * CResourceHandler::get(std::string identifier)
{
return knownLoaders.at(identifier);
}
ISimpleResourceLoader * CResourceHandler::getInitial()
{
assert(initialLoader);
return initialLoader;
}
CFilesystemList * CResourceHandler::getCoreData()
{
assert(coreDataLoader);
return coreDataLoader;
}
void CResourceHandler::load(const std::string &fsConfigURI)
{
auto fsConfigData = initialLoader->load(ResourceID(fsConfigURI, EResType::TEXT))->readAll();
const JsonNode fsConfig((char*)fsConfigData.first.get(), fsConfigData.second);
coreDataLoader = createFileSystem("", fsConfig["filesystem"]);
resourceLoader = new CFilesystemList();
resourceLoader->addLoader(coreDataLoader, false);
addFilesystem("core", createFileSystem("", fsConfig["filesystem"]));
// hardcoded system-specific path, may not be inside any of data directories
resourceLoader->addLoader(new CFilesystemLoader("SAVES/", VCMIDirs::get().userSavePath()), true);
resourceLoader->addLoader(new CFilesystemLoader("CONFIG/", VCMIDirs::get().userConfigPath()), true);
}
CFilesystemList * CResourceHandler::createFileSystem(const std::string & prefix, const JsonNode &fsConfig)
void CResourceHandler::addFilesystem(const std::string & identifier, ISimpleResourceLoader * loader)
{
resourceLoader->addLoader(loader, false);
knownLoaders[identifier] = loader;
}
ISimpleResourceLoader * CResourceHandler::createFileSystem(const std::string & prefix, const JsonNode &fsConfig)
{
CFilesystemGenerator generator(prefix);
generator.loadConfig(fsConfig);