/* * @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); }
/* ================ 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 ); }
/* ================ 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]; } } }