From 941607053a00d745733af50207c35e3bc099ea49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Janiszewski?= Date: Tue, 25 Jul 2017 23:24:25 +0200 Subject: [PATCH] Expose paint_arrange_structs_helper for testing --- src/openrct2/paint/paint.c | 38 +++++++++++++++++++------------------- src/openrct2/paint/paint.h | 12 +++++++++++- 2 files changed, 30 insertions(+), 20 deletions(-) diff --git a/src/openrct2/paint/paint.c b/src/openrct2/paint/paint.c index 79fa8fb3be..5d42bf1d06 100644 --- a/src/openrct2/paint/paint.c +++ b/src/openrct2/paint/paint.c @@ -734,7 +734,7 @@ void paint_generate_structs(rct_drawpixelinfo * dpi) } } -static paint_struct * paint_arrange_structs_helper(paint_struct * ps_next, uint16 quadrantIndex, uint8 flag) +paint_struct * paint_arrange_structs_helper(paint_struct * ps_next, uint16 quadrantIndex, uint8 flag) { paint_struct * ps; paint_struct * ps_temp; @@ -777,16 +777,7 @@ static paint_struct * paint_arrange_structs_helper(paint_struct * ps_next, uint1 ps_next->quadrant_flags &= ~PAINT_QUADRANT_FLAG_IDENTICAL; ps_temp = ps; - typedef struct bound_box { - uint16 x; - uint16 y; - uint16 z; - uint16 x_end; - uint16 y_end; - uint16 z_end; - } bound_box; - - bound_box initialBBox = { + const paint_struct_bound_box initialBBox = { .x = ps_next->bound_box_x, .y = ps_next->bound_box_y, .z = ps_next->bound_box_z, @@ -803,26 +794,35 @@ static paint_struct * paint_arrange_structs_helper(paint_struct * ps_next, uint1 if (ps_next->quadrant_flags & PAINT_QUADRANT_FLAG_BIGGER) break; if (!(ps_next->quadrant_flags & PAINT_QUADRANT_FLAG_NEXT)) continue; + const paint_struct_bound_box currentBBox = { + .x = ps_next->bound_box_x, + .y = ps_next->bound_box_y, + .z = ps_next->bound_box_z, + .x_end = ps_next->bound_box_x_end, + .y_end = ps_next->bound_box_y_end, + .z_end = ps_next->bound_box_z_end + }; + sint32 yes = 0; switch (rotation) { case 0: - if (initialBBox.z_end >= ps_next->bound_box_z && initialBBox.y_end >= ps_next->bound_box_y && initialBBox.x_end >= ps_next->bound_box_x - && !(initialBBox.z < ps_next->bound_box_z_end && initialBBox.y < ps_next->bound_box_y_end && initialBBox.x < ps_next->bound_box_x_end)) + if (initialBBox.z_end >= currentBBox.z && initialBBox.y_end >= currentBBox.y && initialBBox.x_end >= currentBBox.x + && !(initialBBox.z < currentBBox.z_end && initialBBox.y < currentBBox.y_end && initialBBox.x < currentBBox.x_end)) yes = 1; break; case 1: - if (initialBBox.z_end >= ps_next->bound_box_z && initialBBox.y_end >= ps_next->bound_box_y && initialBBox.x_end < ps_next->bound_box_x - && !(initialBBox.z < ps_next->bound_box_z_end && initialBBox.y < ps_next->bound_box_y_end && initialBBox.x >= ps_next->bound_box_x_end)) + if (initialBBox.z_end >= currentBBox.z && initialBBox.y_end >= currentBBox.y && initialBBox.x_end < currentBBox.x + && !(initialBBox.z < currentBBox.z_end && initialBBox.y < currentBBox.y_end && initialBBox.x >= currentBBox.x_end)) yes = 1; break; case 2: - if (initialBBox.z_end >= ps_next->bound_box_z && initialBBox.y_end < ps_next->bound_box_y && initialBBox.x_end < ps_next->bound_box_x - && !(initialBBox.z < ps_next->bound_box_z_end && initialBBox.y >= ps_next->bound_box_y_end && initialBBox.x >= ps_next->bound_box_x_end)) + if (initialBBox.z_end >= currentBBox.z && initialBBox.y_end < currentBBox.y && initialBBox.x_end < currentBBox.x + && !(initialBBox.z < currentBBox.z_end && initialBBox.y >= currentBBox.y_end && initialBBox.x >= currentBBox.x_end)) yes = 1; break; case 3: - if (initialBBox.z_end >= ps_next->bound_box_z && initialBBox.y_end < ps_next->bound_box_y && initialBBox.x_end >= ps_next->bound_box_x - && !(initialBBox.z < ps_next->bound_box_z_end && initialBBox.y >= ps_next->bound_box_y_end && initialBBox.x < ps_next->bound_box_x_end)) + if (initialBBox.z_end >= currentBBox.z && initialBBox.y_end < currentBBox.y && initialBBox.x_end >= currentBBox.x + && !(initialBBox.z < currentBBox.z_end && initialBBox.y >= currentBBox.y_end && initialBBox.x < currentBBox.x_end)) yes = 1; break; } diff --git a/src/openrct2/paint/paint.h b/src/openrct2/paint/paint.h index 674059954e..7fa07cc138 100644 --- a/src/openrct2/paint/paint.h +++ b/src/openrct2/paint/paint.h @@ -107,7 +107,7 @@ assert_struct_size(paint_string_struct, 0x1e); #endif #pragma pack(pop) -union paint_entry{ +union paint_entry { paint_struct basic; attached_paint_struct attached; paint_string_struct string; @@ -120,6 +120,15 @@ typedef struct sprite_bb { rct_xyz16 bb_size; } sprite_bb; +typedef struct paint_struct_bound_box { + uint16 x; + uint16 y; + uint16 z; + uint16 x_end; + uint16 y_end; + uint16 z_end; +} paint_struct_bound_box; + enum PAINT_STRUCT_FLAGS { PAINT_STRUCT_FLAG_IS_MASKED = (1 << 0) }; @@ -220,6 +229,7 @@ void paint_floating_money_effect(money32 amount, rct_string_id string_id, sint16 void paint_init(rct_drawpixelinfo * dpi); void paint_generate_structs(rct_drawpixelinfo * dpi); paint_struct paint_arrange_structs(); +paint_struct * paint_arrange_structs_helper(paint_struct * ps_next, uint16 quadrantIndex, uint8 flag); void paint_draw_structs(rct_drawpixelinfo * dpi, paint_struct * ps, uint32 viewFlags); void paint_draw_money_structs(rct_drawpixelinfo * dpi, paint_string_struct * ps);