예제 #1
0
파일: SceneGraph.cpp 프로젝트: nemerle/Segs
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;
}
예제 #2
0
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;
}
예제 #3
0
파일: SceneGraph.cpp 프로젝트: nemerle/Segs
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;
}