X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fsetup.c;h=60ec59f307cc83e9aaf332a86c5b85f16b13e73d;hb=e3eb198296f9af373fa51c7a30f3a9ae27870808;hp=bda89ee3222c63f3c747f244144f2a43ecef89e0;hpb=aeab04175be270699cc23606f3e28142c5b60f6c;p=rocksndiamonds.git diff --git a/src/libgame/setup.c b/src/libgame/setup.c index bda89ee3..60ec59f3 100644 --- a/src/libgame/setup.c +++ b/src/libgame/setup.c @@ -1290,22 +1290,38 @@ TreeInfo *getValidLevelSeries(TreeInfo *node, TreeInfo *default_node) return getFirstValidTreeInfoEntry(default_node); } -TreeInfo *getFirstValidTreeInfoEntry(TreeInfo *node) +static TreeInfo *getValidTreeInfoEntryExt(TreeInfo *node, boolean get_next_node) { if (node == NULL) return NULL; - if (node->node_group) // enter level group (step down into tree) + if (node->node_group) // enter node group (step down into tree) return getFirstValidTreeInfoEntry(node->node_group); - else if (node->parent_link) // skip start entry of level group + + if (node->parent_link) // skip first node (back link) of node group + get_next_node = TRUE; + + if (get_next_node) { - if (node->next) // get first real level series entry - return getFirstValidTreeInfoEntry(node->next); - else // leave empty level group and go on - return getFirstValidTreeInfoEntry(node->node_parent->next); + // get next regular tree node, or step up until one is found + while (node->next == NULL && node->node_parent != NULL) + node = node->node_parent; + + return getFirstValidTreeInfoEntry(node->next); } - else // this seems to be a regular level series - return node; + + // this is a regular tree node + return node; +} + +TreeInfo *getFirstValidTreeInfoEntry(TreeInfo *node) +{ + return getValidTreeInfoEntryExt(node, FALSE); +} + +TreeInfo *getNextValidTreeInfoEntry(TreeInfo *node) +{ + return getValidTreeInfoEntryExt(node, TRUE); } TreeInfo *getTreeInfoFirstGroupEntry(TreeInfo *node) @@ -1491,9 +1507,10 @@ static boolean adjustTreeSoundsForEMC(TreeInfo *node) return settings_changed; } -void dumpTreeInfo(TreeInfo *node, int depth) +int dumpTreeInfo(TreeInfo *node, int depth) { char bullet_list[] = { '-', '*', 'o' }; + int num_leaf_nodes = 0; int i; if (depth == 0) @@ -1511,6 +1528,9 @@ void dumpTreeInfo(TreeInfo *node, int depth) (node->node_parent ? node->node_parent->identifier : "-"), (node->node_group ? "[GROUP]" : "")); + if (!node->node_group && !node->parent_link) + num_leaf_nodes++; + /* // use for dumping artwork info tree Debug("tree", "subdir == '%s' ['%s', '%s'] [%d])", @@ -1518,10 +1538,15 @@ void dumpTreeInfo(TreeInfo *node, int depth) */ if (node->node_group != NULL) - dumpTreeInfo(node->node_group, depth + 1); + num_leaf_nodes += dumpTreeInfo(node->node_group, depth + 1); node = node->next; } + + if (depth == 0) + Debug("tree", "Summary: %d leaf nodes found", num_leaf_nodes); + + return num_leaf_nodes; } void sortTreeInfoBySortFunction(TreeInfo **node_first,