From 09bc083a696f6c82310f6d4eec58a4653723a48c Mon Sep 17 00:00:00 2001 From: Ted John Date: Mon, 2 May 2016 01:58:03 +0100 Subject: [PATCH] integrate variables for preview min, max --- src/addresses.h | 14 ++++----- src/ride/track_design.c | 61 +++++++++++++----------------------- src/ride/track_design.h | 2 ++ src/ride/track_design_save.c | 30 +++--------------- 4 files changed, 34 insertions(+), 73 deletions(-) diff --git a/src/addresses.h b/src/addresses.h index 0eb5b424d2..4dbf6177b4 100644 --- a/src/addresses.h +++ b/src/addresses.h @@ -242,13 +242,6 @@ // 8 x 8 in size. #define RCT2_ADDRESS_CHARACTER_BITMAP 0x00F4393C -#define RCT2_ADDRESS_TRACK_PREVIEW_X_MIN 0x00F440F9 -#define RCT2_ADDRESS_TRACK_PREVIEW_X_MAX 0x00F440FB -#define RCT2_ADDRESS_TRACK_PREVIEW_Y_MIN 0x00F440FD -#define RCT2_ADDRESS_TRACK_PREVIEW_Y_MAX 0x00F440FF -#define RCT2_ADDRESS_TRACK_PREVIEW_Z_MIN 0x00F44101 -#define RCT2_ADDRESS_TRACK_PREVIEW_Z_MAX 0x00F44103 - #define RCT2_ADDRESS_ABOVE_GROUND_FLAGS 0x00F441D4 #define RCT2_ADDRESS_TRACK_LIST 0x00F441EC @@ -595,7 +588,14 @@ #define RCT2_ADDRESS_CONSTRUCT_PATH_SLOPE 0x00F3EF91 #define RCT2_ADDRESS_CONSTRUCT_PATH_VALID_DIRECTIONS 0x00F3EF9E + #define RCT2_ADDRESS_TRACK_PREVIEW_ROTATION 0x00F440AE +#define RCT2_ADDRESS_TRACK_PREVIEW_X_MIN 0x00F440F9 +#define RCT2_ADDRESS_TRACK_PREVIEW_X_MAX 0x00F440FB +#define RCT2_ADDRESS_TRACK_PREVIEW_Y_MIN 0x00F440FD +#define RCT2_ADDRESS_TRACK_PREVIEW_Y_MAX 0x00F440FF +#define RCT2_ADDRESS_TRACK_PREVIEW_Z_MIN 0x00F44101 +#define RCT2_ADDRESS_TRACK_PREVIEW_Z_MAX 0x00F44103 #define RCT2_ADDRESS_TRACK_DESIGN_CACHE 0x00F44105 #define RCT2_ADDRESS_TRACK_DESIGN_INDEX_CACHE 0x00F44109 #define RCT2_ADDRESS_TRACK_DESIGN_NEXT_INDEX_CACHE 0x00F44119 diff --git a/src/ride/track_design.c b/src/ride/track_design.c index d152c2a8b3..f7d1256455 100644 --- a/src/ride/track_design.c +++ b/src/ride/track_design.c @@ -25,6 +25,8 @@ rct_track_td6 *gActiveTrackDesign; money32 gTrackDesignCost; uint8 gTrackDesignPlaceFlags; bool gTrackDesignSceneryToggle; +rct_xyz16 gTrackPreviewMin; +rct_xyz16 gTrackPreviewMax; static bool track_design_preview_backup_map(); static void track_design_preview_restore_map(); @@ -484,29 +486,12 @@ static void track_add_selection_tile(sint16 x, sint16 y) static void track_design_update_max_min_coordinates(sint16 x, sint16 y, sint16 z) { - if (x < RCT2_GLOBAL(RCT2_ADDRESS_TRACK_PREVIEW_X_MIN, sint16)){ - RCT2_GLOBAL(RCT2_ADDRESS_TRACK_PREVIEW_X_MIN, sint16) = x; - } - - if (x > RCT2_GLOBAL(RCT2_ADDRESS_TRACK_PREVIEW_X_MAX, sint16)){ - RCT2_GLOBAL(RCT2_ADDRESS_TRACK_PREVIEW_X_MAX, sint16) = x; - } - - if (y < RCT2_GLOBAL(RCT2_ADDRESS_TRACK_PREVIEW_Y_MIN, sint16)){ - RCT2_GLOBAL(RCT2_ADDRESS_TRACK_PREVIEW_Y_MIN, sint16) = y; - } - - if (y > RCT2_GLOBAL(RCT2_ADDRESS_TRACK_PREVIEW_Y_MAX, sint16)){ - RCT2_GLOBAL(RCT2_ADDRESS_TRACK_PREVIEW_Y_MAX, sint16) = y; - } - - if (z < RCT2_GLOBAL(RCT2_ADDRESS_TRACK_PREVIEW_Z_MIN, sint16)){ - RCT2_GLOBAL(RCT2_ADDRESS_TRACK_PREVIEW_Z_MIN, sint16) = z; - } - - if (z > RCT2_GLOBAL(RCT2_ADDRESS_TRACK_PREVIEW_Z_MAX, sint16)){ - RCT2_GLOBAL(RCT2_ADDRESS_TRACK_PREVIEW_Z_MAX, sint16) = z; - } + gTrackPreviewMin.x = min(gTrackPreviewMin.x, x); + gTrackPreviewMax.x = max(gTrackPreviewMax.x, x); + gTrackPreviewMin.y = min(gTrackPreviewMin.y, y); + gTrackPreviewMax.y = max(gTrackPreviewMax.y, y); + gTrackPreviewMin.z = min(gTrackPreviewMin.z, z); + gTrackPreviewMax.z = max(gTrackPreviewMax.z, z); } /** @@ -1262,12 +1247,8 @@ int sub_6D01B3(rct_track_td6 *td6, uint8 bl, uint8 rideIndex, int x, int y, int } _currentRideIndex = rideIndex; - RCT2_GLOBAL(RCT2_ADDRESS_TRACK_PREVIEW_X_MIN, sint16) = x; - RCT2_GLOBAL(RCT2_ADDRESS_TRACK_PREVIEW_X_MAX, sint16) = x; - RCT2_GLOBAL(RCT2_ADDRESS_TRACK_PREVIEW_Y_MIN, sint16) = y; - RCT2_GLOBAL(RCT2_ADDRESS_TRACK_PREVIEW_Y_MAX, sint16) = y; - RCT2_GLOBAL(RCT2_ADDRESS_TRACK_PREVIEW_Z_MIN, sint16) = z; - RCT2_GLOBAL(RCT2_ADDRESS_TRACK_PREVIEW_Z_MAX, sint16) = z; + gTrackPreviewMin = (rct_xyz16){ x, y, z }; + gTrackPreviewMax = (rct_xyz16){ x, y, z }; RCT2_GLOBAL(0x00F44129, uint16) = 0; uint8 track_place_success = 0; @@ -1692,23 +1673,23 @@ void draw_track_preview(rct_track_td6 *td6, uint8** preview) rct_drawpixelinfo* dpi = RCT2_ADDRESS(0x9D8151, rct_drawpixelinfo); int left, top, right, bottom; - int center_x = (RCT2_GLOBAL(RCT2_ADDRESS_TRACK_PREVIEW_X_MAX, sint16) + RCT2_GLOBAL(RCT2_ADDRESS_TRACK_PREVIEW_X_MIN, sint16)) / 2 + 16; - int center_y = (RCT2_GLOBAL(RCT2_ADDRESS_TRACK_PREVIEW_Y_MAX, sint16) + RCT2_GLOBAL(RCT2_ADDRESS_TRACK_PREVIEW_Y_MIN, sint16)) / 2 + 16; - int center_z = (RCT2_GLOBAL(RCT2_ADDRESS_TRACK_PREVIEW_Z_MIN, sint16) + RCT2_GLOBAL(RCT2_ADDRESS_TRACK_PREVIEW_Z_MAX, sint16)) / 2; + int center_x = (gTrackPreviewMin.x + gTrackPreviewMax.x) / 2 + 16; + int center_y = (gTrackPreviewMin.y + gTrackPreviewMax.y) / 2 + 16; + int center_z = (gTrackPreviewMin.z + gTrackPreviewMax.z) / 2; - int width = RCT2_GLOBAL(RCT2_ADDRESS_TRACK_PREVIEW_X_MAX, sint16) - RCT2_GLOBAL(RCT2_ADDRESS_TRACK_PREVIEW_X_MIN, sint16); - int height = RCT2_GLOBAL(RCT2_ADDRESS_TRACK_PREVIEW_Y_MAX, sint16) - RCT2_GLOBAL(RCT2_ADDRESS_TRACK_PREVIEW_Y_MIN, sint16); - - if (width < height) + int width = gTrackPreviewMax.x - gTrackPreviewMin.x; + int height = gTrackPreviewMax.y - gTrackPreviewMin.y; + if (width < height) { width = height; + } int zoom_level = 1; - - if (width > 1120) + if (width > 1120) { zoom_level = 2; - - if (width > 2240) + } + if (width > 2240) { zoom_level = 3; + } width = 370 << zoom_level; height = 217 << zoom_level; diff --git a/src/ride/track_design.h b/src/ride/track_design.h index ba6600ea5a..e64118a1be 100644 --- a/src/ride/track_design.h +++ b/src/ride/track_design.h @@ -161,6 +161,8 @@ 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); diff --git a/src/ride/track_design_save.c b/src/ride/track_design_save.c index 70beb4c963..e7716ec6c6 100644 --- a/src/ride/track_design_save.c +++ b/src/ride/track_design_save.c @@ -926,19 +926,8 @@ static bool track_design_save_to_td6_for_maze(uint8 rideIndex, rct_track_td6 *td RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_FLAGS, sint16) &= 0xFFF9; RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_FLAGS, sint16) &= 0xFFF7; - x = RCT2_GLOBAL(RCT2_ADDRESS_TRACK_PREVIEW_X_MAX, sint16) - - RCT2_GLOBAL(RCT2_ADDRESS_TRACK_PREVIEW_X_MIN, sint16); - - y = RCT2_GLOBAL(RCT2_ADDRESS_TRACK_PREVIEW_Y_MAX, sint16) - - RCT2_GLOBAL(RCT2_ADDRESS_TRACK_PREVIEW_Y_MIN, sint16); - - x /= 32; - y /= 32; - x++; - y++; - - td6->space_required_x = (uint8)x; - td6->space_required_y = (uint8)y; + td6->space_required_x = ((gTrackPreviewMax.x - gTrackPreviewMin.x) / 32) + 1; + td6->space_required_y = ((gTrackPreviewMax.y - gTrackPreviewMin.y) / 32) + 1; return true; } @@ -1177,19 +1166,8 @@ static bool track_design_save_to_td6_for_tracked_ride(uint8 rideIndex, rct_track RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_FLAGS, sint16) &= 0xFFF9; RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_FLAGS, sint16) &= 0xFFF7; - int x = RCT2_GLOBAL(RCT2_ADDRESS_TRACK_PREVIEW_X_MAX, sint16) - - RCT2_GLOBAL(RCT2_ADDRESS_TRACK_PREVIEW_X_MIN, sint16); - - int y = RCT2_GLOBAL(RCT2_ADDRESS_TRACK_PREVIEW_Y_MAX, sint16) - - RCT2_GLOBAL(RCT2_ADDRESS_TRACK_PREVIEW_Y_MIN, sint16); - - x /= 32; - y /= 32; - x++; - y++; - - td6->space_required_x = x; - td6->space_required_y = y; + td6->space_required_x = ((gTrackPreviewMax.x - gTrackPreviewMin.x) / 32) + 1; + td6->space_required_y = ((gTrackPreviewMax.y - gTrackPreviewMin.y) / 32) + 1; return true; }