When selecting the current level set from the "last played level sets"
sub-menu, using the corresponding tree node from this sub-tree instead
of the "original" tree node of that level set may cause a number of
problems:
When using a level template stored in the parent level set directory,
it will not be detected as there is no corresponding parent tree node
if a tree node from the "last played level sets" sub-tree is used.
When toggling between the "original" tree node and the node copy from
the "last played level sets" sub-tree, custom artwork will always be
reloaded, as the level set tree node is treated as "has changed".
This change fixes these problems by always making sure that the
"original" tree node is used after selecting a new level set, but
causes the level set selection menu to always start with the
"original" tree node, even if the last level set selection was made
from the "last played level sets" menu.
boolean validLevelSeries(TreeInfo *node)
{
boolean validLevelSeries(TreeInfo *node)
{
- return (node != NULL && !node->node_group && !node->parent_link);
+ // in a number of cases, tree node is no valid level set
+ if (node == NULL || node->node_group || node->parent_link || node->is_copy)
+ return FALSE;
+
+ return TRUE;
+}
+
+TreeInfo *getValidLevelSeries(TreeInfo *node, TreeInfo *default_node)
+{
+ if (validLevelSeries(node))
+ return node;
+ else if (node->is_copy)
+ return getTreeInfoFromIdentifier(leveldir_first, node->identifier);
+ else
+ return getFirstValidTreeInfoEntry(default_node);
}
TreeInfo *getFirstValidTreeInfoEntry(TreeInfo *node)
}
TreeInfo *getFirstValidTreeInfoEntry(TreeInfo *node)
if (node_group)
return node_group;
}
if (node_group)
return node_group;
}
- else if (!node->parent_link)
+ else if (!node->parent_link && !node->is_copy)
{
if (strEqual(identifier, node->identifier))
return node;
{
if (strEqual(identifier, node->identifier))
return node;
void removeTreeInfo(TreeInfo **);
int numTreeInfo(TreeInfo *);
boolean validLevelSeries(TreeInfo *);
void removeTreeInfo(TreeInfo **);
int numTreeInfo(TreeInfo *);
boolean validLevelSeries(TreeInfo *);
+TreeInfo *getValidLevelSeries(TreeInfo *, TreeInfo *);
TreeInfo *getFirstValidTreeInfoEntry(TreeInfo *);
TreeInfo *getTreeInfoFirstGroupEntry(TreeInfo *);
int numTreeInfoInGroup(TreeInfo *);
TreeInfo *getFirstValidTreeInfoEntry(TreeInfo *);
TreeInfo *getTreeInfoFirstGroupEntry(TreeInfo *);
int numTreeInfoInGroup(TreeInfo *);
- // leveldir_current may be invalid (level group, parent link)
- if (!validLevelSeries(leveldir_current))
- leveldir_current = getFirstValidTreeInfoEntry(leveldir_last_valid);
+ // leveldir_current may be invalid (level group, parent link, node copy)
+ leveldir_current = getValidLevelSeries(leveldir_current, leveldir_last_valid);
if (leveldir_current != leveldir_last_valid)
{
if (leveldir_current != leveldir_last_valid)
{