From e8c95e6e3a6da0dc53acf03410b3c4f7952bb2a3 Mon Sep 17 00:00:00 2001 From: hdpoliveira Date: Sun, 19 Apr 2020 02:11:58 -0300 Subject: [PATCH 1/3] Part of #9473: Create Vehicle::IsUsedInPairs Converted from vehicle_is_used_in_pairs --- src/openrct2/peep/Guest.cpp | 6 +++--- src/openrct2/ride/Vehicle.cpp | 4 ++-- src/openrct2/ride/Vehicle.h | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/openrct2/peep/Guest.cpp b/src/openrct2/peep/Guest.cpp index 0bcf29292f..b1c3b32207 100644 --- a/src/openrct2/peep/Guest.cpp +++ b/src/openrct2/peep/Guest.cpp @@ -2596,7 +2596,7 @@ bool Guest::FindVehicleToEnter(Ride* ride, std::vector& car_array) vehicle = GET_VEHICLE(vehicle_id); uint8_t num_seats = vehicle->num_seats; - if (vehicle_is_used_in_pairs(vehicle)) + if (vehicle->IsUsedInPairs()) { if (vehicle->next_free_seat & 1) { @@ -3992,7 +3992,7 @@ void Guest::UpdateRideFreeVehicleCheck() } } - if (!vehicle_is_used_in_pairs(vehicle)) + if (!vehicle->IsUsedInPairs()) { UpdateRideFreeVehicleEnterRide(ride); return; @@ -4064,7 +4064,7 @@ void Guest::UpdateRideEnterVehicle() return; } - if (vehicle_is_used_in_pairs(vehicle)) + if (vehicle->IsUsedInPairs()) { auto* seatedPeep = GET_PEEP(vehicle->peep[current_seat ^ 1]); if (seatedPeep != nullptr) diff --git a/src/openrct2/ride/Vehicle.cpp b/src/openrct2/ride/Vehicle.cpp index 07cef75181..af5651bbc6 100644 --- a/src/openrct2/ride/Vehicle.cpp +++ b/src/openrct2/ride/Vehicle.cpp @@ -6224,9 +6224,9 @@ Vehicle* Vehicle::TrainTail() const return const_cast(vehicle); } -int32_t vehicle_is_used_in_pairs(const Vehicle* vehicle) +int32_t Vehicle::IsUsedInPairs() const { - return vehicle->num_seats & VEHICLE_SEAT_PAIR_FLAG; + return num_seats & VEHICLE_SEAT_PAIR_FLAG; } /** diff --git a/src/openrct2/ride/Vehicle.h b/src/openrct2/ride/Vehicle.h index bad690b4ff..95bfec9741 100644 --- a/src/openrct2/ride/Vehicle.h +++ b/src/openrct2/ride/Vehicle.h @@ -307,6 +307,7 @@ struct Vehicle : SpriteBase void UpdateSoundParams(std::vector& vehicleSoundParamsList) const; bool DodgemsCarWouldCollideAt(const CoordsXY& coords, uint16_t* spriteId) const; int32_t UpdateTrackMotion(int32_t* outStation); + int32_t IsUsedInPairs() const; rct_ride_entry_vehicle* Entry() const; Vehicle* TrainHead() const; Vehicle* TrainTail() const; @@ -562,7 +563,6 @@ void vehicle_update_all(); void vehicle_sounds_update(); GForces vehicle_get_g_forces(const Vehicle* vehicle); void vehicle_set_map_toolbar(const Vehicle* vehicle); -int32_t vehicle_is_used_in_pairs(const Vehicle* vehicle); const rct_vehicle_info* vehicle_get_move_info(int32_t trackSubposition, int32_t typeAndDirection, int32_t offset); uint16_t vehicle_get_move_info_size(int32_t trackSubposition, int32_t typeAndDirection); From acc6b9f878cf90d14bdee68924a4c7135f44678d Mon Sep 17 00:00:00 2001 From: hdpoliveira Date: Sun, 19 Apr 2020 02:17:53 -0300 Subject: [PATCH 2/3] Part of #9473: Create Vehicle::SetMapToolbar Converted from vehicle_set_map_toolbar --- .../interface/ViewportInteraction.cpp | 2 +- src/openrct2/ride/Vehicle.cpp | 16 ++++++++-------- src/openrct2/ride/Vehicle.h | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/openrct2-ui/interface/ViewportInteraction.cpp b/src/openrct2-ui/interface/ViewportInteraction.cpp index e0c754c1b4..7a7d712b01 100644 --- a/src/openrct2-ui/interface/ViewportInteraction.cpp +++ b/src/openrct2-ui/interface/ViewportInteraction.cpp @@ -82,7 +82,7 @@ int32_t viewport_interaction_get_item_left(const ScreenCoordsXY& screenCoords, v case SPRITE_IDENTIFIER_VEHICLE: vehicle = &(sprite->vehicle); if (vehicle->ride_subtype != RIDE_ENTRY_INDEX_NULL) - vehicle_set_map_toolbar(vehicle); + vehicle->SetMapToolbar(); else info->type = VIEWPORT_INTERACTION_ITEM_NONE; break; diff --git a/src/openrct2/ride/Vehicle.cpp b/src/openrct2/ride/Vehicle.cpp index af5651bbc6..b2d0af7f31 100644 --- a/src/openrct2/ride/Vehicle.cpp +++ b/src/openrct2/ride/Vehicle.cpp @@ -6170,25 +6170,25 @@ GForces vehicle_get_g_forces(const Vehicle* vehicle) return { static_cast(gForceVert & 0xFFFF), static_cast(gForceLateral & 0xFFFF) }; } -void vehicle_set_map_toolbar(const Vehicle* vehicle) +void Vehicle::SetMapToolbar() const { - auto ride = get_ride(vehicle->ride); - if (ride != nullptr) + auto curRide = get_ride(ride); + if (curRide != nullptr) { - vehicle = vehicle->GetHead(); + const Vehicle* vehicle = GetHead(); int32_t vehicleIndex; for (vehicleIndex = 0; vehicleIndex < 32; vehicleIndex++) - if (ride->vehicles[vehicleIndex] == vehicle->sprite_index) + if (curRide->vehicles[vehicleIndex] == vehicle->sprite_index) break; auto ft = Formatter::MapTooltip(); ft.Add(STR_RIDE_MAP_TIP); ft.Add(STR_MAP_TOOLTIP_STRINGID_STRINGID); - ride->FormatNameTo(ft); - ft.Add(RideComponentNames[RideTypeDescriptors[ride->type].NameConvention.vehicle].capitalised); + curRide->FormatNameTo(ft); + ft.Add(RideComponentNames[RideTypeDescriptors[curRide->type].NameConvention.vehicle].capitalised); ft.Add(vehicleIndex + 1); - ride->FormatStatusTo(ft); + curRide->FormatStatusTo(ft); } } diff --git a/src/openrct2/ride/Vehicle.h b/src/openrct2/ride/Vehicle.h index 95bfec9741..4668b99f06 100644 --- a/src/openrct2/ride/Vehicle.h +++ b/src/openrct2/ride/Vehicle.h @@ -307,6 +307,7 @@ struct Vehicle : SpriteBase void UpdateSoundParams(std::vector& vehicleSoundParamsList) const; bool DodgemsCarWouldCollideAt(const CoordsXY& coords, uint16_t* spriteId) const; int32_t UpdateTrackMotion(int32_t* outStation); + void SetMapToolbar() const; int32_t IsUsedInPairs() const; rct_ride_entry_vehicle* Entry() const; Vehicle* TrainHead() const; @@ -562,7 +563,6 @@ Vehicle* try_get_vehicle(uint16_t spriteIndex); void vehicle_update_all(); void vehicle_sounds_update(); GForces vehicle_get_g_forces(const Vehicle* vehicle); -void vehicle_set_map_toolbar(const Vehicle* vehicle); const rct_vehicle_info* vehicle_get_move_info(int32_t trackSubposition, int32_t typeAndDirection, int32_t offset); uint16_t vehicle_get_move_info_size(int32_t trackSubposition, int32_t typeAndDirection); From 4649b573f4cbff9c2392216f5f494541ac309427 Mon Sep 17 00:00:00 2001 From: hdpoliveira Date: Sun, 19 Apr 2020 02:24:04 -0300 Subject: [PATCH 3/3] Part of #9473: Create Vehicle::GetGForces Converted from vehicle_get_g_forces --- src/openrct2/ride/Ride.cpp | 2 +- src/openrct2/ride/Vehicle.cpp | 68 +++++++++++++++++------------------ src/openrct2/ride/Vehicle.h | 14 ++++---- 3 files changed, 42 insertions(+), 42 deletions(-) diff --git a/src/openrct2/ride/Ride.cpp b/src/openrct2/ride/Ride.cpp index 8e1326c4d6..436993e519 100644 --- a/src/openrct2/ride/Ride.cpp +++ b/src/openrct2/ride/Ride.cpp @@ -2874,7 +2874,7 @@ static void ride_measurement_update(Ride& ride, RideMeasurement& measurement) if (measurement.flags & RIDE_MEASUREMENT_FLAG_G_FORCES) { - auto gForces = vehicle_get_g_forces(vehicle); + auto gForces = vehicle->GetGForces(); gForces.VerticalG = std::clamp(gForces.VerticalG / 8, -127, 127); gForces.LateralG = std::clamp(gForces.LateralG / 8, -127, 127); diff --git a/src/openrct2/ride/Vehicle.cpp b/src/openrct2/ride/Vehicle.cpp index b2d0af7f31..66d96facec 100644 --- a/src/openrct2/ride/Vehicle.cpp +++ b/src/openrct2/ride/Vehicle.cpp @@ -1559,7 +1559,7 @@ void Vehicle::UpdateMeasurements() if (ride_type_has_flag(curRide->type, RIDE_TYPE_FLAG_HAS_G_FORCES)) { - auto gForces = vehicle_get_g_forces(this); + auto gForces = GetGForces(); gForces.VerticalG += curRide->previous_vertical_g; gForces.LateralG += curRide->previous_lateral_g; gForces.VerticalG /= 2; @@ -5652,15 +5652,15 @@ produceScream: * dx: lateralG * esi: vehicle */ -GForces vehicle_get_g_forces(const Vehicle* vehicle) +GForces Vehicle::GetGForces() const { - int32_t gForceVert = ((static_cast(0x280000)) * Unk9A37E4[vehicle->vehicle_sprite_type]) >> 32; - gForceVert = ((static_cast(gForceVert)) * Unk9A39C4[vehicle->bank_rotation]) >> 32; + int32_t gForceVert = ((static_cast(0x280000)) * Unk9A37E4[vehicle_sprite_type]) >> 32; + gForceVert = ((static_cast(gForceVert)) * Unk9A39C4[bank_rotation]) >> 32; int32_t lateralFactor = 0, vertFactor = 0; // Note shr has meant some of the below functions cast a known negative number to // unsigned. Possibly an original bug but will be left implemented. - switch (vehicle->track_type >> 2) + switch (track_type >> 2) { case TRACK_ELEM_FLAT: case TRACK_ELEM_END_STATION: @@ -5836,17 +5836,17 @@ GForces vehicle_get_g_forces(const Vehicle* vehicle) break; case TRACK_ELEM_S_BEND_LEFT: case TRACK_ELEM_S_BEND_LEFT_COVERED: - lateralFactor = (vehicle->track_progress < 48) ? 98 : -98; + lateralFactor = (track_progress < 48) ? 98 : -98; // 6d75FF break; case TRACK_ELEM_S_BEND_RIGHT: case TRACK_ELEM_S_BEND_RIGHT_COVERED: - lateralFactor = (vehicle->track_progress < 48) ? -98 : 98; + lateralFactor = (track_progress < 48) ? -98 : 98; // 6d7608 break; case TRACK_ELEM_LEFT_VERTICAL_LOOP: case TRACK_ELEM_RIGHT_VERTICAL_LOOP: - vertFactor = (abs(vehicle->track_progress - 155) / 2) + 28; + vertFactor = (abs(track_progress - 155) / 2) + 28; // 6d7690 break; case TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES: @@ -5889,12 +5889,12 @@ GForces vehicle_get_g_forces(const Vehicle* vehicle) break; case TRACK_ELEM_HALF_LOOP_UP: case TRACK_ELEM_FLYER_HALF_LOOP_UP: - vertFactor = ((static_cast(-(vehicle->track_progress - 155))) / 2) + 28; + vertFactor = ((static_cast(-(track_progress - 155))) / 2) + 28; // 6d763E break; case TRACK_ELEM_HALF_LOOP_DOWN: case TRACK_ELEM_FLYER_HALF_LOOP_DOWN: - vertFactor = (vehicle->track_progress / 2) + 28; + vertFactor = (track_progress / 2) + 28; // 6d7656 break; case TRACK_ELEM_LEFT_CORKSCREW_UP: @@ -5936,16 +5936,16 @@ GForces vehicle_get_g_forces(const Vehicle* vehicle) break; case TRACK_ELEM_WATER_SPLASH: vertFactor = -150; - if (vehicle->track_progress < 32) + if (track_progress < 32) break; vertFactor = 150; - if (vehicle->track_progress < 64) + if (track_progress < 64) break; vertFactor = 0; - if (vehicle->track_progress < 96) + if (track_progress < 96) break; vertFactor = 150; - if (vehicle->track_progress < 128) + if (track_progress < 128) break; vertFactor = -150; // 6d7408 @@ -6048,63 +6048,63 @@ GForces vehicle_get_g_forces(const Vehicle* vehicle) // 6d75A8 break; case TRACK_ELEM_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_TILES_25_DEG_UP: - vertFactor = -(vehicle->track_progress / 2) + 134; + vertFactor = -(track_progress / 2) + 134; lateralFactor = 90; // 6d771C break; case TRACK_ELEM_RIGHT_BANK_TO_RIGHT_QUARTER_TURN_3_TILES_25_DEG_UP: - vertFactor = -(vehicle->track_progress / 2) + 134; + vertFactor = -(track_progress / 2) + 134; lateralFactor = -90; // 6D7746 break; case TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_DOWN_TO_LEFT_BANK: - vertFactor = -(vehicle->track_progress / 2) + 134; + vertFactor = -(track_progress / 2) + 134; lateralFactor = 90; // 6D7731 identical to 6d771c break; case TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_DOWN_TO_RIGHT_BANK: - vertFactor = -(vehicle->track_progress / 2) + 134; + vertFactor = -(track_progress / 2) + 134; lateralFactor = -90; // 6D775B identical to 6d7746 break; case TRACK_ELEM_LEFT_LARGE_HALF_LOOP_UP: case TRACK_ELEM_RIGHT_LARGE_HALF_LOOP_UP: - vertFactor = ((static_cast(-(vehicle->track_progress - 311))) / 4) + 46; + vertFactor = ((static_cast(-(track_progress - 311))) / 4) + 46; // 6d7666 break; case TRACK_ELEM_RIGHT_LARGE_HALF_LOOP_DOWN: case TRACK_ELEM_LEFT_LARGE_HALF_LOOP_DOWN: - vertFactor = (vehicle->track_progress / 4) + 46; + vertFactor = (track_progress / 4) + 46; // 6d767F break; case TRACK_ELEM_HEARTLINE_TRANSFER_UP: vertFactor = 103; - if (vehicle->track_progress < 32) + if (track_progress < 32) break; vertFactor = -103; - if (vehicle->track_progress < 64) + if (track_progress < 64) break; vertFactor = 0; - if (vehicle->track_progress < 96) + if (track_progress < 96) break; vertFactor = 103; - if (vehicle->track_progress < 128) + if (track_progress < 128) break; vertFactor = -103; // 6d74A0 break; case TRACK_ELEM_HEARTLINE_TRANSFER_DOWN: vertFactor = -103; - if (vehicle->track_progress < 32) + if (track_progress < 32) break; vertFactor = 103; - if (vehicle->track_progress < 64) + if (track_progress < 64) break; vertFactor = 0; - if (vehicle->track_progress < 96) + if (track_progress < 96) break; vertFactor = -103; - if (vehicle->track_progress < 128) + if (track_progress < 128) break; vertFactor = 103; // 6D74CA @@ -6112,13 +6112,13 @@ GForces vehicle_get_g_forces(const Vehicle* vehicle) case TRACK_ELEM_MULTIDIM_INVERTED_FLAT_TO_90_DEG_QUARTER_LOOP_DOWN: case TRACK_ELEM_INVERTED_FLAT_TO_90_DEG_QUARTER_LOOP_DOWN: case TRACK_ELEM_MULTIDIM_FLAT_TO_90_DEG_DOWN_QUARTER_LOOP: - vertFactor = (vehicle->track_progress / 4) + 55; + vertFactor = (track_progress / 4) + 55; // 6d762D break; case TRACK_ELEM_90_DEG_TO_INVERTED_FLAT_QUARTER_LOOP_UP: case TRACK_ELEM_MULTIDIM_90_DEG_UP_TO_INVERTED_FLAT_QUARTER_LOOP: case TRACK_ELEM_MULTIDIM_INVERTED_90_DEG_UP_TO_FLAT_QUARTER_LOOP: - vertFactor = ((static_cast(-(vehicle->track_progress - 137))) / 4) + 55; + vertFactor = ((static_cast(-(track_progress - 137))) / 4) + 55; // 6D7614 break; case TRACK_ELEM_AIR_THRUST_TOP_CAP: @@ -6155,12 +6155,12 @@ GForces vehicle_get_g_forces(const Vehicle* vehicle) if (vertFactor != 0) { - gForceVert += abs(vehicle->velocity) * 98 / vertFactor; + gForceVert += abs(velocity) * 98 / vertFactor; } if (lateralFactor != 0) { - gForceLateral += abs(vehicle->velocity) * 98 / lateralFactor; + gForceLateral += abs(velocity) * 98 / lateralFactor; } gForceVert *= 10; @@ -6493,7 +6493,7 @@ static void vehicle_update_track_motion_up_stop_check(Vehicle* vehicle) int32_t trackType = vehicle->track_type >> 2; if (!track_element_is_covered(trackType)) { - auto gForces = vehicle_get_g_forces(vehicle); + auto gForces = vehicle->GetGForces(); gForces.LateralG = std::abs(gForces.LateralG); if (gForces.LateralG <= 150) { @@ -6522,7 +6522,7 @@ static void vehicle_update_track_motion_up_stop_check(Vehicle* vehicle) int32_t trackType = vehicle->track_type >> 2; if (!track_element_is_covered(trackType)) { - auto gForces = vehicle_get_g_forces(vehicle); + auto gForces = vehicle->GetGForces(); if (dword_9A2970[vehicle->vehicle_sprite_type] < 0) { diff --git a/src/openrct2/ride/Vehicle.h b/src/openrct2/ride/Vehicle.h index 4668b99f06..9de3410c69 100644 --- a/src/openrct2/ride/Vehicle.h +++ b/src/openrct2/ride/Vehicle.h @@ -179,6 +179,12 @@ enum VEHICLE_TRACK_SUBPOSITION : uint8_t struct Ride; struct rct_ride_entry; +struct GForces +{ + int32_t VerticalG{}; + int32_t LateralG{}; +}; + struct Vehicle : SpriteBase { uint8_t vehicle_sprite_type; @@ -307,6 +313,7 @@ struct Vehicle : SpriteBase void UpdateSoundParams(std::vector& vehicleSoundParamsList) const; bool DodgemsCarWouldCollideAt(const CoordsXY& coords, uint16_t* spriteId) const; int32_t UpdateTrackMotion(int32_t* outStation); + GForces GetGForces() const; void SetMapToolbar() const; int32_t IsUsedInPairs() const; rct_ride_entry_vehicle* Entry() const; @@ -553,16 +560,9 @@ enum #define VEHICLE_SEAT_PAIR_FLAG 0x80 #define VEHICLE_SEAT_NUM_MASK 0x7F -struct GForces -{ - int32_t VerticalG{}; - int32_t LateralG{}; -}; - Vehicle* try_get_vehicle(uint16_t spriteIndex); void vehicle_update_all(); void vehicle_sounds_update(); -GForces vehicle_get_g_forces(const Vehicle* vehicle); const rct_vehicle_info* vehicle_get_move_info(int32_t trackSubposition, int32_t typeAndDirection, int32_t offset); uint16_t vehicle_get_move_info_size(int32_t trackSubposition, int32_t typeAndDirection);