void Manifest::loadManifest(const rapidjson::Document &json) { loadVersion(json); // Retrieve package url if ( json.HasMember(KEY_PACKAGE_URL) && json[KEY_PACKAGE_URL].IsString() ) { _packageUrl = json[KEY_PACKAGE_URL].GetString(); // Append automatically "/" if (_packageUrl.size() > 0 && _packageUrl[_packageUrl.size() - 1] != '/') { _packageUrl.append("/"); } } // Retrieve all assets if ( json.HasMember(KEY_ASSETS) ) { const rapidjson::Value& assets = json[KEY_ASSETS]; if (assets.IsObject()) { for (rapidjson::Value::ConstMemberIterator itr = assets.MemberBegin(); itr != assets.MemberEnd(); ++itr) { std::string key = itr->name.GetString(); Asset asset = parseAsset(key, itr->value); _assets.emplace(key, asset); } } } // Retrieve all search paths if ( json.HasMember(KEY_SEARCH_PATHS) ) { const rapidjson::Value& paths = json[KEY_SEARCH_PATHS]; if (paths.IsArray()) { for (rapidjson::SizeType i = 0; i < paths.Size(); ++i) { if (paths[i].IsString()) { _searchPaths.push_back(paths[i].GetString()); } } } } _loaded = true; }
bool Importer::parseLibraryCameras( const Asset& asset_parent, xmlNodePtr lib_cameras_node ) { Logger log = getLogger( "Scene.XML.parseLibraryCameras" ); if( !assertNode( lib_cameras_node, "library_cameras" ) ) { return false; } xmlNodePtr n = lib_cameras_node->children; if( n!=NULL && xmlStrEqual( n->name, BAD_CAST "asset" ) ) { Asset asset; if( parseAsset( asset, n ) ) { m_database.library<Camera>().setAsset( asset ); } else { SCENELOG_ERROR( log, "Failed to parse <asset>" ); return false; } n = n->next; } else { m_database.library<Camera>().setAsset( asset_parent ); } while( n!= NULL && xmlStrEqual( n->name, BAD_CAST "camera" ) ) { if( !parseCamera( m_database.library<Camera>().asset(), n ) ) { SCENELOG_ERROR( log, "Failed to parse <camera>" ); return false; } n = n->next; } ignoreExtraNodes( log, n ); nagAboutRemainingNodes( log, n ); return true; }