setString(&ti_new->name_sorting, ti_new->name);
setString(&ti_new->subdir, STRING_TOP_DIRECTORY);
- setString(&ti_new->fullpath, node_first->fullpath);
+ setString(&ti_new->fullpath, ".");
ti_new->sort_priority = node_first->sort_priority;;
ti_new->latest_engine = node_first->latest_engine;
print_timestamp_done("LoadLevelArtworkInfo");
}
-boolean UpdateUserLevelSet(char *level_subdir,
- char *level_name, char *level_author,
- int num_levels, int first_level_nr)
+static boolean AddUserLevelSetToLevelInfoExt(char *level_subdir_new)
+{
+ // get level info tree node of first (original) user level set
+ char *level_subdir_old = getLoginName();
+ LevelDirTree *leveldir_old = getTreeInfoFromIdentifier(leveldir_first,
+ level_subdir_old);
+ if (leveldir_old == NULL) // should not happen
+ return FALSE;
+
+ int draw_deactivation_mask = GetDrawDeactivationMask();
+
+ // override draw deactivation mask (temporarily disable drawing)
+ SetDrawDeactivationMask(REDRAW_ALL);
+
+ // load new level set config and add it next to first user level set
+ LoadLevelInfoFromLevelConf(&leveldir_old->next, NULL,
+ leveldir_old->basepath, level_subdir_new);
+
+ // set draw deactivation mask to previous value
+ SetDrawDeactivationMask(draw_deactivation_mask);
+
+ // get level info tree node of newly added user level set
+ LevelDirTree *leveldir_new = getTreeInfoFromIdentifier(leveldir_first,
+ level_subdir_new);
+ if (leveldir_new == NULL) // should not happen
+ return FALSE;
+
+ // correct top link and parent node link of newly created tree node
+ leveldir_new->node_top = leveldir_old->node_top;
+ leveldir_new->node_parent = leveldir_old->node_parent;
+
+ // sort level info tree to adjust position of newly added level set
+ sortTreeInfo(&leveldir_first);
+
+ return TRUE;
+}
+
+void AddUserLevelSetToLevelInfo(char *level_subdir_new)
+{
+ if (!AddUserLevelSetToLevelInfoExt(level_subdir_new))
+ Error(ERR_EXIT, "internal level set structure corrupted -- aborting");
+}
+
+boolean UpdateUserLevelSet(char *level_subdir, char *level_name,
+ char *level_author, int num_levels)
{
char *filename = getPath2(getUserLevelDir(level_subdir), LEVELINFO_FILENAME);
char *filename_tmp = getStringCat2(filename, ".tmp");
FILE *file_tmp = NULL;
char line[MAX_LINE_LEN];
boolean success = FALSE;
+ LevelDirTree *leveldir = getTreeInfoFromIdentifier(leveldir_first,
+ level_subdir);
+ // update values in level directory tree
+
+ if (level_name != NULL)
+ setString(&leveldir->name, level_name);
+
+ if (level_author != NULL)
+ setString(&leveldir->author, level_author);
+
+ if (num_levels != -1)
+ leveldir->levels = num_levels;
+
+ // update values that depend on other values
+
+ setString(&leveldir->name_sorting, leveldir->name);
+
+ leveldir->last_level = leveldir->first_level + leveldir->levels - 1;
+
+ // sort order of level sets may have changed
+ sortTreeInfo(&leveldir_first);
if ((file = fopen(filename, MODE_READ)) &&
(file_tmp = fopen(filename_tmp, MODE_WRITE)))
fprintf(file_tmp, "%-32s%s\n", "author:", level_author);
else if (strPrefix(line, "levels:") && num_levels != -1)
fprintf(file_tmp, "%-32s%d\n", "levels:", num_levels);
- else if (strPrefix(line, "first_level:") && first_level_nr != -1)
- fprintf(file_tmp, "%-32s%d\n", "first_level:", first_level_nr);
else
fputs(line, file_tmp);
}
return success;
}
-boolean CreateUserLevelSet(char *level_subdir,
- char *level_name, char *level_author,
- int num_levels, int first_level_nr)
+boolean CreateUserLevelSet(char *level_subdir, char *level_name,
+ char *level_author, int num_levels)
{
LevelDirTree *level_info;
char *filename;
setString(&level_info->name, level_name);
setString(&level_info->author, level_author);
level_info->levels = num_levels;
- level_info->first_level = first_level_nr;
+ level_info->first_level = 1;
level_info->sort_priority = LEVELCLASS_PRIVATE_START;
level_info->readonly = FALSE;
fprintf(file, "%s\n", getSetupLine(levelinfo_tokens, "", i));
/* just to make things nicer :) */
- if (i == LEVELINFO_TOKEN_AUTHOR)
+ if (i == LEVELINFO_TOKEN_AUTHOR ||
+ i == LEVELINFO_TOKEN_FIRST_LEVEL)
fprintf(file, "\n");
}
static void SaveUserLevelInfo()
{
- CreateUserLevelSet(getLoginName(), getLoginName(), getRealName(), 100, 1);
+ CreateUserLevelSet(getLoginName(), getLoginName(), getRealName(), 100);
}
char *getSetupValue(int type, void *value)