1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-16 03:23:15 +01:00

Pass paint_session to more functions

This commit is contained in:
Ted John
2017-09-02 20:25:03 +01:00
parent 450029a29e
commit 46c2e52b5c
7 changed files with 42 additions and 45 deletions

View File

@@ -289,7 +289,7 @@ void lightfx_prepare_light_list()
gPaintSession.Unk140E9A8 = dpi;
painter_setup();
viewport_paint_setup();
paint_arrange_structs();
paint_session_arrange(gPaintSession);
sub_68862C();
// log_warning("[%i, %i]", dpi->x, dpi->y);
@@ -325,7 +325,7 @@ void lightfx_prepare_light_list()
// RCT2_GLOBAL(0x140E9A8, rct_drawpixelinfo*) = dpi;
// painter_setup();
// viewport_paint_setup();
// paint_arrange_structs();
// paint_session_arrange(gPaintSession);
// sub_68862C();
//}
}

View File

@@ -742,9 +742,13 @@ static void viewport_paint_column(rct_drawpixelinfo * dpi, uint32 viewFlags)
}
gfx_clear(dpi, colour);
}
paint_init(dpi);
paint_generate_structs(dpi);
paint_struct ps = paint_arrange_structs();
// Allocate a paint session
paint_session * session = &gPaintSession;
paint_session_init(session, dpi);
paint_session_generate(session);
paint_struct ps = paint_session_arrange(session);
paint_draw_structs(dpi, &ps, viewFlags);
if (gConfigGeneral.render_weather_gloom &&
@@ -754,8 +758,8 @@ static void viewport_paint_column(rct_drawpixelinfo * dpi, uint32 viewFlags)
viewport_paint_weather_gloom(dpi);
}
if (gPaintSession.PSStringHead != NULL) {
paint_draw_money_structs(dpi, gPaintSession.PSStringHead);
if (session->PSStringHead != NULL) {
paint_draw_money_structs(dpi, session->PSStringHead);
}
}
@@ -1370,9 +1374,13 @@ void get_map_coordinates_from_pos(sint32 screenX, sint32 screenY, sint32 flags,
dpi->zoom_level = _viewportDpi1.zoom_level;
dpi->x = _viewportDpi1.x;
dpi->width = 1;
paint_init(dpi);
paint_generate_structs(dpi);
paint_struct ps = paint_arrange_structs();
// Allocate a paint session
paint_session * session = &gPaintSession;
paint_session_init(session, dpi);
paint_session_generate(session);
paint_struct ps = paint_session_arrange(session);
sub_68862C(dpi, &ps);
}
if (viewport != NULL) *viewport = myviewport;

View File

