bool PrefabStore::loadPrefabForNode(SceneNode *node, LoadingContext &ctx) //groupLoadRequiredLibsForNode { GeoStoreDef *gf; if (!node || !node->in_use) return false; if (node->geoset_info) gf = node->geoset_info; else { gf = groupGetFileEntryPtr(node->name); node->geoset_info = gf; if (!node->geoset_info) node->geoset_info = (GeoStoreDef *)-1; // prevent future load attempts } if (!gf || gf == (GeoStoreDef *)-1) return false; if (!gf->loaded) { gf->loaded = true; loadSubgraph(gf->geopath,ctx,*this); } return true; }
GraphPtr LazyGraph::getSubgraph(AreaId id) { if (subgraphOffsets.size() > 0) { map<AreaId, long int>::iterator i = subgraphOffsets.find(id); assert(i != subgraphOffsets.end()); long int offset = i->second; GraphPtr r = NULL; r = loadSubgraph(offset, id); return r; } return NULL; }
bool PrefabStore::loadNamedPrefab(const QString &name, LoadingContext &ctx) //groupFileLoadFromName { GeoStoreDef *geo_store = groupGetFileEntryPtr(name); if (!geo_store) return false; if (geo_store->loaded) return true; geo_store->loaded = true; loadSubgraph(geo_store->geopath,ctx,*this); loadPrefabForNode(getNodeByName(*ctx.m_target,name), ctx); return true; }