From 1702c90c8e995a619551a5952cc4b2a9db59e4d9 Mon Sep 17 00:00:00 2001 From: Arran Ireland <66679118+ion232@users.noreply.github.com> Date: Sat, 8 Aug 2020 18:41:04 +0100 Subject: [PATCH] Merge pull request #12605 from ion232/refactor-vehicle-type closes #12439: Refactor VEHICLE_TYPE to use strong enum --- src/openrct2/rct1/S4Importer.cpp | 3 ++- src/openrct2/ride/CableLift.cpp | 2 +- src/openrct2/ride/Ride.cpp | 2 +- src/openrct2/ride/Vehicle.h | 14 +++++++------- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/openrct2/rct1/S4Importer.cpp b/src/openrct2/rct1/S4Importer.cpp index c8f89b08a6..3555bd475b 100644 --- a/src/openrct2/rct1/S4Importer.cpp +++ b/src/openrct2/rct1/S4Importer.cpp @@ -1124,7 +1124,8 @@ private: if (srcVehicle->x != LOCATION_NULL) { // If vehicle is the first car on a train add to train list - auto llt = srcVehicle->type == VEHICLE_TYPE_HEAD ? EntityListId::TrainHead : EntityListId::Vehicle; + auto isFirstCar = srcVehicle->type == static_cast(Vehicle::Type::Head); + auto llt = isFirstCar ? EntityListId::TrainHead : EntityListId::Vehicle; Vehicle* vehicle = reinterpret_cast(create_sprite(SPRITE_IDENTIFIER_VEHICLE, llt)); spriteIndexMap[i] = vehicle->sprite_index; diff --git a/src/openrct2/ride/CableLift.cpp b/src/openrct2/ride/CableLift.cpp index 65fe4ccd56..a6acb6b755 100644 --- a/src/openrct2/ride/CableLift.cpp +++ b/src/openrct2/ride/CableLift.cpp @@ -32,7 +32,7 @@ Vehicle* cable_lift_segment_create( { ride.cable_lift = current->sprite_index; } - current->type = head ? VEHICLE_TYPE_HEAD : VEHICLE_TYPE_TAIL; + current->type = static_cast(head ? Vehicle::Type::Head : Vehicle::Type::Tail); current->var_44 = var_44; current->remaining_distance = remaining_distance; current->sprite_width = 10; diff --git a/src/openrct2/ride/Ride.cpp b/src/openrct2/ride/Ride.cpp index 831456064d..a56c7f5691 100644 --- a/src/openrct2/ride/Ride.cpp +++ b/src/openrct2/ride/Ride.cpp @@ -4346,7 +4346,7 @@ static Vehicle* vehicle_create_car( vehicle->ride_subtype = ride->subtype; vehicle->vehicle_type = vehicleEntryIndex; - vehicle->type = carIndex == 0 ? VEHICLE_TYPE_HEAD : VEHICLE_TYPE_TAIL; + vehicle->type = static_cast(carIndex == 0 ? Vehicle::Type::Head : Vehicle::Type::Tail); vehicle->var_44 = ror32(vehicleEntry->spacing, 10) & 0xFFFF; auto edx = vehicleEntry->spacing >> 1; *remainingDistance -= edx; diff --git a/src/openrct2/ride/Vehicle.h b/src/openrct2/ride/Vehicle.h index 78f728777f..42e9a5883b 100644 --- a/src/openrct2/ride/Vehicle.h +++ b/src/openrct2/ride/Vehicle.h @@ -109,12 +109,6 @@ static_assert(sizeof(rct_ride_entry_vehicle) % 4 == 0, "Invalid struct size"); static_assert(sizeof(rct_ride_entry_vehicle) % 8 == 0, "Invalid struct size"); #endif -enum VEHICLE_TYPE : uint8_t -{ - VEHICLE_TYPE_HEAD = 0, - VEHICLE_TYPE_TAIL = 1, -}; - enum VEHICLE_STATUS { VEHICLE_STATUS_MOVING_TO_END_OF_STATION, @@ -200,6 +194,12 @@ struct rct_vehicle_info struct Vehicle : SpriteBase { + enum class Type : uint8_t + { + Head, + Tail, + }; + uint8_t vehicle_sprite_type; uint8_t bank_rotation; int32_t remaining_distance; @@ -314,7 +314,7 @@ struct Vehicle : SpriteBase constexpr bool IsHead() const { - return type == VEHICLE_TYPE_HEAD; + return type == static_cast(Vehicle::Type::Head); } void Update(); Vehicle* GetHead();