1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2025-12-23 15:52:55 +01:00

Fix #10064: Refactor TrackDesignEntranceElement (#10066)

* Fix #10064: Refactor TrackDesignEntranceElement
This commit is contained in:
Denis Khabenkov
2019-10-10 20:23:29 +03:00
committed by Duncan
parent ff2a704b93
commit 57a208d560
5 changed files with 7 additions and 18 deletions

View File

@@ -620,14 +620,7 @@ static void window_track_place_draw_mini_preview_track(
if (draw_mini_preview_is_pixel_in_bounds(pixelPosition)) if (draw_mini_preview_is_pixel_in_bounds(pixelPosition))
{ {
uint8_t* pixel = draw_mini_preview_get_pixel_ptr(pixelPosition); uint8_t* pixel = draw_mini_preview_get_pixel_ptr(pixelPosition);
uint8_t colour = entrance.isExit ? _PaletteIndexColourExit : _PaletteIndexColourEntrance;
bool isExit = false;
if (entrance.direction & (1 << 7))
{
isExit = true;
}
uint8_t colour = isExit ? _PaletteIndexColourExit : _PaletteIndexColourEntrance;
for (int32_t i = 0; i < 4; i++) for (int32_t i = 0; i < 4; i++)
{ {
pixel[338 + i] = colour; // x + 2, y + 2 pixel[338 + i] = colour; // x + 2, y + 2

View File

@@ -108,7 +108,7 @@ bool T6Exporter::SaveTrack(IStream* stream)
for (const auto& entranceElement : _trackDesign->entrance_elements) for (const auto& entranceElement : _trackDesign->entrance_elements)
{ {
tempStream.WriteValue<uint8_t>(entranceElement.z); tempStream.WriteValue<uint8_t>(entranceElement.z);
tempStream.WriteValue<uint8_t>(entranceElement.direction); tempStream.WriteValue<uint8_t>(entranceElement.direction | (entranceElement.isExit << 7));
tempStream.WriteValue<int16_t>(entranceElement.x); tempStream.WriteValue<int16_t>(entranceElement.x);
tempStream.WriteValue<int16_t>(entranceElement.y); tempStream.WriteValue<int16_t>(entranceElement.y);
} }

View File

@@ -174,9 +174,10 @@ public:
_stream.Read(&t6EntranceElement, sizeof(rct_td6_entrance_element)); _stream.Read(&t6EntranceElement, sizeof(rct_td6_entrance_element));
TrackDesignEntranceElement entranceElement{}; TrackDesignEntranceElement entranceElement{};
entranceElement.z = t6EntranceElement.z; entranceElement.z = t6EntranceElement.z;
entranceElement.direction = t6EntranceElement.direction; entranceElement.direction = t6EntranceElement.direction & 0x7F;
entranceElement.x = t6EntranceElement.x; entranceElement.x = t6EntranceElement.x;
entranceElement.y = t6EntranceElement.y; entranceElement.y = t6EntranceElement.y;
entranceElement.isExit = t6EntranceElement.direction >> 7;
td->entrance_elements.push_back(entranceElement); td->entrance_elements.push_back(entranceElement);
} }
} }

View File

@@ -330,7 +330,7 @@ rct_string_id TrackDesign::CreateTrackDesignTrack(const Ride& ride)
// If this is the exit version // If this is the exit version
if (i == 1) if (i == 1)
{ {
entrance.direction |= (1 << 7); entrance.isExit = true;
} }
entrance_elements.push_back(entrance); 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: case PTD_OPERATION_PLACE_TRACK_PREVIEW:
{ {
rotation = (rotation + entrance.direction) & 3; rotation = (rotation + entrance.direction) & 3;
bool isExit = false;
if (entrance.direction & (1 << 7))
{
isExit = true;
}
if (_trackDesignPlaceOperation != PTD_OPERATION_PLACE_QUERY) if (_trackDesignPlaceOperation != PTD_OPERATION_PLACE_QUERY)
{ {
LocationXY16 tile = { 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; gGameCommandErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE;
auto rideEntranceExitPlaceAction = RideEntranceExitPlaceAction( auto rideEntranceExitPlaceAction = RideEntranceExitPlaceAction(
{ x, y }, rotation, ride->id, stationIndex, isExit); { x, y }, rotation, ride->id, stationIndex, entrance.isExit);
rideEntranceExitPlaceAction.SetFlags(flags); rideEntranceExitPlaceAction.SetFlags(flags);
auto res = flags & GAME_COMMAND_FLAG_APPLY ? GameActions::ExecuteNested(&rideEntranceExitPlaceAction) auto res = flags & GAME_COMMAND_FLAG_APPLY ? GameActions::ExecuteNested(&rideEntranceExitPlaceAction)
: GameActions::QueryNested(&rideEntranceExitPlaceAction); : GameActions::QueryNested(&rideEntranceExitPlaceAction);

View File

@@ -28,6 +28,7 @@ struct TrackDesignEntranceElement
uint8_t direction; uint8_t direction;
int16_t x; int16_t x;
int16_t y; int16_t y;
bool isExit;
}; };
/* Track Scenery entry size: 0x16 */ /* Track Scenery entry size: 0x16 */