mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-16 11:33:03 +01:00
refactor track_design_draw_preview
This commit is contained in:
@@ -22,7 +22,6 @@ static rct_track_td6 *track_design_open_from_buffer(uint8 *src, size_t srcLength
|
||||
|
||||
rct_map_element **gTrackSavedMapElements = (rct_map_element**)0x00F63674;
|
||||
rct_track_td6 *gActiveTrackDesign;
|
||||
money32 gTrackDesignCost;
|
||||
uint8 gTrackDesignPlaceFlags;
|
||||
bool gTrackDesignSceneryToggle;
|
||||
rct_xyz16 gTrackPreviewMin;
|
||||
@@ -1290,9 +1289,9 @@ int sub_6D01B3(rct_track_td6 *td6, uint8 bl, uint8 rideIndex, int x, int y, int
|
||||
* ebx = ride_id
|
||||
* cost = edi
|
||||
*/
|
||||
bool sub_6D2189(rct_track_td6 *td6, money32 *cost, uint8 *rideId)
|
||||
bool sub_6D2189(rct_track_td6 *td6, money32 *cost, uint8 *rideId, uint8 *flags)
|
||||
{
|
||||
RCT2_GLOBAL(0x00F44151, uint8) = 0;
|
||||
*flags = 0;
|
||||
|
||||
uint8 entry_type, entry_index;
|
||||
if (!find_object_in_entry_group(&td6->vehicle_object, &entry_type, &entry_index)) {
|
||||
@@ -1339,8 +1338,8 @@ bool sub_6D2189(rct_track_td6 *td6, money32 *cost, uint8 *rideId)
|
||||
_currentTrackPieceDirection = 0;
|
||||
int z = sub_6D01B3(td6, PTD_OPERATION_GET_PLACE_Z, 0, mapSize, mapSize, 16);
|
||||
|
||||
if (RCT2_GLOBAL(0x00F4414E, uint8) & 4){
|
||||
RCT2_GLOBAL(0x00F44151, uint8) |= 2;
|
||||
if (RCT2_GLOBAL(0x00F4414E, uint8) & 4) {
|
||||
*flags |= 2;
|
||||
}
|
||||
|
||||
z += 16 - RCT2_GLOBAL(0xF44129, uint16);
|
||||
@@ -1348,7 +1347,7 @@ bool sub_6D2189(rct_track_td6 *td6, money32 *cost, uint8 *rideId)
|
||||
int operation = PTD_OPERATION_GET_COST;
|
||||
if (RCT2_GLOBAL(0x00F4414E, uint8) & 2) {
|
||||
operation |= 0x80;
|
||||
RCT2_GLOBAL(0x00F44151, uint8) |= 1;
|
||||
*flags |= 1;
|
||||
}
|
||||
|
||||
money32 resultCost = sub_6D01B3(td6, operation, rideIndex, mapSize, mapSize, z);
|
||||
@@ -1356,7 +1355,7 @@ bool sub_6D2189(rct_track_td6 *td6, money32 *cost, uint8 *rideId)
|
||||
|
||||
if (resultCost != MONEY32_UNDEFINED) {
|
||||
if (!find_object_in_entry_group(&td6->vehicle_object, &entry_type, &entry_index)){
|
||||
RCT2_GLOBAL(0x00F44151, uint8) |= 4;
|
||||
*flags |= 4;
|
||||
}
|
||||
|
||||
_currentTrackPieceDirection = backup_rotation;
|
||||
@@ -1648,7 +1647,7 @@ void game_command_place_maze_design(int* eax, int* ebx, int* ecx, int* edx, int*
|
||||
*
|
||||
* rct2: 0x006D1EF0
|
||||
*/
|
||||
void draw_track_preview(rct_track_td6 *td6, uint8** preview)
|
||||
void track_design_draw_preview(rct_track_td6 *td6, uint8 *pixels)
|
||||
{
|
||||
// Make a copy of the map
|
||||
if (!track_design_preview_backup_map()) {
|
||||
@@ -1661,13 +1660,15 @@ void draw_track_preview(rct_track_td6 *td6, uint8** preview)
|
||||
}
|
||||
|
||||
money32 cost;
|
||||
uint8 ride_id;
|
||||
if (!sub_6D2189(td6, &cost, &ride_id)) {
|
||||
memset(preview, 0, TRACK_PREVIEW_IMAGE_SIZE * 4);
|
||||
uint8 rideIndex;
|
||||
uint8 flags;
|
||||
if (!sub_6D2189(td6, &cost, &rideIndex, &flags)) {
|
||||
memset(pixels, 0, TRACK_PREVIEW_IMAGE_SIZE * 4);
|
||||
track_design_preview_restore_map();
|
||||
return;
|
||||
}
|
||||
gTrackDesignCost = cost;
|
||||
td6->cost = cost;
|
||||
td6->track_flags = flags & 7;
|
||||
|
||||
rct_viewport* view = RCT2_ADDRESS(0x9D8161, rct_viewport);
|
||||
rct_drawpixelinfo* dpi = RCT2_ADDRESS(0x9D8151, rct_drawpixelinfo);
|
||||
@@ -1716,7 +1717,7 @@ void draw_track_preview(rct_track_td6 *td6, uint8** preview)
|
||||
dpi->width = 370;
|
||||
dpi->height = 217;
|
||||
dpi->pitch = 0;
|
||||
dpi->bits = (uint8*)preview;
|
||||
dpi->bits = pixels;
|
||||
|
||||
top = y;
|
||||
left = x;
|
||||
@@ -1770,7 +1771,7 @@ void draw_track_preview(rct_track_td6 *td6, uint8** preview)
|
||||
|
||||
viewport_paint(view, dpi, left, top, right, bottom);
|
||||
|
||||
sub_6D235B(ride_id);
|
||||
sub_6D235B(rideIndex);
|
||||
track_design_preview_restore_map();
|
||||
}
|
||||
|
||||
|
||||
@@ -158,17 +158,16 @@ enum {
|
||||
extern rct_map_element **gTrackSavedMapElements;
|
||||
|
||||
extern rct_track_td6 *gActiveTrackDesign;
|
||||
extern money32 gTrackDesignCost;
|
||||
extern uint8 gTrackDesignPlaceFlags;
|
||||
extern bool gTrackDesignSceneryToggle;
|
||||
extern rct_xyz16 gTrackPreviewMin;
|
||||
extern rct_xyz16 gTrackPreviewMax;
|
||||
|
||||
rct_track_design *temp_track_get_info(char* path, uint8** preview);
|
||||
void track_design_mirror(rct_track_td6 *td6);
|
||||
rct_track_td6 *track_design_open(const utf8 *path);
|
||||
void track_design_dispose(rct_track_td6 *td6);
|
||||
|
||||
void track_design_mirror(rct_track_td6 *td6);
|
||||
|
||||
int sub_6D01B3(rct_track_td6 *td6, uint8 bl, uint8 rideIndex, int x, int y, int z);
|
||||
|
||||
void track_design_index_create();
|
||||
@@ -185,7 +184,7 @@ void game_command_place_maze_design(int* eax, int* ebx, int* ecx, int* edx, int*
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Track design preview
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
void draw_track_preview(rct_track_td6 *td6, uint8** preview);
|
||||
void track_design_draw_preview(rct_track_td6 *td6, uint8 *pixels);
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Track design saving
|
||||
|
||||
@@ -375,9 +375,7 @@ static void window_install_track_text_input(rct_window *w, int widgetIndex, char
|
||||
|
||||
static void window_install_track_update_preview()
|
||||
{
|
||||
draw_track_preview(_trackDesign, (uint8**)_trackDesignPreviewPixels);
|
||||
_trackDesign->cost = gTrackDesignCost;
|
||||
_trackDesign->track_flags = RCT2_GLOBAL(0x00F44151, uint8) & 7;
|
||||
track_design_draw_preview(_trackDesign, _trackDesignPreviewPixels);
|
||||
}
|
||||
|
||||
static void window_install_track_design(rct_window *w)
|
||||
|
||||
@@ -620,11 +620,7 @@ static bool track_list_load_design_for_preview(utf8 *path)
|
||||
|
||||
_loadedTrackDesign = track_design_open(path);
|
||||
if (_loadedTrackDesign != NULL) {
|
||||
// Load in a new preview image, calculate cost variable, calculate var_06
|
||||
draw_track_preview(_loadedTrackDesign, (uint8**)_trackDesignPreviewPixels);
|
||||
|
||||
_loadedTrackDesign->cost = gTrackDesignCost;
|
||||
_loadedTrackDesign->track_flags = RCT2_GLOBAL(0x00F44151, uint8) & 7;
|
||||
track_design_draw_preview(_loadedTrackDesign, _trackDesignPreviewPixels);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
||||
Reference in New Issue
Block a user