From 57a208d560ef6dfc6deeee5ab1e6c3833c1a3e2b Mon Sep 17 00:00:00 2001 From: Denis Khabenkov <52426817+kodmord@users.noreply.github.com> Date: Thu, 10 Oct 2019 20:23:29 +0300 Subject: [PATCH] Fix #10064: Refactor TrackDesignEntranceElement (#10066) * Fix #10064: Refactor TrackDesignEntranceElement --- src/openrct2-ui/windows/TrackDesignPlace.cpp | 9 +-------- src/openrct2/rct2/T6Exporter.cpp | 2 +- src/openrct2/rct2/T6Importer.cpp | 3 ++- src/openrct2/ride/TrackDesign.cpp | 10 ++-------- src/openrct2/ride/TrackDesign.h | 1 + 5 files changed, 7 insertions(+), 18 deletions(-) diff --git a/src/openrct2-ui/windows/TrackDesignPlace.cpp b/src/openrct2-ui/windows/TrackDesignPlace.cpp index 16a08745bf..bda7546bd4 100644 --- a/src/openrct2-ui/windows/TrackDesignPlace.cpp +++ b/src/openrct2-ui/windows/TrackDesignPlace.cpp @@ -620,14 +620,7 @@ static void window_track_place_draw_mini_preview_track( if (draw_mini_preview_is_pixel_in_bounds(pixelPosition)) { uint8_t* pixel = draw_mini_preview_get_pixel_ptr(pixelPosition); - - bool isExit = false; - if (entrance.direction & (1 << 7)) - { - isExit = true; - } - - uint8_t colour = isExit ? _PaletteIndexColourExit : _PaletteIndexColourEntrance; + uint8_t colour = entrance.isExit ? _PaletteIndexColourExit : _PaletteIndexColourEntrance; for (int32_t i = 0; i < 4; i++) { pixel[338 + i] = colour; // x + 2, y + 2 diff --git a/src/openrct2/rct2/T6Exporter.cpp b/src/openrct2/rct2/T6Exporter.cpp index 7e30eba565..cce39a8079 100644 --- a/src/openrct2/rct2/T6Exporter.cpp +++ b/src/openrct2/rct2/T6Exporter.cpp @@ -108,7 +108,7 @@ bool T6Exporter::SaveTrack(IStream* stream) for (const auto& entranceElement : _trackDesign->entrance_elements) { tempStream.WriteValue(entranceElement.z); - tempStream.WriteValue(entranceElement.direction); + tempStream.WriteValue(entranceElement.direction | (entranceElement.isExit << 7)); tempStream.WriteValue(entranceElement.x); tempStream.WriteValue(entranceElement.y); } diff --git a/src/openrct2/rct2/T6Importer.cpp b/src/openrct2/rct2/T6Importer.cpp index 1cf5767da6..cbc2475f16 100644 --- a/src/openrct2/rct2/T6Importer.cpp +++ b/src/openrct2/rct2/T6Importer.cpp @@ -174,9 +174,10 @@ public: _stream.Read(&t6EntranceElement, sizeof(rct_td6_entrance_element)); TrackDesignEntranceElement entranceElement{}; entranceElement.z = t6EntranceElement.z; - entranceElement.direction = t6EntranceElement.direction; + entranceElement.direction = t6EntranceElement.direction & 0x7F; entranceElement.x = t6EntranceElement.x; entranceElement.y = t6EntranceElement.y; + entranceElement.isExit = t6EntranceElement.direction >> 7; td->entrance_elements.push_back(entranceElement); } } diff --git a/src/openrct2/ride/TrackDesign.cpp b/src/openrct2/ride/TrackDesign.cpp index 5239d47cd7..0839c3f523 100644 --- a/src/openrct2/ride/TrackDesign.cpp +++ b/src/openrct2/ride/TrackDesign.cpp @@ -330,7 +330,7 @@ rct_string_id TrackDesign::CreateTrackDesignTrack(const Ride& ride) // If this is the exit version if (i == 1) { - entrance.direction |= (1 << 7); + entrance.isExit = true; } entrance_elements.push_back(entrance); } @@ -1635,12 +1635,6 @@ static bool track_design_place_ride(TrackDesign* td6, int16_t x, int16_t y, int1 case PTD_OPERATION_PLACE_TRACK_PREVIEW: { rotation = (rotation + entrance.direction) & 3; - bool isExit = false; - if (entrance.direction & (1 << 7)) - { - isExit = true; - } - if (_trackDesignPlaceOperation != PTD_OPERATION_PLACE_QUERY) { LocationXY16 tile = { @@ -1686,7 +1680,7 @@ static bool track_design_place_ride(TrackDesign* td6, int16_t x, int16_t y, int1 gGameCommandErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE; auto rideEntranceExitPlaceAction = RideEntranceExitPlaceAction( - { x, y }, rotation, ride->id, stationIndex, isExit); + { x, y }, rotation, ride->id, stationIndex, entrance.isExit); rideEntranceExitPlaceAction.SetFlags(flags); auto res = flags & GAME_COMMAND_FLAG_APPLY ? GameActions::ExecuteNested(&rideEntranceExitPlaceAction) : GameActions::QueryNested(&rideEntranceExitPlaceAction); diff --git a/src/openrct2/ride/TrackDesign.h b/src/openrct2/ride/TrackDesign.h index 87f94be42c..bb204abaf9 100644 --- a/src/openrct2/ride/TrackDesign.h +++ b/src/openrct2/ride/TrackDesign.h @@ -28,6 +28,7 @@ struct TrackDesignEntranceElement uint8_t direction; int16_t x; int16_t y; + bool isExit; }; /* Track Scenery entry size: 0x16 */