mirror of https://github.com/OpenRCT2/OpenRCT2.git
Refactor paint_attached_ps
This commit is contained in:
parent
2aa0271222
commit
1f810375a8
|
@ -70,6 +70,7 @@ static const uint8 BoundBoxDebugColours[] = {
|
||||||
|
|
||||||
bool gPaintBoundingBoxes;
|
bool gPaintBoundingBoxes;
|
||||||
|
|
||||||
|
static void paint_attached_ps(rct_drawpixelinfo * dpi, paint_struct * ps, uint32 viewFlags);
|
||||||
static void paint_ps_image_with_bounding_boxes(rct_drawpixelinfo * dpi, paint_struct * ps, uint32 imageId, sint16 x, sint16 y);
|
static void paint_ps_image_with_bounding_boxes(rct_drawpixelinfo * dpi, paint_struct * ps, uint32 imageId, sint16 x, sint16 y);
|
||||||
static void paint_ps_image(rct_drawpixelinfo * dpi, paint_struct * ps, uint32 imageId, sint16 x, sint16 y);
|
static void paint_ps_image(rct_drawpixelinfo * dpi, paint_struct * ps, uint32 imageId, sint16 x, sint16 y);
|
||||||
static uint32 paint_ps_colourify_image(uint32 imageId, uint8 spriteType, uint32 viewFlags);
|
static uint32 paint_ps_colourify_image(uint32 imageId, uint8 spriteType, uint32 viewFlags);
|
||||||
|
@ -899,53 +900,9 @@ void sub_688217()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* rct2: 0x00688596
|
* rct2: 0x00688485
|
||||||
* Part of 0x688485
|
|
||||||
*/
|
*/
|
||||||
static void paint_attached_ps(paint_struct* ps, attached_paint_struct* attached_ps, rct_drawpixelinfo* dpi) {
|
void paint_quadrant_ps(rct_drawpixelinfo * dpi, paint_struct * ps, uint32 viewFlags)
|
||||||
for (; attached_ps; attached_ps = attached_ps->next) {
|
|
||||||
sint16 x = attached_ps->x + ps->x;
|
|
||||||
sint16 y = attached_ps->y + ps->y;
|
|
||||||
|
|
||||||
int image_id = attached_ps->image_id;
|
|
||||||
if (gCurrentViewportFlags & VIEWPORT_FLAG_SEETHROUGH_RIDES) {
|
|
||||||
if (ps->sprite_type == VIEWPORT_INTERACTION_ITEM_RIDE) {
|
|
||||||
if (image_id & 0x40000000) {
|
|
||||||
image_id &= 0x7FFFF;
|
|
||||||
image_id |= 0x41880000;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (gCurrentViewportFlags & VIEWPORT_FLAG_SEETHROUGH_SCENERY) {
|
|
||||||
if (ps->sprite_type == VIEWPORT_INTERACTION_ITEM_SCENERY) {
|
|
||||||
if (image_id & 0x40000000) {
|
|
||||||
image_id &= 0x7FFFF;
|
|
||||||
image_id |= 0x41880000;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (gCurrentViewportFlags & VIEWPORT_FLAG_SEETHROUGH_PATHS) {
|
|
||||||
if (ps->sprite_type == VIEWPORT_INTERACTION_ITEM_FOOTPATH) {
|
|
||||||
if (!(image_id & 0x40000000)) {
|
|
||||||
image_id &= 0x7FFFF;
|
|
||||||
image_id |= 0x41880000;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (attached_ps->flags & PAINT_STRUCT_FLAG_IS_MASKED) {
|
|
||||||
gfx_draw_sprite_raw_masked(dpi, x, y, image_id, attached_ps->colour_image_id);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
gfx_draw_sprite(dpi, image_id, x, y, ps->tertiary_colour);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* rct2: 0x00688485 */
|
|
||||||
void paint_quadrant_ps(rct_drawpixelinfo * dpi, paint_struct * ps, uint32 flags)
|
|
||||||
{
|
{
|
||||||
paint_struct* previous_ps = ps->next_quadrant_ps;
|
paint_struct* previous_ps = ps->next_quadrant_ps;
|
||||||
for (ps = ps->next_quadrant_ps; ps;) {
|
for (ps = ps->next_quadrant_ps; ps;) {
|
||||||
|
@ -953,16 +910,16 @@ void paint_quadrant_ps(rct_drawpixelinfo * dpi, paint_struct * ps, uint32 flags)
|
||||||
sint16 y = ps->y;
|
sint16 y = ps->y;
|
||||||
if (ps->sprite_type == VIEWPORT_INTERACTION_ITEM_SPRITE) {
|
if (ps->sprite_type == VIEWPORT_INTERACTION_ITEM_SPRITE) {
|
||||||
if (dpi->zoom_level >= 1) {
|
if (dpi->zoom_level >= 1) {
|
||||||
x &= 0xFFFE;
|
x = floor2(x, 2);
|
||||||
y &= 0xFFFE;
|
y = floor2(y, 2);
|
||||||
if (dpi->zoom_level >= 2) {
|
if (dpi->zoom_level >= 2) {
|
||||||
x &= 0xFFFC;
|
x = floor2(x, 4);
|
||||||
y &= 0xFFFC;
|
y = floor2(y, 4);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32 imageId = paint_ps_colourify_image(ps->image_id, ps->sprite_type, flags);
|
uint32 imageId = paint_ps_colourify_image(ps->image_id, ps->sprite_type, viewFlags);
|
||||||
if (gPaintBoundingBoxes && dpi->zoom_level == 0) {
|
if (gPaintBoundingBoxes && dpi->zoom_level == 0) {
|
||||||
paint_ps_image_with_bounding_boxes(dpi, ps, imageId, x, y);
|
paint_ps_image_with_bounding_boxes(dpi, ps, imageId, x, y);
|
||||||
} else {
|
} else {
|
||||||
|
@ -971,12 +928,32 @@ void paint_quadrant_ps(rct_drawpixelinfo * dpi, paint_struct * ps, uint32 flags)
|
||||||
|
|
||||||
if (ps->var_20 != 0) {
|
if (ps->var_20 != 0) {
|
||||||
ps = ps->var_20;
|
ps = ps->var_20;
|
||||||
continue;
|
} else {
|
||||||
|
paint_attached_ps(dpi, ps, viewFlags);
|
||||||
|
ps = previous_ps->next_quadrant_ps;
|
||||||
|
previous_ps = ps;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
paint_attached_ps(ps, ps->attached_ps, dpi);
|
/**
|
||||||
ps = previous_ps->next_quadrant_ps;
|
*
|
||||||
previous_ps = ps;
|
* rct2: 0x00688596
|
||||||
|
* Part of 0x688485
|
||||||
|
*/
|
||||||
|
static void paint_attached_ps(rct_drawpixelinfo * dpi, paint_struct * ps, uint32 viewFlags)
|
||||||
|
{
|
||||||
|
attached_paint_struct * attached_ps = ps->attached_ps;
|
||||||
|
for (; attached_ps; attached_ps = attached_ps->next) {
|
||||||
|
sint16 x = attached_ps->x + ps->x;
|
||||||
|
sint16 y = attached_ps->y + ps->y;
|
||||||
|
|
||||||
|
uint32 imageId = paint_ps_colourify_image(attached_ps->image_id, ps->sprite_type, viewFlags);
|
||||||
|
if (attached_ps->flags & PAINT_STRUCT_FLAG_IS_MASKED) {
|
||||||
|
gfx_draw_sprite_raw_masked(dpi, x, y, imageId, attached_ps->colour_image_id);
|
||||||
|
} else {
|
||||||
|
gfx_draw_sprite(dpi, imageId, x, y, ps->tertiary_colour);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue