diff --git a/src/openrct2-ui/windows/RideConstruction.cpp b/src/openrct2-ui/windows/RideConstruction.cpp index d033805c38..31680a2aab 100644 --- a/src/openrct2-ui/windows/RideConstruction.cpp +++ b/src/openrct2-ui/windows/RideConstruction.cpp @@ -2425,7 +2425,7 @@ static void sub_6CBCE2( _tempTrackTileElement.base_height = baseZ; _tempTrackTileElement.clearance_height = clearanceZ; _tempTrackTileElement.AsTrack()->SetTrackType(trackType); - tile_element_set_track_sequence(&_tempTrackTileElement, trackBlock->index); + _tempTrackTileElement.AsTrack()->SetSequenceIndex(trackBlock->index); track_element_clear_cable_lift(&_tempTrackTileElement); track_element_set_inverted(&_tempTrackTileElement, (edx & 0x20000) ? true : false); track_element_set_colour_scheme(&_tempTrackTileElement, RIDE_COLOUR_SCHEME_MAIN); diff --git a/src/openrct2-ui/windows/TileInspector.cpp b/src/openrct2-ui/windows/TileInspector.cpp index 1ca32fc695..ee15de3bf9 100644 --- a/src/openrct2-ui/windows/TileInspector.cpp +++ b/src/openrct2-ui/windows/TileInspector.cpp @@ -1853,7 +1853,7 @@ static void window_tile_inspector_paint(rct_window* w, rct_drawpixelinfo* dpi) gfx_draw_string_left(dpi, STR_TILE_INSPECTOR_TRACK_RIDE_NAME, gCommonFormatArgs, COLOUR_DARK_GREEN, x, y + 22); // Track int16_t trackType = tileElement->AsTrack()->GetTrackType(); - int16_t sequenceNumber = tile_element_get_track_sequence(tileElement); + int16_t sequenceNumber = tileElement->AsTrack()->GetSequenceIndex(); gfx_draw_string_left(dpi, STR_TILE_INSPECTOR_TRACK_PIECE_ID, &trackType, COLOUR_DARK_GREEN, x, y + 33); gfx_draw_string_left(dpi, STR_TILE_INSPECTOR_TRACK_SEQUENCE, &sequenceNumber, COLOUR_DARK_GREEN, x, y + 44); diff --git a/src/openrct2/actions/RideDemolishAction.hpp b/src/openrct2/actions/RideDemolishAction.hpp index 4e3e7c1280..95958f9648 100644 --- a/src/openrct2/actions/RideDemolishAction.hpp +++ b/src/openrct2/actions/RideDemolishAction.hpp @@ -317,7 +317,7 @@ private: { money32 removePrice = game_do_command( x, GAME_COMMAND_FLAG_5 | GAME_COMMAND_FLAG_APPLY | (rotation << 8), y, - type | (tile_element_get_track_sequence(it.element) << 8), GAME_COMMAND_REMOVE_TRACK, z, 0); + type | (it.element->AsTrack()->GetSequenceIndex() << 8), GAME_COMMAND_REMOVE_TRACK, z, 0); if (removePrice == MONEY32_UNDEFINED) tile_element_remove(it.element); diff --git a/src/openrct2/ride/Ride.cpp b/src/openrct2/ride/Ride.cpp index 8f79ee5fbd..de6cb13389 100644 --- a/src/openrct2/ride/Ride.cpp +++ b/src/openrct2/ride/Ride.cpp @@ -558,7 +558,7 @@ bool track_block_get_next_from_zero( if (track_element_get_ride_index(tileElement) != rideIndex) continue; - if (tile_element_get_track_sequence(tileElement) != 0) + if (tileElement->AsTrack()->GetSequenceIndex() != 0) continue; if (tileElement->IsGhost() != isGhost) @@ -607,7 +607,7 @@ bool track_block_get_next(CoordsXYE* input, CoordsXYE* output, int32_t* z, int32 Ride* ride = get_ride(rideIndex); const rct_preview_track* trackBlock = get_track_def_from_ride(ride, input->element->AsTrack()->GetTrackType()); - uint8_t sequence = tile_element_get_track_sequence(input->element); + uint8_t sequence = input->element->AsTrack()->GetSequenceIndex(); trackBlock += sequence; const rct_track_coordinates* trackCoordinate = get_track_coord_from_ride(ride, input->element->AsTrack()->GetTrackType()); @@ -697,7 +697,7 @@ bool track_block_get_previous_from_zero( const rct_preview_track* nextTrackBlock = get_track_def_from_ride(ride, tileElement->AsTrack()->GetTrackType()); const rct_track_coordinates* nextTrackCoordinate = get_track_coord_from_ride(ride, tileElement->AsTrack()->GetTrackType()); - nextTrackBlock += tile_element_get_track_sequence(tileElement); + nextTrackBlock += tileElement->AsTrack()->GetSequenceIndex(); if ((nextTrackBlock + 1)->index != 255) continue; @@ -768,7 +768,7 @@ bool track_block_get_previous(int32_t x, int32_t y, rct_tile_element* tileElemen Ride* ride = get_ride(rideIndex); const rct_preview_track* trackBlock = get_track_def_from_ride(ride, tileElement->AsTrack()->GetTrackType()); - uint8_t sequence = tile_element_get_track_sequence(tileElement); + uint8_t sequence = tileElement->AsTrack()->GetSequenceIndex(); trackBlock += sequence; const rct_track_coordinates* trackCoordinate = get_track_coord_from_ride(ride, tileElement->AsTrack()->GetTrackType()); @@ -1290,7 +1290,7 @@ int32_t sub_6C683D( continue; successTileElement = tileElement; - if (tile_element_get_track_sequence(tileElement) == 0) + if (tileElement->AsTrack()->GetSequenceIndex() == 0) break; } while (!(tileElement++)->IsLastForTile()); @@ -1301,7 +1301,7 @@ int32_t sub_6C683D( // Possibly z should be & 0xF8 const rct_preview_track* trackBlock = get_track_def_from_ride_index(track_element_get_ride_index(tileElement), type); - int32_t sequence = tile_element_get_track_sequence(tileElement); + int32_t sequence = tileElement->AsTrack()->GetSequenceIndex(); uint8_t mapDirection = tileElement->GetDirection(); switch (mapDirection) @@ -1366,7 +1366,7 @@ int32_t sub_6C683D( if ((tileElement->GetDirection()) != direction) continue; - if (tile_element_get_track_sequence(tileElement) != trackBlock[i].index) + if (tileElement->AsTrack()->GetSequenceIndex() != trackBlock[i].index) continue; if (type == tileElement->AsTrack()->GetTrackType()) @@ -1472,7 +1472,7 @@ void ride_remove_provisional_track_piece() int32_t flags = GAME_COMMAND_FLAG_APPLY | GAME_COMMAND_FLAG_ALLOW_DURING_PAUSED | GAME_COMMAND_FLAG_5 | GAME_COMMAND_FLAG_GHOST; uint8_t trackType = next_track.element->AsTrack()->GetTrackType(); - int32_t trackSequence = tile_element_get_track_sequence(next_track.element); + int32_t trackSequence = next_track.element->AsTrack()->GetSequenceIndex(); game_do_command( next_track.x, flags | ((direction & 3) << 8), next_track.y, trackType | (trackSequence << 8), GAME_COMMAND_REMOVE_TRACK, z, 0); @@ -5140,7 +5140,7 @@ static void ride_create_vehicles_find_first_block(Ride* ride, CoordsXYE* outXYEl continue; if (tileElement->AsTrack()->GetTrackType() != trackType) continue; - if (tile_element_get_track_sequence(tileElement) != 0) + if (tileElement->AsTrack()->GetSequenceIndex() != 0) continue; if (tileElement->base_height != trackBeginEnd.begin_z / 8) continue; @@ -7157,7 +7157,7 @@ void ride_get_entrance_or_exit_position_from_screen_position( int32_t eax = (direction + 2 - tileElement->GetDirection()) & TILE_ELEMENT_DIRECTION_MASK; if (FlatRideTrackSequenceProperties[tileElement->AsTrack()->GetTrackType()] - [tile_element_get_track_sequence(tileElement)] + [tileElement->AsTrack()->GetSequenceIndex()] & (1 << eax)) { gRideEntranceExitPlaceDirection = direction ^ 2; @@ -8010,7 +8010,7 @@ void sub_6CB945(int32_t rideIndex) continue; if (track_element_get_ride_index(tileElement) != rideIndex) continue; - if (tile_element_get_track_sequence(tileElement) != 0) + if (tileElement->AsTrack()->GetSequenceIndex() != 0) continue; if (!(TrackSequenceProperties[tileElement->AsTrack()->GetTrackType()][0] & TRACK_SEQUENCE_FLAG_ORIGIN)) continue; @@ -8140,7 +8140,7 @@ void sub_6CB945(int32_t rideIndex) continue; uint8_t trackType = trackElement->AsTrack()->GetTrackType(); - uint8_t trackSequence = tile_element_get_track_sequence(trackElement); + uint8_t trackSequence = trackElement->AsTrack()->GetSequenceIndex(); uint8_t direction = (tileElement->GetDirection() - trackElement->GetDirectionWithOffset(2)) & 3; diff --git a/src/openrct2/ride/RideRatings.cpp b/src/openrct2/ride/RideRatings.cpp index d530e40683..c770779625 100644 --- a/src/openrct2/ride/RideRatings.cpp +++ b/src/openrct2/ride/RideRatings.cpp @@ -210,7 +210,7 @@ static void ride_ratings_update_state_2() continue; if (trackType == 255 - || (tile_element_get_track_sequence(tileElement) == 0 && trackType == tileElement->AsTrack()->GetTrackType())) + || (tileElement->AsTrack()->GetSequenceIndex() == 0 && trackType == tileElement->AsTrack()->GetTrackType())) { if (trackType == TRACK_ELEM_END_STATION) { @@ -601,7 +601,7 @@ static void ride_ratings_score_close_proximity(rct_tile_element* inputTileElemen int32_t trackType = tileElement->AsTrack()->GetTrackType(); if (trackType == TRACK_ELEM_LEFT_VERTICAL_LOOP || trackType == TRACK_ELEM_RIGHT_VERTICAL_LOOP) { - int32_t sequence = tile_element_get_track_sequence(tileElement); + int32_t sequence = tileElement->AsTrack()->GetSequenceIndex(); if (sequence == 3 || sequence == 6) { if (tileElement->base_height - inputTileElement->clearance_height <= 10) diff --git a/src/openrct2/ride/Track.cpp b/src/openrct2/ride/Track.cpp index 3b7f89d283..bf1aaa6cd3 100644 --- a/src/openrct2/ride/Track.cpp +++ b/src/openrct2/ride/Track.cpp @@ -1457,7 +1457,7 @@ static money32 track_place( } tileElement->type = map_type; - tile_element_set_track_sequence(tileElement, trackBlock->index); + tileElement->AsTrack()->SetSequenceIndex(trackBlock->index); track_element_set_ride_index(tileElement, rideIndex); tileElement->AsTrack()->SetTrackType(type); @@ -1609,7 +1609,7 @@ static money32 track_remove( if ((tileElement->GetDirection()) != rotation) continue; - if (tile_element_get_track_sequence(tileElement) != sequence) + if (tileElement->AsTrack()->GetSequenceIndex() != sequence) continue; if (tileElement->IsGhost() != isGhost) @@ -1648,7 +1648,7 @@ static money32 track_remove( Ride* ride = get_ride(rideIndex); const rct_preview_track* trackBlock = get_track_def_from_ride(ride, type); - trackBlock += tile_element_get_track_sequence(tileElement); + trackBlock += tileElement->AsTrack()->GetSequenceIndex(); uint8_t originDirection = tileElement->GetDirection(); switch (originDirection) @@ -1722,7 +1722,7 @@ static money32 track_remove( if (tileElement->GetDirection() != rotation) continue; - if (tile_element_get_track_sequence(tileElement) != trackBlock->index) + if (tileElement->AsTrack()->GetSequenceIndex() != trackBlock->index) continue; if (tileElement->AsTrack()->GetTrackType() != type) @@ -1751,7 +1751,7 @@ static money32 track_remove( entranceDirections = TrackSequenceProperties[type][0]; } - if (entranceDirections & TRACK_SEQUENCE_FLAG_ORIGIN && (tile_element_get_track_sequence(tileElement) == 0)) + if (entranceDirections & TRACK_SEQUENCE_FLAG_ORIGIN && (tileElement->AsTrack()->GetSequenceIndex() == 0)) { if (!track_remove_station_element(x, y, z / 8, rotation, rideIndex, 0)) { @@ -1776,7 +1776,7 @@ static money32 track_remove( if (!(flags & GAME_COMMAND_FLAG_APPLY)) continue; - if (entranceDirections & (1 << 4) && (tile_element_get_track_sequence(tileElement) == 0)) + if (entranceDirections & (1 << 4) && (tileElement->AsTrack()->GetSequenceIndex() == 0)) { if (!track_remove_station_element(x, y, z / 8, rotation, rideIndex, GAME_COMMAND_FLAG_APPLY)) { @@ -2250,15 +2250,15 @@ void tile_element_set_station(rct_tile_element* tileElement, uint32_t stationInd tileElement->properties.track.sequence |= (stationIndex << 4); } -int32_t tile_element_get_track_sequence(const rct_tile_element* tileElement) +uint8_t TrackElement::GetSequenceIndex() const { - return tileElement->properties.track.sequence & MAP_ELEM_TRACK_SEQUENCE_SEQUENCE_MASK; + return sequence & MAP_ELEM_TRACK_SEQUENCE_SEQUENCE_MASK; } -void tile_element_set_track_sequence(rct_tile_element* tileElement, int32_t trackSequence) +void TrackElement::SetSequenceIndex(uint8_t newSequenceIndex) { - tileElement->properties.track.sequence &= ~MAP_ELEM_TRACK_SEQUENCE_SEQUENCE_MASK; - tileElement->properties.track.sequence |= (trackSequence & MAP_ELEM_TRACK_SEQUENCE_SEQUENCE_MASK); + sequence &= ~MAP_ELEM_TRACK_SEQUENCE_SEQUENCE_MASK; + sequence |= (newSequenceIndex & MAP_ELEM_TRACK_SEQUENCE_SEQUENCE_MASK); } bool tile_element_get_green_light(const rct_tile_element* tileElement) @@ -2282,7 +2282,8 @@ int32_t tile_element_get_brake_booster_speed(const rct_tile_element* tileElement void tile_element_set_brake_booster_speed(rct_tile_element* tileElement, int32_t speed) { - tileElement->properties.track.sequence = tile_element_get_track_sequence(tileElement) | ((speed >> 1) << 4); + tileElement->properties.track.sequence &= ~0b11110000; + tileElement->properties.track.sequence |= ((speed >> 1) << 4); } bool tile_element_is_taking_photo(const rct_tile_element* tileElement) diff --git a/src/openrct2/ride/Track.h b/src/openrct2/ride/Track.h index 1472824fd0..58e8f99f40 100644 --- a/src/openrct2/ride/Track.h +++ b/src/openrct2/ride/Track.h @@ -572,8 +572,6 @@ uint8_t track_element_get_colour_scheme(const rct_tile_element* tileElement); void track_element_set_colour_scheme(rct_tile_element* tileElement, uint8_t colourScheme); int32_t tile_element_get_station(const rct_tile_element* tileElement); void tile_element_set_station(rct_tile_element* tileElement, uint32_t stationIndex); -int32_t tile_element_get_track_sequence(const rct_tile_element* tileElement); -void tile_element_set_track_sequence(rct_tile_element* tileElement, int32_t trackSequence); bool tile_element_get_green_light(const rct_tile_element* tileElement); void tile_element_set_green_light(rct_tile_element* tileElement, bool greenLight); int32_t tile_element_get_brake_booster_speed(const rct_tile_element* tileElement); diff --git a/src/openrct2/ride/TrackPaint.cpp b/src/openrct2/ride/TrackPaint.cpp index d49d1fcd4a..f6a98e8df6 100644 --- a/src/openrct2/ride/TrackPaint.cpp +++ b/src/openrct2/ride/TrackPaint.cpp @@ -2163,7 +2163,7 @@ void track_paint(paint_session* session, uint8_t direction, int32_t height, cons && !(gCurrentViewportFlags & VIEWPORT_FLAG_HIGHLIGHT_PATH_ISSUES)) { int32_t trackType = tileElement->AsTrack()->GetTrackType(); - int32_t trackSequence = tile_element_get_track_sequence(tileElement); + int32_t trackSequence = tileElement->AsTrack()->GetSequenceIndex(); int32_t trackColourScheme = track_element_get_colour_scheme(tileElement); if ((gCurrentViewportFlags & VIEWPORT_FLAG_TRACK_HEIGHTS) && dpi->zoom_level == 0) diff --git a/src/openrct2/world/Footpath.cpp b/src/openrct2/world/Footpath.cpp index 7cd72fbdc7..98a0cf1eee 100644 --- a/src/openrct2/world/Footpath.cpp +++ b/src/openrct2/world/Footpath.cpp @@ -1371,7 +1371,7 @@ static void loc_6A6D7E( } const uint8_t trackType = tileElement->AsTrack()->GetTrackType(); - const uint8_t trackSequence = tile_element_get_track_sequence(tileElement); + const uint8_t trackSequence = tileElement->AsTrack()->GetSequenceIndex(); if (!(FlatRideTrackSequenceProperties[trackType][trackSequence] & TRACK_SEQUENCE_FLAG_CONNECTS_TO_PATH)) { return; @@ -1498,7 +1498,7 @@ static void loc_6A6C85( return; } const uint8_t trackType = tileElement->AsTrack()->GetTrackType(); - const uint8_t trackSequence = tile_element_get_track_sequence(tileElement); + const uint8_t trackSequence = tileElement->AsTrack()->GetSequenceIndex(); if (!(FlatRideTrackSequenceProperties[trackType][trackSequence] & TRACK_SEQUENCE_FLAG_CONNECTS_TO_PATH)) { return; @@ -2475,7 +2475,7 @@ bool tile_element_wants_path_connection_towards(TileCoordsXYZD coords, const rct break; const uint8_t trackType = tileElement->AsTrack()->GetTrackType(); - const uint8_t trackSequence = tile_element_get_track_sequence(tileElement); + const uint8_t trackSequence = tileElement->AsTrack()->GetSequenceIndex(); if (FlatRideTrackSequenceProperties[trackType][trackSequence] & TRACK_SEQUENCE_FLAG_CONNECTS_TO_PATH) { uint16_t dx = ((coords.direction - tileElement->GetDirection()) & TILE_ELEMENT_DIRECTION_MASK); diff --git a/src/openrct2/world/Map.cpp b/src/openrct2/world/Map.cpp index c8e3c394a4..9c95000930 100644 --- a/src/openrct2/world/Map.cpp +++ b/src/openrct2/world/Map.cpp @@ -4669,7 +4669,7 @@ rct_tile_element* map_get_track_element_at_of_type_seq(int32_t x, int32_t y, int continue; if (tileElement->AsTrack()->GetTrackType() != trackType) continue; - if (tile_element_get_track_sequence(tileElement) != sequence) + if (tileElement->AsTrack()->GetSequenceIndex() != sequence) continue; return tileElement; diff --git a/src/openrct2/world/TileInspector.cpp b/src/openrct2/world/TileInspector.cpp index c0b6837db7..ccd191b73b 100644 --- a/src/openrct2/world/TileInspector.cpp +++ b/src/openrct2/world/TileInspector.cpp @@ -743,7 +743,7 @@ int32_t tile_inspector_track_base_height_offset(int32_t x, int32_t y, int32_t el uint8_t rideIndex = track_element_get_ride_index(trackElement); Ride* ride = get_ride(rideIndex); const rct_preview_track* trackBlock = get_track_def_from_ride(ride, type); - trackBlock += tile_element_get_track_sequence(trackElement); + trackBlock += trackElement->AsTrack()->GetSequenceIndex(); uint8_t originDirection = trackElement->GetDirection(); switch (originDirection) @@ -807,10 +807,10 @@ int32_t tile_inspector_track_base_height_offset(int32_t x, int32_t y, int32_t el if (tileElement->GetType() != TILE_ELEMENT_TYPE_TRACK) continue; - if ((tileElement->GetDirection()) != rotation) + if (tileElement->GetDirection() != rotation) continue; - if (tile_element_get_track_sequence(tileElement) != trackBlock->index) + if (tileElement->AsTrack()->GetSequenceIndex() != trackBlock->index) continue; if (tileElement->AsTrack()->GetTrackType() != type) @@ -876,7 +876,7 @@ int32_t tile_inspector_track_set_chain( uint8_t rideIndex = track_element_get_ride_index(trackElement); Ride* ride = get_ride(rideIndex); const rct_preview_track* trackBlock = get_track_def_from_ride(ride, type); - trackBlock += tile_element_get_track_sequence(trackElement); + trackBlock += trackElement->AsTrack()->GetSequenceIndex(); uint8_t originDirection = trackElement->GetDirection(); switch (originDirection) @@ -940,10 +940,10 @@ int32_t tile_inspector_track_set_chain( if (tileElement->GetType() != TILE_ELEMENT_TYPE_TRACK) continue; - if ((tileElement->GetDirection()) != rotation) + if (tileElement->GetDirection() != rotation) continue; - if (tile_element_get_track_sequence(tileElement) != trackBlock->index) + if (tileElement->AsTrack()->GetSequenceIndex() != trackBlock->index) continue; if (tileElement->AsTrack()->GetTrackType() != type) diff --git a/src/openrct2/world/Wall.cpp b/src/openrct2/world/Wall.cpp index aee24b9db5..4e1e1d7773 100644 --- a/src/openrct2/world/Wall.cpp +++ b/src/openrct2/world/Wall.cpp @@ -63,7 +63,7 @@ static bool WallCheckObstructionWithTrack( rct_scenery_entry* wall, int32_t z0, int32_t edge, rct_tile_element* trackElement, bool* wallAcrossTrack) { int32_t trackType = trackElement->AsTrack()->GetTrackType(); - int32_t sequence = tile_element_get_track_sequence(trackElement); + int32_t sequence = trackElement->AsTrack()->GetSequenceIndex(); int32_t direction = (edge - trackElement->GetDirection()) & TILE_ELEMENT_DIRECTION_MASK; Ride* ride = get_ride(track_element_get_ride_index(trackElement)); diff --git a/test/testpaint/Compat.cpp b/test/testpaint/Compat.cpp index 8b44eee048..fbfb671828 100644 --- a/test/testpaint/Compat.cpp +++ b/test/testpaint/Compat.cpp @@ -185,17 +185,6 @@ void tile_element_set_station(rct_tile_element* tileElement, uint32_t stationInd tileElement->properties.track.sequence |= (stationIndex << 4); } -int32_t tile_element_get_track_sequence(const rct_tile_element* tileElement) -{ - return tileElement->properties.track.sequence & MAP_ELEM_TRACK_SEQUENCE_SEQUENCE_MASK; -} - -void tile_element_set_track_sequence(rct_tile_element* tileElement, int trackSequence) -{ - tileElement->properties.track.sequence &= ~MAP_ELEM_TRACK_SEQUENCE_SEQUENCE_MASK; - tileElement->properties.track.sequence |= (trackSequence & MAP_ELEM_TRACK_SEQUENCE_SEQUENCE_MASK); -} - bool tile_element_get_green_light(const rct_tile_element* tileElement) { return (tileElement->properties.track.sequence & MAP_ELEM_TRACK_SEQUENCE_GREEN_LIGHT) != 0; @@ -217,7 +206,8 @@ int tile_element_get_brake_booster_speed(const rct_tile_element* tileElement) void tile_element_set_brake_booster_speed(rct_tile_element* tileElement, int speed) { - tileElement->properties.track.sequence = tile_element_get_track_sequence(tileElement) | ((speed >> 1) << 4); + tileElement->properties.track.sequence &= ~0b11110000; + tileElement->properties.track.sequence |= ((speed >> 1) << 4); } bool tile_element_is_taking_photo(const rct_tile_element* tileElement) @@ -302,6 +292,17 @@ void TrackElement::SetTrackType(uint8_t newType) trackType = newType; } +uint8_t TrackElement::GetSequenceIndex() const +{ + return sequence & MAP_ELEM_TRACK_SEQUENCE_SEQUENCE_MASK; +} + +void TrackElement::SetSequenceIndex(uint8_t newSequenceIndex) +{ + sequence &= ~MAP_ELEM_TRACK_SEQUENCE_SEQUENCE_MASK; + sequence |= (newSequenceIndex & MAP_ELEM_TRACK_SEQUENCE_SEQUENCE_MASK); +} + uint8_t track_element_get_ride_index(const rct_tile_element* tileElement) { return tileElement->properties.track.ride_index;