@@ -45,7 +45,7 @@ const sint32 SEGMENTS_ALL = SEGMENT_B4 | SEGMENT_B8 | SEGMENT_BC | SEGMENT_C0 |
*
* rct2: 0x0068B35F
*/
void map_element_paint_setup(sint32 x, sint32 y)
void map_element_paint_setup(paint_session * session, sint32 x, sint32 y)
{
if (
x < gMapSizeUnits &&
@@ -55,8 +55,8 @@ void map_element_paint_setup(sint32 x, sint32 y)
) {
paint_util_set_segment_support_height(SEGMENTS_ALL, 0xFFFF, 0);
paint_util_force_set_general_support_height(-1, 0);
gPaintSession.Unk141E9DB = 0;
gPaintSession.Unk141E9DC = 0xFFFF;
session->Unk141E9DB = 0;
session->Unk141E9DC = 0xFFFF;
sub_68B3FB(x, y);
} else {

View File

@@ -21,6 +21,8 @@
#include "../../common.h"
#include "../../world/map.h"
typedef struct paint_session paint_session;
typedef enum edge_t
{
EDGE_NE = (1 << 0),
@@ -92,7 +94,7 @@ void paint_util_force_set_general_support_height(sint16 height, uint8 slope);
void paint_util_set_segment_support_height(sint32 segments, uint16 height, uint8 slope);
uint16 paint_util_rotate_segments(uint16 segments, uint8 rotation);
void map_element_paint_setup(sint32 x, sint32 y);
void map_element_paint_setup(paint_session * session, sint32 x, sint32 y);
void entrance_paint(uint8 direction, sint32 height, rct_map_element* map_element);
void banner_paint(uint8 direction, sint32 height, rct_map_element* map_element);

View File

@@ -63,7 +63,7 @@ static void paint_ps_image_with_bounding_boxes(rct_drawpixelinfo * dpi, paint_st
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 void paint_session_init(paint_session * session, rct_drawpixelinfo * dpi)
void paint_session_init(paint_session * session, rct_drawpixelinfo * dpi)
{
memset(session, 0, sizeof(paint_session));
session->Unk140E9A8 = dpi;
@@ -81,15 +81,6 @@ static void paint_session_init(paint_session * session, rct_drawpixelinfo * dpi)
session->WoodenSupportsPrependTo = NULL;
}
/**
*
* rct2: 0x0068615B
*/
void paint_init(rct_drawpixelinfo * dpi)
{
paint_session_init(&gPaintSession, dpi);
}
static void paint_session_add_ps_to_quadrant(paint_session * session, paint_struct * ps, sint32 positionHash)
{
uint32 paintQuadrantIndex = clamp(0, positionHash / 32, MAX_PAINT_QUADRANTS - 1);
@@ -308,7 +299,7 @@ paint_struct * sub_98196C(
ps->var_29 = 0;
ps->map_x = session->MapPosition.x;
ps->map_y = session->MapPosition.y;
ps->mapElement = gPaintSession.CurrentlyDrawnItem;
ps->mapElement = session->CurrentlyDrawnItem;
session->UnkF1AD28 = ps;
@@ -629,8 +620,9 @@ void paint_floating_money_effect(money32 amount, rct_string_id string_id, sint16
*
* rct2: 0x0068B6C2
*/
void paint_generate_structs(rct_drawpixelinfo * dpi)
void paint_session_generate(paint_session * session)
{
rct_drawpixelinfo * dpi = session->Unk140E9A8;
rct_xy16 mapTile = {
.x = dpi->x & 0xFFE0,
.y = (dpi->y - 16) & 0xFFE0
@@ -649,12 +641,12 @@ void paint_generate_structs(rct_drawpixelinfo * dpi)
mapTile.y &= 0xFFE0;
for (; num_vertical_quadrants > 0; --num_vertical_quadrants){
map_element_paint_setup(mapTile.x, mapTile.y);
map_element_paint_setup(session, mapTile.x, mapTile.y);
sprite_paint_setup(mapTile.x, mapTile.y);
sprite_paint_setup(mapTile.x - 32, mapTile.y + 32);
map_element_paint_setup(mapTile.x, mapTile.y + 32);
map_element_paint_setup(session, mapTile.x, mapTile.y + 32);
sprite_paint_setup(mapTile.x, mapTile.y + 32);
mapTile.x += 32;
@@ -671,12 +663,12 @@ void paint_generate_structs(rct_drawpixelinfo * dpi)
mapTile.y &= 0xFFE0;
for (; num_vertical_quadrants > 0; --num_vertical_quadrants){
map_element_paint_setup(mapTile.x, mapTile.y);
map_element_paint_setup(session, mapTile.x, mapTile.y);
sprite_paint_setup(mapTile.x, mapTile.y);
sprite_paint_setup(mapTile.x - 32, mapTile.y - 32);
map_element_paint_setup(mapTile.x - 32, mapTile.y);
map_element_paint_setup(session, mapTile.x - 32, mapTile.y);
sprite_paint_setup(mapTile.x - 32, mapTile.y);
mapTile.y += 32;
@@ -693,12 +685,12 @@ void paint_generate_structs(rct_drawpixelinfo * dpi)
mapTile.y &= 0xFFE0;
for (; num_vertical_quadrants > 0; --num_vertical_quadrants){
map_element_paint_setup(mapTile.x, mapTile.y);
map_element_paint_setup(session, mapTile.x, mapTile.y);
sprite_paint_setup(mapTile.x, mapTile.y);
sprite_paint_setup(mapTile.x + 32, mapTile.y - 32);
map_element_paint_setup(mapTile.x, mapTile.y - 32);
map_element_paint_setup(session, mapTile.x, mapTile.y - 32);
sprite_paint_setup(mapTile.x, mapTile.y - 32);
mapTile.x -= 32;
@@ -716,12 +708,12 @@ void paint_generate_structs(rct_drawpixelinfo * dpi)
mapTile.y &= 0xFFE0;
for (; num_vertical_quadrants > 0; --num_vertical_quadrants){
map_element_paint_setup(mapTile.x, mapTile.y);
map_element_paint_setup(session, mapTile.x, mapTile.y);
sprite_paint_setup(mapTile.x, mapTile.y);
sprite_paint_setup(mapTile.x + 32, mapTile.y + 32);
map_element_paint_setup(mapTile.x + 32, mapTile.y);
map_element_paint_setup(session, mapTile.x + 32, mapTile.y);
sprite_paint_setup(mapTile.x + 32, mapTile.y);
mapTile.y -= 32;
@@ -850,7 +842,7 @@ paint_struct * paint_arrange_structs_helper(paint_struct * ps_next, uint16 quadr
*
* rct2: 0x00688217
*/
static paint_struct paint_session_arrange_structs(paint_session * session)
paint_struct paint_session_arrange(paint_session * session)
{
paint_struct psHead = { 0 };
paint_struct * ps = &psHead;
@@ -878,11 +870,6 @@ static paint_struct paint_session_arrange_structs(paint_session * session)
return psHead;
}
paint_struct paint_arrange_structs()
{
return paint_session_arrange_structs(&gPaintSession);
}
/**
*
* rct2: 0x00688485

View File

@@ -226,9 +226,9 @@ bool paint_attach_to_previous_attach(uint32 image_id, uint16 x, uint16 y);
bool paint_attach_to_previous_ps(uint32 image_id, uint16 x, uint16 y);
void paint_floating_money_effect(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(rct_drawpixelinfo * dpi);
paint_struct paint_arrange_structs();
void paint_session_init(paint_session * session, rct_drawpixelinfo * dpi);
void paint_session_generate(paint_session * session);
paint_struct paint_session_arrange(paint_session * session);
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);

View File

@@ -2347,7 +2347,7 @@ static void sub_6CBCE2(
gCurrentViewportFlags = 0;
trackDirection &= 3;
paint_init(gPaintSession.Unk140E9A8);
paint_session_init(&gPaintSession, gPaintSession.Unk140E9A8);
ride = get_ride(rideIndex);
@@ -2450,7 +2450,7 @@ static void sub_6CBCE2(
gMapSize = preserveMapSize;
gMapSizeMaxXY = preserveMapSizeMaxXY;
paint_struct ps = paint_arrange_structs();
paint_struct ps = paint_session_arrange(&gPaintSession);
paint_draw_structs(gPaintSession.Unk140E9A8, &ps, gCurrentViewportFlags);
gCurrentViewportFlags = preserve_current_viewport_flags;