void ResourceLoader::loadFromModel( Path path2model, const Directory dir ) { VariantMap archives = config::load( path2model ); for( auto& entry : archives ) { Path absArchivePath( entry.second.toString() ); if( !absArchivePath.exist() ) { Path rpath = entry.second.toString(); absArchivePath = dir/rpath; } Logger::warning( "ResourceLoader: try mount archive " + absArchivePath.toString() ); Directory absDir = absArchivePath.directory(); absArchivePath = absDir.find( absArchivePath.baseName(), Path::ignoreCase ); ArchivePtr archive = FileSystem::instance().mountArchive( absArchivePath ); if( archive.isValid() ) { emit _d->onStartLoadingSignal( entry.first ); NFile archiveInfo = archive->createAndOpenFile( archiveDescFile ); loadAtlases( archiveInfo, true ); //FileSystem::instance().unmountArchive( archive ); } else { Logger::warning( "ResourceLoader: cannot load archive " + absArchivePath.toString() ); } } }
void initialize(ClimateType climate) { VariantMap climateArchives = config::load( SETTINGS_RC_PATH( climateModel ) ); std::string optName; if( climate == central ) { optName = CAESARIA_STR_A(central); } else if( climate == northen ) { optName = "north"; } else if( climate == desert ) { optName = "south"; } StringArray archives = climateArchives.get( optName ).toStringArray(); for( auto& str : archives ) { Path archivePath = str; Directory dir = archivePath.directory(); archivePath = dir.find( archivePath.baseName(), Path::ignoreCase ); ArchivePtr archive = FileSystem::instance().mountArchive( archivePath ); if( archive.isNull() ) { Logger::warning( "ClimateManager: can't load file " + archivePath.toString() ); continue; } ResourceLoader rc; NFile atlasInfo = archive->createAndOpenFile( "info" ); if( atlasInfo.isOpen() ) { rc.loadAtlases( atlasInfo, false ); } else { rc.loadFiles( archive ); } } }