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 ); } } }
void ResourceLoader::loadFiles(ArchivePtr archive) { const vfs::Entries::Items& files = archive->entries()->items(); gfx::PictureBank& pb = gfx::PictureBank::instance(); std::string basename; basename.reserve( 256 ); for( auto& entry : files ) { NFile file = archive->createAndOpenFile( entry.name ); if( file.isOpen() ) { gfx::Picture pic = PictureLoader::instance().load( file ); if( pic.isValid() ) { basename = entry.name.baseName().toString(); pb.setPicture( basename, pic ); } } } }