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 ); } } }
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 ); } } } }