Change selection grid to maintain relative horizontal position when switching rows (#329)

* Change selection grid to maintain relative horizontal position when switching rows

* clang-format

* Fixed joker selling index error

* Protect against division by 0 and removed redundant fixed point conversions.
This commit is contained in:
MeirGavish
2025-12-22 08:00:08 +02:00
committed by GitHub
parent 955a0942f1
commit f76c25614c
2 changed files with 14 additions and 7 deletions
+5 -1
View File
@@ -3994,9 +3994,13 @@ static void jokers_sel_row_on_key_transit(SelectionGrid* selection_grid, Selecti
if (key_hit(SELL_KEY))
{
game_sell_joker(selection->x);
int sold_joker_idx = selection->x;
// Move the selection away from the jokers so it doesn't point to an invalid place
// Do this before selling the joker so valid row sizes are used
selection_grid_move_selection_vert(selection_grid, SCREEN_DOWN);
game_sell_joker(sold_joker_idx);
}
}
+9 -6
View File
@@ -57,12 +57,15 @@ void selection_grid_move_selection_vert(SelectionGrid* selection_grid, int direc
if (new_row_size <= 0)
return;
if (selection.x >= new_row_size)
{
// TODO: Maintain relative horizontal position
// Clip selection to row size
new_selection.x = new_row_size - 1;
}
int old_row_size = selection_grid->rows[selection.y].get_size();
// Branchless set to 1 if 0 to avoid division by 0
old_row_size += (old_row_size == 0);
// Maintain relative horizontal position
// The operations are equivalent to fixed point if all the numbers were converted
new_selection.x = fx2int(selection.x * ((int2fx(new_row_size) / old_row_size)));
if (selection.y >= 0 && selection.y < selection_grid->num_rows)
{
selection_grid->rows[selection.y]