re-enabled storing selection from "last played level set" menu
[rocksndiamonds.git] / src / libgame / setup.c
index 1895911f1bdfe399c9f10eeab514dcff4732d88e..32ae11215a1a87626d9acdac70e99d6ea62cafaf 100644 (file)
@@ -4546,7 +4546,6 @@ static void InitLastPlayedLevels_ParentNode(void)
 void UpdateLastPlayedLevels_TreeInfo(void)
 {
   char **last_level_series = setup.level_setup.last_level_series;
-  boolean reset_leveldir_current = FALSE;
   LevelDirTree *leveldir_last;
   TreeInfo **node_new = NULL;
   int i;
@@ -4556,10 +4555,6 @@ void UpdateLastPlayedLevels_TreeInfo(void)
 
   InitLastPlayedLevels_ParentNode();
 
-  // check if current level set is from "last played" sub-tree to be rebuilt
-  reset_leveldir_current = strEqual(leveldir_current->node_parent->identifier,
-                                   TOKEN_STR_LAST_LEVEL_SERIES);
-
   leveldir_last = getTreeInfoFromIdentifierExt(leveldir_first,
                                               TOKEN_STR_LAST_LEVEL_SERIES,
                                               TREE_NODE_TYPE_GROUP);
@@ -4593,10 +4588,6 @@ void UpdateLastPlayedLevels_TreeInfo(void)
 
     node_new = &((*node_new)->next);
   }
-
-  if (reset_leveldir_current)
-    leveldir_current = getTreeInfoFromIdentifier(leveldir_first,
-                                                 last_level_series[0]);
 }
 
 static void UpdateLastPlayedLevels_List(void)
@@ -4618,6 +4609,35 @@ static void UpdateLastPlayedLevels_List(void)
   setString(&last_level_series[0], leveldir_current->identifier);
 }
 
+static TreeInfo *StoreOrRestoreLastPlayedLevels(TreeInfo *node, boolean store)
+{
+  static char *identifier = NULL;
+
+  if (store)
+  {
+    setString(&identifier, (node && node->is_copy ? node->identifier : NULL));
+
+    return NULL;       // not used
+  }
+  else
+  {
+    TreeInfo *node_new = getTreeInfoFromIdentifierExt(leveldir_first,
+                                                     identifier,
+                                                     TREE_NODE_TYPE_COPY);
+    return (node_new != NULL ? node_new : node);
+  }
+}
+
+void StoreLastPlayedLevels(TreeInfo *node)
+{
+  StoreOrRestoreLastPlayedLevels(node, TRUE);
+}
+
+void RestoreLastPlayedLevels(TreeInfo **node)
+{
+  *node = StoreOrRestoreLastPlayedLevels(*node, FALSE);
+}
+
 void LoadLevelSetup_LastSeries(void)
 {
   // --------------------------------------------------------------------------