mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-27 16:54:52 +01:00
Refactor paint_arrange_structs
This commit is contained in:
@@ -52,7 +52,6 @@ uint8 gSavedViewZoom;
|
||||
uint8 gSavedViewRotation;
|
||||
|
||||
#ifdef NO_RCT2
|
||||
paint_entry *unk_EE7884;
|
||||
paint_entry *gNextFreePaintStruct;
|
||||
uint8 gCurrentRotation;
|
||||
uint32 gCurrentViewportFlags = 0;
|
||||
@@ -748,9 +747,9 @@ static void viewport_paint_column(rct_drawpixelinfo * dpi, uint32 viewFlags)
|
||||
gfx_clear(dpi, colour);
|
||||
}
|
||||
paint_init(dpi);
|
||||
paint_generate_structs();
|
||||
paint_arrange_structs();
|
||||
paint_draw_structs(dpi, &unk_EE7884->basic, viewFlags);
|
||||
paint_generate_structs(dpi);
|
||||
paint_struct ps = paint_arrange_structs();
|
||||
paint_draw_structs(dpi, &ps, viewFlags);
|
||||
|
||||
if (gConfigGeneral.render_weather_gloom &&
|
||||
!gTrackDesignSaveMode &&
|
||||
@@ -1323,15 +1322,11 @@ static bool sub_679023(rct_drawpixelinfo *dpi, int imageId, int x, int y)
|
||||
*
|
||||
* rct2: 0x0068862C
|
||||
*/
|
||||
static void sub_68862C()
|
||||
static void sub_68862C(rct_drawpixelinfo * dpi, paint_struct * ps)
|
||||
{
|
||||
rct_drawpixelinfo *dpi = unk_140E9A8;
|
||||
paint_struct *ps = &unk_EE7884->basic, *old_ps, *next_ps;
|
||||
|
||||
while ((ps = ps->next_quadrant_ps) != NULL) {
|
||||
old_ps = ps;
|
||||
|
||||
next_ps = ps;
|
||||
paint_struct * old_ps = ps;
|
||||
paint_struct * next_ps = ps;
|
||||
while (next_ps != NULL) {
|
||||
ps = next_ps;
|
||||
if (sub_679023(dpi, ps->image_id, ps->x, ps->y))
|
||||
@@ -1395,9 +1390,9 @@ void get_map_coordinates_from_pos(int screenX, int screenY, int flags, sint16 *x
|
||||
dpi->x = _viewportDpi1.x;
|
||||
dpi->width = 1;
|
||||
paint_init(dpi);
|
||||
paint_generate_structs();
|
||||
paint_arrange_structs();
|
||||
sub_68862C();
|
||||
paint_generate_structs(dpi);
|
||||
paint_struct ps = paint_arrange_structs();
|
||||
sub_68862C(dpi, &ps);
|
||||
}
|
||||
if (viewport != NULL) *viewport = myviewport;
|
||||
}
|
||||
|
||||
@@ -105,12 +105,10 @@ extern uint8 gSavedViewZoom;
|
||||
extern uint8 gSavedViewRotation;
|
||||
|
||||
#ifdef NO_RCT2
|
||||
extern paint_entry *unk_EE7884;
|
||||
extern paint_entry *gNextFreePaintStruct;
|
||||
extern uint8 gCurrentRotation;
|
||||
extern uint32 gCurrentViewportFlags;
|
||||
#else
|
||||
#define unk_EE7884 RCT2_GLOBAL(0x00EE7884, paint_entry*)
|
||||
#define gNextFreePaintStruct RCT2_GLOBAL(0x00EE7888, paint_entry*)
|
||||
#define gCurrentRotation RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_ROTATION, uint8)
|
||||
#define gCurrentViewportFlags RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_VIEWPORT_FLAGS, uint32)
|
||||
|
||||
@@ -650,10 +650,8 @@ void sub_685EBC(money32 amount, rct_string_id string_id, sint16 y, sint16 z, sin
|
||||
*
|
||||
* rct2: 0x0068B6C2
|
||||
*/
|
||||
void paint_generate_structs()
|
||||
void paint_generate_structs(rct_drawpixelinfo * dpi)
|
||||
{
|
||||
rct_drawpixelinfo* dpi = unk_140E9A8;
|
||||
|
||||
rct_xy16 mapTile = {
|
||||
.x = dpi->x & 0xFFE0,
|
||||
.y = (dpi->y - 16) & 0xFFE0
|
||||
@@ -757,11 +755,10 @@ void paint_generate_structs()
|
||||
}
|
||||
}
|
||||
|
||||
static void paint_arrange_structs_helper(uint16 ax, uint8 flag)
|
||||
static void paint_arrange_structs_helper(paint_struct * ps_next, uint16 ax, uint8 flag)
|
||||
{
|
||||
paint_struct *ps, *ps_temp;
|
||||
paint_struct *ps_next = &unk_EE7884->basic;
|
||||
|
||||
paint_struct * ps;
|
||||
paint_struct * ps_temp;
|
||||
do {
|
||||
ps = ps_next;
|
||||
ps_next = ps_next->next_quadrant_ps;
|
||||
@@ -769,7 +766,6 @@ static void paint_arrange_structs_helper(uint16 ax, uint8 flag)
|
||||
} while (ax > ps_next->var_18);
|
||||
|
||||
ps_temp = ps;
|
||||
|
||||
do {
|
||||
ps = ps->next_quadrant_ps;
|
||||
if (ps == NULL) break;
|
||||
@@ -784,7 +780,6 @@ static void paint_arrange_structs_helper(uint16 ax, uint8 flag)
|
||||
ps->var_1B = flag | (1 << 0);
|
||||
}
|
||||
} while (ps->var_18 <= ax + 1);
|
||||
|
||||
ps = ps_temp;
|
||||
|
||||
uint8 rotation = get_current_rotation();
|
||||
@@ -867,10 +862,10 @@ static void paint_arrange_structs_helper(uint16 ax, uint8 flag)
|
||||
*
|
||||
* rct2: 0x00688217
|
||||
*/
|
||||
void paint_arrange_structs()
|
||||
paint_struct paint_arrange_structs()
|
||||
{
|
||||
unk_EE7884 = gNextFreePaintStruct++;
|
||||
paint_struct * ps = &unk_EE7884->basic;
|
||||
paint_struct psHead = { 0 };
|
||||
paint_struct * ps = &psHead;
|
||||
ps->next_quadrant_ps = NULL;
|
||||
uint32 edi = _F1AD0C;
|
||||
if (edi != UINT32_MAX) {
|
||||
@@ -885,12 +880,13 @@ void paint_arrange_structs()
|
||||
}
|
||||
} while (++edi <= _F1AD10);
|
||||
|
||||
paint_arrange_structs_helper(_F1AD0C & 0xFFFF, 1 << 1);
|
||||
paint_arrange_structs_helper(&psHead, _F1AD0C & 0xFFFF, 1 << 1);
|
||||
uint32 eax = _F1AD0C;
|
||||
while (++eax < _F1AD10) {
|
||||
paint_arrange_structs_helper(eax & 0xFFFF, 0);
|
||||
paint_arrange_structs_helper(&psHead, eax & 0xFFFF, 0);
|
||||
}
|
||||
}
|
||||
return psHead;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -169,8 +169,8 @@ bool paint_attach_to_previous_ps(uint32 image_id, uint16 x, uint16 y);
|
||||
void sub_685EBC(money32 amount, rct_string_id string_id, sint16 y, sint16 z, sint8 y_offsets[], sint16 offset_x, uint32 rotation);
|
||||
|
||||
void paint_init(rct_drawpixelinfo * dpi);
|
||||
void paint_generate_structs();
|
||||
void paint_arrange_structs();
|
||||
void paint_generate_structs(rct_drawpixelinfo * dpi);
|
||||
paint_struct paint_arrange_structs();
|
||||
void paint_draw_structs(rct_drawpixelinfo * dpi, paint_struct * ps, uint32 viewFlags);
|
||||
void paint_draw_money_structs(rct_drawpixelinfo * dpi, paint_string_struct * ps);
|
||||
|
||||
|
||||
@@ -2412,8 +2412,8 @@ static void sub_6CBCE2(
|
||||
gMapSize = preserveMapSize;
|
||||
gMapSizeMaxXY = preserveMapSizeMaxXY;
|
||||
|
||||
paint_arrange_structs();
|
||||
paint_draw_structs(unk_140E9A8, &unk_EE7884->basic, gCurrentViewportFlags);
|
||||
paint_struct ps = paint_arrange_structs();
|
||||
paint_draw_structs(unk_140E9A8, &ps, gCurrentViewportFlags);
|
||||
|
||||
gCurrentViewportFlags = preserve_current_viewport_flags;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user