1
0
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:
Ted John
2016-05-02 02:06:09 +01:00
parent 09bc083a69
commit 9afdd7b514
4 changed files with 20 additions and 26 deletions

View File

@@ -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();
}

View File

@@ -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

View File

@@ -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)

View File

@@ -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;