added request to create empty level set for newly created users
[rocksndiamonds.git] / src / screens.c
index e5741bc01bd5bf81836133131ad40b71eba995ce..a0c1805e3e4d611f4d9e7cf79d007be823d67543 100644 (file)
@@ -4102,6 +4102,7 @@ static void setTypeNameValues(char *name, struct TextPosInfo *pos,
 {
   boolean reset_setup = strEqual(name, "");
   boolean remove_user = strEqual(name, EMPTY_PLAYER_NAME);
+  boolean create_user = strEqual(type_name_last, EMPTY_PLAYER_NAME);
 
   if (!changed)
     strcpy(name, type_name_last);
@@ -4128,10 +4129,15 @@ static void setTypeNameValues(char *name, struct TextPosInfo *pos,
     // temporarily change active user to edited user
     user.nr = type_name_nr;
 
-    // load setup of edited user
-    LoadSetup();
+    // load setup of edited user (unless creating user with current setup)
+    if (!create_user ||
+       !Request("Use current setup values for the new player?", REQ_ASK))
+      LoadSetup();
   }
 
+  char *setup_filename = getSetupFilename();
+  boolean setup_exists = fileExists(setup_filename);
+
   // change name of edited user in setup structure
   strcpy(setup.player_name, name);
 
@@ -4145,7 +4151,7 @@ static void setTypeNameValues(char *name, struct TextPosInfo *pos,
       if (Request("Reset setup values for this player?", REQ_ASK))
       {
        // remove setup config file
-       unlink(getSetupFilename());
+       unlink(setup_filename);
 
        // set player name to default player name
        LoadSetup();
@@ -4154,8 +4160,6 @@ static void setTypeNameValues(char *name, struct TextPosInfo *pos,
        strcpy(name, setup.player_name);
 
        setTypeNameValues_Name(name, pos);
-
-       Request("Setup values reset to default values!", REQ_CONFIRM);
       }
     }
     else if (remove_user && type_name_nr != 0)
@@ -4167,20 +4171,52 @@ static void setTypeNameValues(char *name, struct TextPosInfo *pos,
          getStringCat3WithSeparator(user_dir, "REMOVED",
                                     getCurrentTimestamp(), ".");
 
-       if (rename(user_dir, user_dir_removed) == 0)
-         Request("Player settings and tapes removed!", REQ_CONFIRM);
-       else
+       if (rename(user_dir, user_dir_removed) != 0)
          Request("Removing settings and tapes failed!", REQ_CONFIRM);
 
        checked_free(user_dir_removed);
       }
     }
+    else if (create_user && type_name_nr != 0 && !setup_exists)
+    {
+      if (Request("Create empty level set for the new player?", REQ_ASK))
+      {
+       char *levelset_subdir = getNewUserLevelSubdir();
+
+       if (CreateUserLevelSet(levelset_subdir, name, name, 100, FALSE))
+       {
+         AddUserLevelSetToLevelInfo(levelset_subdir);
+
+         LevelDirTree *leveldir_current_last = leveldir_current;
+
+         leveldir_current = getTreeInfoFromIdentifier(leveldir_first,
+                                                      levelset_subdir);
+
+         // set level number of newly created level set to default value
+         LoadLevelSetup_SeriesInfo();
+
+         // set newly created level set as current level set for new user
+         SaveLevelSetup_LastSeries();
+         SaveLevelSetup_SeriesInfo();
+
+         leveldir_current = leveldir_current_last;
+       }
+       else
+       {
+         Request("Creating new level set failed!", REQ_CONFIRM);
+       }
+      }
+    }
 
     // restore currently active user
     user.nr = last_user_nr;
 
     // restore setup of currently active user
     LoadSetup();
+
+    // restore last level set of currently active user
+    LoadLevelSetup_LastSeries();
+    LoadLevelSetup_SeriesInfo();
   }
 }