Refactor - Replaced magic number copies with main_bg_se_copy_rect() (#192)

This commit is contained in:
MeirGavish
2025-11-01 08:12:20 +02:00
committed by GitHub
parent 9dc0905c93
commit dfe6edad88
3 changed files with 24 additions and 26 deletions
+1 -1
View File
@@ -113,7 +113,7 @@ void main_bg_se_copy_rect_1_tile_vert(Rect se_rect, int direction);
* se_rect dimensions are in number of tiles. * se_rect dimensions are in number of tiles.
* x and y are the coordinates in number of tiles. * x and y are the coordinates in number of tiles.
*/ */
void main_bg_se_copy_rect(Rect se_rect, BG_POINT pos); void main_bg_se_copy_rect(Rect se_rect, BG_POINT dest_pos);
/* Copies a screen entry to a rect in the main background. /* Copies a screen entry to a rect in the main background.
* se_rect dimensions are in number of tiles. * se_rect dimensions are in number of tiles.
+21 -23
View File
@@ -381,7 +381,10 @@ static const Rect POP_MENU_ANIM_RECT = {9, 7, 24, 31 };
// This is because when popping, the target position is blank so we just animate // This is because when popping, the target position is blank so we just animate
// the whole rect so we don't have to track its position // the whole rect so we don't have to track its position
static const Rect SINGLE_BLIND_SELECT_RECT = {9, 7, 13, 32 }; static const Rect SINGLE_BLIND_SELECT_RECT = {9, 7, 13, 31 };
static const Rect BLIND_SKIP_BTN_GRAY_RECT = {0, 24, 4, 27 };
static const Rect BLIND_SKIP_BTN_PREANIM_DEST_RECT = {9,29, 19, 31 };
// preanim - pre-animation rects for before the pop-up animation
static const Rect HAND_BG_RECT_SELECTING = {9, 11, 24, 17 }; static const Rect HAND_BG_RECT_SELECTING = {9, 11, 24, 17 };
// TODO: Currently unused, remove? // TODO: Currently unused, remove?
@@ -835,39 +838,34 @@ void change_background(int id)
for (int i = 0; i < BLIND_TYPE_MAX; i++) for (int i = 0; i < BLIND_TYPE_MAX; i++)
{ {
if (blinds[i] != BLIND_STATE_CURRENT && Rect curr_blind_rect = SINGLE_BLIND_SELECT_RECT;
(i == BLIND_TYPE_SMALL || i == BLIND_TYPE_BIG)) // Make the skip button gray
// There's no gap between them
curr_blind_rect.left += i * rect_width(&SINGLE_BLIND_SELECT_RECT);
curr_blind_rect.right += i * rect_width(&SINGLE_BLIND_SELECT_RECT);
if (blinds[i] != BLIND_STATE_CURRENT && (i == BLIND_TYPE_SMALL || i == BLIND_TYPE_BIG)) // Make the skip button gray
{ {
// TODO: Switch all the copies here to use main_bg_se_copy_rect() BG_POINT skip_blind_btn_pos_dest = { BLIND_SKIP_BTN_PREANIM_DEST_RECT.left, BLIND_SKIP_BTN_PREANIM_DEST_RECT.top };
// Note, this is difficult as the tiles to copy are not aligned. skip_blind_btn_pos_dest.x = curr_blind_rect.left;
int x_from = 0;
int y_from = 24 + (i * 4);
int x_to = 9 + (i * 5); Rect skip_blind_btn_rect_src = BLIND_SKIP_BTN_GRAY_RECT;
int y_to = 29; skip_blind_btn_rect_src.top += i * rect_height(&BLIND_SKIP_BTN_GRAY_RECT);
skip_blind_btn_rect_src.bottom += i * rect_height(&BLIND_SKIP_BTN_GRAY_RECT);
for (int j = 0; j < BLIND_TYPE_MAX; j++) main_bg_se_copy_rect(skip_blind_btn_rect_src, skip_blind_btn_pos_dest);
{
memcpy16(&se_mem[MAIN_BG_SBB][x_to + 32 * y_to], &se_mem[MAIN_BG_SBB][x_from + 32 * y_from], 5);
y_from++;
y_to++;
}
} }
switch(blinds[i]) { switch(blinds[i]) {
case BLIND_STATE_CURRENT: // Raise the blind panel up a bit case BLIND_STATE_CURRENT: // Raise the blind panel up a bit
{ {
// TODO: Replace copies with main_bg_se_copy_rect() of named rects
int x_from = 0; int x_from = 0;
int y_from = 27; int y_from = 27;
Rect blind_rect = SINGLE_BLIND_SELECT_RECT; main_bg_se_copy_rect_1_tile_vert(curr_blind_rect, SE_UP);
// There's no gap between them int x_to = curr_blind_rect.left;
blind_rect.left += i * rect_width(&SINGLE_BLIND_SELECT_RECT);
blind_rect.right += i * rect_width(&SINGLE_BLIND_SELECT_RECT);
main_bg_se_copy_rect_1_tile_vert(blind_rect, SE_UP);
int x_to = blind_rect.left;
int y_to = 31; int y_to = 31;
if (i == BLIND_TYPE_BIG) if (i == BLIND_TYPE_BIG)
@@ -893,7 +891,7 @@ void change_background(int id)
int x_from = 0; int x_from = 0;
int y_from = 20; int y_from = 20;
int x_to = 10 + (i * 5); int x_to = 10 + (i * rect_width(&SINGLE_BLIND_SELECT_RECT));
int y_to = 20; int y_to = 20;
memcpy16(&se_mem[MAIN_BG_SBB][x_to + 32 * y_to], &se_mem[MAIN_BG_SBB][x_from + 32 * y_from], 3); memcpy16(&se_mem[MAIN_BG_SBB][x_to + 32 * y_to], &se_mem[MAIN_BG_SBB][x_from + 32 * y_from], 3);
+2 -2
View File
@@ -112,7 +112,7 @@ void main_bg_se_move_rect_1_tile_vert(Rect se_rect, int direction)
main_bg_se_copy_or_move_rect_1_tile_vert(se_rect, direction, true); main_bg_se_copy_or_move_rect_1_tile_vert(se_rect, direction, true);
} }
void main_bg_se_copy_rect(Rect se_rect, BG_POINT pos) void main_bg_se_copy_rect(Rect se_rect, BG_POINT dest_pos)
{ {
if (se_rect.left > se_rect.right || se_rect.top > se_rect.bottom) if (se_rect.left > se_rect.right || se_rect.top > se_rect.bottom)
return; return;
@@ -136,7 +136,7 @@ void main_bg_se_copy_rect(Rect se_rect, BG_POINT pos)
// Copy the tilemap to the new rect position // Copy the tilemap to the new rect position
for (int sy = 0; sy < height; sy++) for (int sy = 0; sy < height; sy++)
{ {
memcpy16(&se_mat[MAIN_BG_SBB][pos.y + sy][pos.x], memcpy16(&se_mat[MAIN_BG_SBB][dest_pos.y + sy][dest_pos.x],
&tile_map[sy][0], &tile_map[sy][0],
width); width);
} }