diff --git a/src/openrct2/ride/CableLift.cpp b/src/openrct2/ride/CableLift.cpp index b0f829ed55..5892adb7ee 100644 --- a/src/openrct2/ride/CableLift.cpp +++ b/src/openrct2/ride/CableLift.cpp @@ -233,7 +233,6 @@ bool Vehicle::CableLiftUpdateTrackMotionForwards() uint16_t trackTotalProgress = vehicle_get_move_info_size(TrackSubposition, track_type); if (trackProgress >= trackTotalProgress) { - _vehicleVAngleAndBank = VAngleAndBankEnd(trackType); TileElement* trackElement = map_get_track_element_at_of_type_seq(TrackLocation, trackType, 0); CoordsXYE output; @@ -245,7 +244,7 @@ bool Vehicle::CableLiftUpdateTrackMotionForwards() if (!track_block_get_next(&input, &output, &outputZ, &outputDirection)) return false; - if (_vehicleVAngleAndBank != VAngleAndBankStart(output.element->AsTrack()->GetTrackType())) + if (track_vangle_and_bank_end(trackType) != track_vangle_and_bank_start(output.element->AsTrack()->GetTrackType())) return false; TrackLocation = { output, outputZ }; @@ -298,8 +297,6 @@ bool Vehicle::CableLiftUpdateTrackMotionBackwards() if (static_cast(trackProgress) == -1) { uint8_t trackType = GetTrackType(); - _vehicleVAngleAndBank = VAngleAndBankStart(trackType); - TileElement* trackElement = map_get_track_element_at_of_type_seq(TrackLocation, trackType, 0); auto input = CoordsXYE{ TrackLocation, trackElement }; @@ -308,7 +305,8 @@ bool Vehicle::CableLiftUpdateTrackMotionBackwards() if (!track_block_get_previous(input, &output)) return false; - if (_vehicleVAngleAndBank != VAngleAndBankEnd(output.begin_element->AsTrack()->GetTrackType())) + if (track_vangle_and_bank_start(trackType) + != track_vangle_and_bank_end(output.begin_element->AsTrack()->GetTrackType())) return false; TrackLocation = { output.begin_x, output.begin_y, output.begin_z }; diff --git a/src/openrct2/ride/Track.cpp b/src/openrct2/ride/Track.cpp index f470239ce0..20a5de71f7 100644 --- a/src/openrct2/ride/Track.cpp +++ b/src/openrct2/ride/Track.cpp @@ -560,6 +560,16 @@ const rct_trackdefinition FlatRideTrackDefinitions[256] = }; // clang-format on +VAngleAndBank track_vangle_and_bank_start(uint8_t trackType) +{ + return { TrackDefinitions[trackType].vangle_start, TrackDefinitions[trackType].bank_start }; +} + +VAngleAndBank track_vangle_and_bank_end(uint8_t trackType) +{ + return { TrackDefinitions[trackType].vangle_end, TrackDefinitions[trackType].bank_end }; +} + /** * Helper method to determine if a connects to b by its bank and angle, not location. */ diff --git a/src/openrct2/ride/Track.h b/src/openrct2/ride/Track.h index 23e4e3a5ee..57a0a2235f 100644 --- a/src/openrct2/ride/Track.h +++ b/src/openrct2/ride/Track.h @@ -33,6 +33,20 @@ struct rct_trackdefinition assert_struct_size(rct_trackdefinition, 8); #pragma pack(pop) +struct VAngleAndBank +{ + uint8_t VAngle; + uint8_t Bank; +}; +bool operator==(const VAngleAndBank& vb1, const VAngleAndBank& vb2) +{ + return vb1.VAngle == vb2.VAngle && vb1.Bank == vb2.Bank; +} +bool operator!=(const VAngleAndBank& vb1, const VAngleAndBank& vb2) +{ + return !(vb1 == vb2); +} + /* size 0x0A */ struct rct_preview_track { @@ -538,6 +552,9 @@ struct track_circuit_iterator extern const rct_trackdefinition FlatRideTrackDefinitions[256]; extern const rct_trackdefinition TrackDefinitions[256]; +VAngleAndBank track_vangle_and_bank_start(uint8_t trackType); +VAngleAndBank track_vangle_and_bank_end(uint8_t trackType); + int32_t track_is_connected_by_shape(TileElement* a, TileElement* b); const rct_preview_track* get_track_def_from_ride(Ride* ride, int32_t trackType); diff --git a/src/openrct2/ride/Vehicle.cpp b/src/openrct2/ride/Vehicle.cpp index 3e4689ec95..fee40ef5d9 100644 --- a/src/openrct2/ride/Vehicle.cpp +++ b/src/openrct2/ride/Vehicle.cpp @@ -65,7 +65,6 @@ uint32_t _vehicleMotionTrackFlags; int32_t _vehicleVelocityF64E08; int32_t _vehicleVelocityF64E0C; int32_t _vehicleUnkF64E10; -VAngleAndBank _vehicleVAngleAndBank; uint8_t _vehicleF64E2C; Vehicle* _vehicleFrontVehicle; CoordsXYZ unk_F64E20; @@ -7480,7 +7479,7 @@ static void vehicle_update_scenery_door(Vehicle* vehicle) * * rct2: 0x006DB38B */ -static VAngleAndBank VehicleVAngleAndBankStart(bool useInvertedSprites, TileElement* tileElement) +static VAngleAndBank VAngleAndBankStart(bool useInvertedSprites, TileElement* tileElement) { int32_t trackType = tileElement->AsTrack()->GetTrackType(); return VAngleAndBank{ TrackDefinitions[trackType].vangle_start, track_get_actual_bank_3(useInvertedSprites, tileElement) }; @@ -7930,17 +7929,6 @@ static void sub_6DBF3E(Vehicle* vehicle) } } -// TODO move these to Track.cpp -VAngleAndBank VAngleAndBankStart(uint8_t trackType) -{ - return { TrackDefinitions[trackType].vangle_start, TrackDefinitions[trackType].bank_start }; -} - -VAngleAndBank VAngleAndBankEnd(uint8_t trackType) -{ - return { TrackDefinitions[trackType].vangle_end, TrackDefinitions[trackType].bank_end }; -} - /** * * rct2: 0x006DB08C @@ -7949,7 +7937,7 @@ bool Vehicle::UpdateTrackMotionForwardsGetNewTrack(uint16_t trackType, Ride* cur { CoordsXYZD location = {}; - _vehicleVAngleAndBank = VAngleAndBankEnd(trackType); + auto vangleAndBankEnd = track_vangle_and_bank_end(trackType); TileElement* tileElement = map_get_track_element_at_of_type_seq(TrackLocation, trackType, 0); if (tileElement == nullptr) @@ -8037,8 +8025,7 @@ bool Vehicle::UpdateTrackMotionForwardsGetNewTrack(uint16_t trackType, Ride* cur } } - if (VehicleVAngleAndBankStart(HasUpdateFlag(VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES), tileElement) - != _vehicleVAngleAndBank) + if (VAngleAndBankStart(HasUpdateFlag(VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES), tileElement) != vangleAndBankEnd) { return false; } @@ -8371,8 +8358,7 @@ loc_6DB967: return false; } -static VAngleAndBank VehicleVAngleAndBankEnd( - Ride* curRide, bool useInvertedSprites, uint16_t trackType, TileElement* tileElement) +static VAngleAndBank VAngleAndBankEnd(Ride* curRide, bool useInvertedSprites, uint16_t trackType, TileElement* tileElement) { bool isInverted = useInvertedSprites ^ tileElement->AsTrack()->IsInverted(); return { TrackDefinitions[trackType].vangle_end, @@ -8385,7 +8371,7 @@ static VAngleAndBank VehicleVAngleAndBankEnd( */ bool Vehicle::UpdateTrackMotionBackwardsGetNewTrack(uint16_t trackType, Ride* curRide, uint16_t* progress) { - _vehicleVAngleAndBank = VAngleAndBankStart(trackType); + auto vangleAndBankStart = track_vangle_and_bank_start(trackType); TileElement* tileElement = map_get_track_element_at_of_type_seq(TrackLocation, trackType, 0); if (tileElement == nullptr) @@ -8430,8 +8416,8 @@ bool Vehicle::UpdateTrackMotionBackwardsGetNewTrack(uint16_t trackType, Ride* cu return false; } - if (VehicleVAngleAndBankEnd(curRide, HasUpdateFlag(VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES), trackType, tileElement) - != _vehicleVAngleAndBank) + if (VAngleAndBankEnd(curRide, HasUpdateFlag(VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES), trackType, tileElement) + != vangleAndBankStart) { return false; } @@ -8803,11 +8789,8 @@ loc_6DC476: } } - { - uint16_t trackType = GetTrackType(); - _vehicleVAngleAndBank = VAngleAndBankEnd(trackType); - tileElement = map_get_track_element_at_of_type_seq(TrackLocation, trackType, 0); - } + auto vangleAndBankEnd = track_vangle_and_bank_end(GetTrackType()); + tileElement = map_get_track_element_at_of_type_seq(TrackLocation, GetTrackType(), 0); int32_t direction; { CoordsXYE output; @@ -8822,8 +8805,7 @@ loc_6DC476: direction = outDirection; } - if (VehicleVAngleAndBankStart(HasUpdateFlag(VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES), tileElement) - != _vehicleVAngleAndBank) + if (VAngleAndBankStart(HasUpdateFlag(VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES), tileElement) != vangleAndBankEnd) { goto loc_6DC9BC; } @@ -9017,12 +8999,8 @@ loc_6DCA9A: goto loc_6DCC2C; } - { - uint16_t trackType = GetTrackType(); - _vehicleVAngleAndBank = VAngleAndBankEnd(trackType); - - tileElement = map_get_track_element_at_of_type_seq(TrackLocation, trackType, 0); - } + auto vangleAndBankEnd = track_vangle_and_bank_end(GetTrackType()); + tileElement = map_get_track_element_at_of_type_seq(TrackLocation, GetTrackType(), 0); { track_begin_end trackBeginEnd; if (!track_block_get_previous({ TrackLocation, tileElement }, &trackBeginEnd)) @@ -9034,8 +9012,7 @@ loc_6DCA9A: tileElement = trackBeginEnd.begin_element; } - if (VehicleVAngleAndBankStart(HasUpdateFlag(VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES), tileElement) - != _vehicleVAngleAndBank) + if (VAngleAndBankStart(HasUpdateFlag(VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES), tileElement) != vangleAndBankEnd) { goto loc_6DCD4A; } diff --git a/src/openrct2/ride/Vehicle.h b/src/openrct2/ride/Vehicle.h index 960d758683..3b0a0e9f38 100644 --- a/src/openrct2/ride/Vehicle.h +++ b/src/openrct2/ride/Vehicle.h @@ -608,21 +608,6 @@ enum SOUND_RANGE_NONE = 255 }; -// TODO move these to Track.h -struct VAngleAndBank -{ - uint8_t VAngle; - uint8_t Bank; -}; -bool operator==(const VAngleAndBank& vb1, const VAngleAndBank& vb2) -{ - return vb1.VAngle == vb2.VAngle && vb1.Bank == vb2.Bank; -} -bool operator!=(const VAngleAndBank& vb1, const VAngleAndBank& vb2) -{ - return !(vb1 == vb2); -} - #define VEHICLE_SEAT_PAIR_FLAG 0x80 #define VEHICLE_SEAT_NUM_MASK 0x7F @@ -638,15 +623,10 @@ extern uint32_t _vehicleMotionTrackFlags; extern int32_t _vehicleVelocityF64E08; extern int32_t _vehicleVelocityF64E0C; extern int32_t _vehicleUnkF64E10; -extern VAngleAndBank _vehicleVAngleAndBank; extern uint8_t _vehicleF64E2C; extern Vehicle* _vehicleFrontVehicle; extern CoordsXYZ unk_F64E20; -// TODO move these to Track.h -VAngleAndBank VAngleAndBankStart(uint8_t trackType); -VAngleAndBank VAngleAndBankEnd(uint8_t trackType); - /** Helper macro until rides are stored in this module. */ #define GET_VEHICLE(sprite_index) &(get_sprite(sprite_index)->vehicle)