fixed another problem with leaving scores screen on Android platform
[rocksndiamonds.git] / src / screens.c
index 2b575392c2ef6d921c50f91393047e282bd63a6d..ee5035ce0320569f35a9fb27e510a0123da9636d 100644 (file)
@@ -4353,6 +4353,9 @@ static void DrawChooseTree(TreeInfo **ti_ptr)
   boolean restart_music = (game_status != game_status_last_screen &&
                           game_status_last_screen != GAME_MODE_SCOREINFO);
 
+  scores.continue_on_return = (game_status == GAME_MODE_SCORES &&
+                              game_status_last_screen == GAME_MODE_PLAYING);
+
   if (CheckFadeAll())
     fade_mask = REDRAW_ALL;
 
@@ -4362,7 +4365,11 @@ static void DrawChooseTree(TreeInfo **ti_ptr)
     {
       execSetupArtwork();
     }
-    else       // GAME_MODE_LEVELS
+    else if (game_status == GAME_MODE_SCORES && scores.continue_playing)
+    {
+      StartPlayingFromHallOfFame();
+    }
+    else
     {
       SetGameStatus(GAME_MODE_MAIN);
 
@@ -4806,11 +4813,11 @@ static void HandleChooseTree(int mx, int my, int dx, int dy, int button,
   }
 
 #if defined(PLATFORM_ANDROID)
-  // touching the screen anywhere continues playing the next level
-  if ((mx || my) && scores.continue_playing)
+  // directly continue when touching the screen after playing
+  if ((mx || my) && scores.continue_on_return)
   {
+    // ignore touch events until released
     mx = my = 0;
-    button = MB_MENU_CHOICE;
   }
 #endif
 
@@ -4901,15 +4908,17 @@ static void HandleChooseTree(int mx, int my, int dx, int dy, int button,
 
       node_cursor->cl_first = ti->cl_first;
       node_cursor->cl_cursor = ti->cl_cursor;
+
       *ti_ptr = node_cursor->node_group;
       DrawChooseTree(ti_ptr);
 
       return;
     }
   }
-  else if (dx == -1 && ti->node_parent)
+  else if ((dx == -1 || button == MB_MENU_CONTINUE) && ti->node_parent)
   {
-    FadeSetLeaveMenu();
+    if (game_status != GAME_MODE_SCORES)
+      FadeSetLeaveMenu();
 
     PlaySound(SND_MENU_ITEM_SELECTING);
 
@@ -4992,6 +5001,7 @@ static void HandleChooseTree(int mx, int my, int dx, int dy, int button,
 
        node_cursor->cl_first = ti->cl_first;
        node_cursor->cl_cursor = ti->cl_cursor;
+
        *ti_ptr = node_cursor->node_group;
        DrawChooseTree(ti_ptr);
       }
@@ -5010,6 +5020,7 @@ static void HandleChooseTree(int mx, int my, int dx, int dy, int button,
 
        node_cursor->cl_first = ti->cl_first;
        node_cursor->cl_cursor = ti->cl_cursor;
+
        *ti_ptr = node_cursor;
 
        if (ti->type == TREE_TYPE_LEVEL_DIR)
@@ -5303,13 +5314,15 @@ static void DrawHallOfFame_setScoreEntries(void)
   if (score_entry_current == NULL)
     score_entry_current = getFirstValidTreeInfoEntry(score_entries);
 
+  if (score_entries != NULL && scores.continue_playing)
+    setString(&score_entries->node_group->name, BACKLINK_TEXT_NEXT);
+
   // ("score_entries" and "score_entry_current" may be NULL here)
 }
 
 void DrawHallOfFame(int nr)
 {
   scores.last_level_nr = nr;
-  scores.continue_on_return = (game_status_last_screen == GAME_MODE_PLAYING);
 
   // (this is needed when called from GameEnd() after winning a game)
   KeyboardAutoRepeatOn();