bool Res::canAfford(const ResourceSet &res, const ResourceSet &price) { assert(res.size() == price.size() && price.size() == GameConstants::RESOURCE_QUANTITY); for(int i = 0; i < GameConstants::RESOURCE_QUANTITY; i++) if(price[i] > res[i]) return false; return true; }
void print_resources(const ResourceSet &rs) { cout << "collected " << rs.size() << " resources\n"; ResourceSet::const_iterator it(rs.begin()); for (; it!=rs.end(); ++it) { cout << it->second << "\t"; it->first->pretty(cout); cout << endl; } }
ResourceTableHeader write_resource_table(ostream &out, const ResourceSet &rs) { ResourceIndex index; uint32_t pre_data(out.tellp()); write_resource_data(out, index, rs); uint32_t post_data(out.tellp()); write_resource_index(out, index); ResourceTableHeader tbl_header; tbl_header.data_size = post_data - pre_data; tbl_header.resource_count = rs.size(); return tbl_header; }
void ResourceManager::loadResources( const ResourceList& rResources, const SimpleResourceCallback& rCallbackSlot ) { // Convert to set to remove duplicates. ResourceSet resources = ResourceInfo::toResourceSet( rResources ); if( resources.empty() ) { // If there are no resources to be loaded, call the slot and return immediately. rCallbackSlot(); return; } ResourceManager::ResourcesLoader* resourceLoader = ResourceManager::ResourcesLoader::create( rCallbackSlot ); unsigned short loaded = 0; for( ResourceSet::const_iterator i = resources.begin(); i != resources.end(); ++i ) { // Add resources to resource loader. Ogre::ResourcePtr resource = ResourceManager::getResource( *i, true ); if( resource.isNull() ) { DIVERSIA_EXCEPT( Exception::ERR_FILE_NOT_FOUND, "Cannot load resource " + (*i).mFile.string() + ", file does not exist.", "ResourceManager::loadResource" ); } if( resource->isLoaded() ) loaded++; else resourceLoader->addResource( resource ); } // All resources are already loaded. if( loaded == resources.size() ) { rCallbackSlot(); delete resourceLoader; return; } for( ResourceSet::const_iterator j = resources.begin(); j != resources.end(); ++j ) { // Load all resources and callback to the resource loader. If all resources are loaded // the rCallbackSlot will be called and the resource loader will be destroyed. ResourceManager::loadResource( *j, sigc::mem_fun( resourceLoader, &ResourceManager::ResourcesLoader::loadingComplete ) ); } }