cleanup of code for key arrangement on game panel
authorHolger Schemel <info@artsoft.org>
Thu, 17 Dec 2020 16:40:18 +0000 (17:40 +0100)
committerHolger Schemel <info@artsoft.org>
Mon, 21 Dec 2020 22:53:06 +0000 (23:53 +0100)
src/game.c

index 8de889ac5cf4757c8433e4b3ec10ce8a20b76bbb..edf7f6ab5066ef7af0900bcdcac720f386b7e4af 100644 (file)
@@ -2326,52 +2326,44 @@ static void UpdateGameControlValues(void)
       stored_player[player_nr].num_white_keys;
   }
 
-  // move keys to leftmost position in game panel, if defined by style settings
+  // re-arrange keys on game panel, if needed or if defined by style settings
   for (i = 0; i < MAX_NUM_KEYS + 1; i++)       // all normal keys + white key
   {
     int nr = GAME_PANEL_KEY_1 + i;
     struct GamePanelControlInfo *gpc = &game_panel_controls[nr];
     struct TextPosInfo *pos = gpc->pos;
 
+    // skip check if key is not in the player's inventory
     if (gpc->value == EL_EMPTY)
       continue;
 
-    if (pos->style != STYLE_LEFTMOST_POSITION)
-      continue;
-
-    // check previous key positions (left from current key)
-    for (k = 0; k < i; k++)
+    // check if keys should be arranged on panel from left to right
+    if (pos->style == STYLE_LEFTMOST_POSITION)
     {
-      int nr_new = GAME_PANEL_KEY_1 + k;
-
-      if (game_panel_controls[nr_new].value == EL_EMPTY)
+      // check previous key positions (left from current key)
+      for (k = 0; k < i; k++)
       {
-       game_panel_controls[nr_new].value = gpc->value;
-       gpc->value = EL_EMPTY;
+       int nr_new = GAME_PANEL_KEY_1 + k;
 
-       break;
+       if (game_panel_controls[nr_new].value == EL_EMPTY)
+       {
+         game_panel_controls[nr_new].value = gpc->value;
+         gpc->value = EL_EMPTY;
+
+         break;
+       }
       }
     }
-  }
-
-  // try to display as many collected keys as possible in the default game panel
-  for (i = STD_NUM_KEYS; i < MAX_NUM_KEYS + 1; i++)    // EMC keys + white key
-  {
-    int nr = GAME_PANEL_KEY_1 + i;
-    int emc_key = get_key_element_from_nr(i);
-    int element = (i < MAX_NUM_KEYS ? emc_key : EL_DC_KEY_WHITE);
-    struct GamePanelControlInfo *gpc = &game_panel_controls[nr];
-    struct TextPosInfo *pos = gpc->pos;
 
-    // check if panel position is undefined for a certain EMC key or white key
-    if (gpc->value != EL_EMPTY && pos->x == -1 && pos->y == -1)
+    // check if "undefined" keys can be placed at some other position
+    if (pos->x == -1 && pos->y == -1)
     {
       int nr_new = GAME_PANEL_KEY_1 + i % STD_NUM_KEYS;
 
       // 1st try: display key at the same position as normal or EM keys
       if (game_panel_controls[nr_new].value == EL_EMPTY)
       {
-       game_panel_controls[nr_new].value = element;
+       game_panel_controls[nr_new].value = gpc->value;
       }
       else
       {
@@ -2382,7 +2374,7 @@ static void UpdateGameControlValues(void)
 
          if (game_panel_controls[nr_new].value == EL_EMPTY)
          {
-           game_panel_controls[nr_new].value = element;
+           game_panel_controls[nr_new].value = gpc->value;
 
            break;
          }