cleanup of code for key arrangement on game panel
[rocksndiamonds.git] / src / game.c
index c4819c1190a382a0d52d8a7962cc4dd34415275e..edf7f6ab5066ef7af0900bcdcac720f386b7e4af 100644 (file)
@@ -2326,24 +2326,44 @@ static void UpdateGameControlValues(void)
       stored_player[player_nr].num_white_keys;
   }
 
-  // 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
+  // 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;
-    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)
+    // skip check if key is not in the player's inventory
+    if (gpc->value == EL_EMPTY)
+      continue;
+
+    // check if keys should be arranged on panel from left to right
+    if (pos->style == STYLE_LEFTMOST_POSITION)
+    {
+      // check previous key positions (left from current key)
+      for (k = 0; k < i; k++)
+      {
+       int nr_new = GAME_PANEL_KEY_1 + k;
+
+       if (game_panel_controls[nr_new].value == EL_EMPTY)
+       {
+         game_panel_controls[nr_new].value = gpc->value;
+         gpc->value = EL_EMPTY;
+
+         break;
+       }
+      }
+    }
+
+    // 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
       {
@@ -2354,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;
          }