Exemplo n.º 1
0
/*
 * @brief All of the leafs under node will have the same cluster
 */
static void FillLeafNumbers_r(node_t * node, int32_t num) {
    if (node->plane_num == PLANENUM_LEAF) {
        if (node->contents & CONTENTS_SOLID)
            node->cluster = -1;
        else
            node->cluster = num;
        return;
    }
    node->cluster = num;
    FillLeafNumbers_r(node->children[0], num);
    FillLeafNumbers_r(node->children[1], num);
}
Exemplo n.º 2
0
/*
================
FillLeafNumbers_r

All of the leafs under node will have the same cluster
================
*/
void FillLeafNumbers_r( node_t *node, int num ) {
	if ( node->planenum == PLANENUM_LEAF ) {
		if ( node->contents & CONTENTS_SOLID ) {
			node->cluster = -1;
		} else {
			node->cluster = num;
		}
		return;
	}
	node->cluster = num;
	FillLeafNumbers_r( node->children[0], num );
	FillLeafNumbers_r( node->children[1], num );
}
Exemplo n.º 3
0
/*
   ================
   NumberLeafs_r
   ================
 */
void NumberLeafs_r( node_t *node ){
	portal_t    *p;

	if ( node->planenum != PLANENUM_LEAF && !node->detail_seperator ) { // decision node
		node->cluster = -99;
		NumberLeafs_r( node->children[0] );
		NumberLeafs_r( node->children[1] );
		return;
	}

	// either a leaf or a detail cluster

	if ( node->contents & CONTENTS_SOLID ) { // solid block, viewpoint never inside
		node->cluster = -1;
		return;
	}

	FillLeafNumbers_r( node, num_visclusters );
	num_visclusters++;

	// count the portals
	for ( p = node->portals ; p ; )
	{
		if ( p->nodes[0] == node ) {      // only write out from first leaf
			if ( Portal_VisFlood( p ) ) {
				num_visportals++;
			}
			p = p->next[0];
		}
		else{
			p = p->next[1];
		}
	}

}