Replace RideTypeHasRideGroups with flag (#11375)

This commit is contained in:
Michael Steenbeek 2020-04-20 21:50:35 +02:00 committed by GitHub
parent fc5a5fe320
commit e1e58423fc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
18 changed files with 26 additions and 38 deletions

View File

@ -1495,7 +1495,7 @@ static rct_string_id get_ride_type_string_id(const ObjectRepositoryItem* item)
uint8_t rideType = item->RideInfo.RideType[i];
if (rideType != RIDE_TYPE_NULL)
{
if (RideGroupManager::RideTypeHasRideGroups(rideType))
if (RideTypeDescriptors[rideType].HasFlag(RIDE_TYPE_FLAG_HAS_RIDE_GROUPS))
{
const RideGroup* rideGroup = RideGroupManager::RideGroupFind(rideType, item->RideInfo.RideGroupIndex);
result = rideGroup->Naming.name;

View File

@ -324,7 +324,7 @@ static void window_new_ride_populate_list()
if (ride_type_is_invented(rideType) || gCheatsIgnoreResearchStatus)
{
if (!RideGroupManager::RideTypeHasRideGroups(rideType))
if (!RideTypeDescriptors[rideType].HasFlag(RIDE_TYPE_FLAG_HAS_RIDE_GROUPS))
{
nextListItem = window_new_ride_iterate_over_ride_group(rideType, 0, nextListItem);
}
@ -367,7 +367,7 @@ static ride_list_item* window_new_ride_iterate_over_ride_group(
// Ride entries
rct_ride_entry* rideEntry = get_ride_entry(rideEntryIndex);
if (RideGroupManager::RideTypeHasRideGroups(rideType))
if (RideTypeDescriptors[rideType].HasFlag(RIDE_TYPE_FLAG_HAS_RIDE_GROUPS))
{
const RideGroup* rideEntryRideGroup = RideGroupManager::GetRideGroup(rideType, rideEntry);
const RideGroup* rideGroup = RideGroupManager::RideGroupFind(rideType, rideGroupIndex);
@ -563,7 +563,7 @@ void window_new_ride_focus(ride_list_item rideItem)
{
const RideGroup* irg = RideGroupManager::GetRideGroup(rideTypeIndex, rideEntry);
if (!RideGroupManager::RideTypeHasRideGroups(rideTypeIndex) || rideGroup->Equals(irg))
if (!RideTypeDescriptors[rideTypeIndex].HasFlag(RIDE_TYPE_FLAG_HAS_RIDE_GROUPS) || rideGroup->Equals(irg))
{
_windowNewRideHighlightedItem[0] = rideItem;
w->new_ride.highlighted_ride_id = rideItem.ride_type_and_entry;
@ -948,7 +948,7 @@ static int32_t get_num_track_designs(ride_list_item item)
}
auto repo = OpenRCT2::GetContext()->GetTrackDesignRepository();
if (rideEntry != nullptr && RideGroupManager::RideTypeHasRideGroups(item.type))
if (rideEntry != nullptr && RideTypeDescriptors[item.type].HasFlag(RIDE_TYPE_FLAG_HAS_RIDE_GROUPS))
{
auto rideGroup = RideGroupManager::GetRideGroup(item.type, rideEntry);
if (rideGroup != nullptr)
@ -1077,7 +1077,7 @@ static void window_new_ride_list_vehicles_for(uint8_t rideType, const rct_ride_e
continue;
// Skip if vehicle does not belong to the same ride group
if (RideGroupManager::RideTypeHasRideGroups(rideType))
if (RideTypeDescriptors[rideType].HasFlag(RIDE_TYPE_FLAG_HAS_RIDE_GROUPS))
{
auto rideGroup = RideGroupManager::GetRideGroup(rideType, rideEntry);
auto currentRideGroup = RideGroupManager::GetRideGroup(rideType, currentRideEntry);

View File

@ -2364,7 +2364,7 @@ static void populate_vehicle_type_dropdown(Ride* ride)
continue;
// Skip if vehicle does not belong to the same ride group
if (RideGroupManager::RideTypeHasRideGroups(ride->type) && !selectionShouldBeExpanded)
if (RideTypeDescriptors[ride->type].HasFlag(RIDE_TYPE_FLAG_HAS_RIDE_GROUPS) && !selectionShouldBeExpanded)
{
const RideGroup* rideGroup = RideGroupManager::GetRideGroup(ride->type, rideEntry);
const RideGroup* currentRideGroup = RideGroupManager::GetRideGroup(ride->type, currentRideEntry);

View File

@ -2543,7 +2543,7 @@ void window_ride_construction_update_enabled_track_pieces()
int32_t rideType = ride_get_alternative_type(ride);
if (!gCheatsEnableAllDrawableTrackPieces && RideGroupManager::RideTypeHasRideGroups(rideType))
if (!gCheatsEnableAllDrawableTrackPieces && RideTypeDescriptors[rideType].HasFlag(RIDE_TYPE_FLAG_HAS_RIDE_GROUPS))
{
const RideGroup* rideGroup = RideGroupManager::GetRideGroup(rideType, rideEntry);
_enabledRidePieces = rideGroup->AvailableTrackPieces;

View File

@ -768,7 +768,7 @@ static void window_track_list_scrollpaint(rct_window* w, rct_drawpixelinfo* dpi,
static void track_list_load_designs(ride_list_item item)
{
auto repo = OpenRCT2::GetContext()->GetTrackDesignRepository();
if (RideGroupManager::RideTypeHasRideGroups(item.type))
if (RideTypeDescriptors[item.type].HasFlag(RIDE_TYPE_FLAG_HAS_RIDE_GROUPS))
{
auto rideEntry = get_ride_entry(item.entry_index);
if (rideEntry != nullptr)

View File

@ -52,7 +52,7 @@ GameActionResult::Ptr TrackDesignAction::Query() const
}
// The rest of the cases are handled by the code in ride_create()
if (RideGroupManager::RideTypeHasRideGroups(_td.type) && entryIndex == OBJECT_ENTRY_INDEX_NULL)
if (RideTypeDescriptors[_td.type].HasFlag(RIDE_TYPE_FLAG_HAS_RIDE_GROUPS) && entryIndex == OBJECT_ENTRY_INDEX_NULL)
{
const ObjectRepositoryItem* ori = object_repository_find_object_by_name(rideEntryObject->name);
if (ori != nullptr)
@ -144,7 +144,7 @@ GameActionResult::Ptr TrackDesignAction::Execute() const
}
// The rest of the cases are handled by the code in ride_create()
if (RideGroupManager::RideTypeHasRideGroups(_td.type) && entryIndex == OBJECT_ENTRY_INDEX_NULL)
if (RideTypeDescriptors[_td.type].HasFlag(RIDE_TYPE_FLAG_HAS_RIDE_GROUPS) && entryIndex == OBJECT_ENTRY_INDEX_NULL)
{
const ObjectRepositoryItem* ori = object_repository_find_object_by_name(rideEntryObject->name);
if (ori != nullptr)

View File

@ -374,7 +374,7 @@ public:
{
maxHeight = rideEntry->max_height;
}
else if (RideGroupManager::RideTypeHasRideGroups(ride->type))
else if (RideTypeDescriptors[ride->type].HasFlag(RIDE_TYPE_FLAG_HAS_RIDE_GROUPS))
{
const RideGroup* rideGroup = RideGroupManager::GetRideGroup(ride->type, rideEntry);
maxHeight = rideGroup->MaximumHeight;

View File

@ -462,7 +462,7 @@ private:
return false;
}
if (RideGroupManager::RideTypeHasRideGroups(ride->type))
if (RideTypeDescriptors[ride->type].HasFlag(RIDE_TYPE_FLAG_HAS_RIDE_GROUPS))
{
auto rideEntry = get_ride_entry(ride->subtype);
if (rideEntry == nullptr)

View File

@ -208,7 +208,7 @@ void research_finish_item(ResearchItem* researchItem)
rct_string_id availabilityString;
// Determine if the ride group this entry belongs to was invented before.
if (RideGroupManager::RideTypeHasRideGroups(base_ride_type))
if (RideTypeDescriptors[base_ride_type].HasFlag(RIDE_TYPE_FLAG_HAS_RIDE_GROUPS))
{
const RideGroup* rideGroup = RideGroupManager::GetRideGroup(base_ride_type, rideEntry);
@ -265,7 +265,8 @@ void research_finish_item(ResearchItem* researchItem)
// If a vehicle is the first to be invented for its ride group, show the ride group name.
else if (
!ride_type_was_invented_before
|| (RideGroupManager::RideTypeHasRideGroups(base_ride_type) && !ride_group_was_invented_before))
|| (RideTypeDescriptors[base_ride_type].HasFlag(RIDE_TYPE_FLAG_HAS_RIDE_GROUPS)
&& !ride_group_was_invented_before))
{
rct_ride_name naming = get_ride_naming(base_ride_type, rideEntry);
availabilityString = STR_NEWS_ITEM_RESEARCH_NEW_RIDE_AVAILABLE;

View File

@ -5650,7 +5650,7 @@ void Ride::SetNameToDefault()
*/
rct_ride_name get_ride_naming(const uint8_t rideType, rct_ride_entry* rideEntry)
{
if (RideGroupManager::RideTypeHasRideGroups(rideType))
if (RideTypeDescriptors[rideType].HasFlag(RIDE_TYPE_FLAG_HAS_RIDE_GROUPS))
{
const RideGroup* rideGroup = RideGroupManager::GetRideGroup(rideType, rideEntry);
return rideGroup->Naming;
@ -7803,7 +7803,7 @@ size_t Ride::FormatNameTo(void* argsV) const
rideTypeName = rideEntry->naming.name;
}
}
else if (RideGroupManager::RideTypeHasRideGroups(type))
else if (RideTypeDescriptors[type].HasFlag(RIDE_TYPE_FLAG_HAS_RIDE_GROUPS))
{
auto rideEntry = GetRideEntry();
if (rideEntry != nullptr)

View File

@ -204,6 +204,7 @@ enum ride_type_flags : uint64_t
RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY = (1ULL << 48),
RIDE_TYPE_FLAG_SUPPORTS_LEVEL_CROSSINGS = (1ULL << 49),
RIDE_TYPE_FLAG_IS_SUSPENDED = (1ULL << 50),
RIDE_TYPE_FLAG_HAS_RIDE_GROUPS = (1ULL << 51),
};
// Set on ride types that have a main colour, additional colour and support colour.

View File

@ -224,21 +224,6 @@ const RideGroup* RideGroupManager::GetRideGroup(const uint8_t rideType, const rc
}
}
bool RideGroupManager::RideTypeHasRideGroups(const uint8_t rideType)
{
switch (rideType)
{
case RIDE_TYPE_CORKSCREW_ROLLER_COASTER:
case RIDE_TYPE_JUNIOR_ROLLER_COASTER:
case RIDE_TYPE_CAR_RIDE:
case RIDE_TYPE_TWISTER_ROLLER_COASTER:
case RIDE_TYPE_STEEL_WILD_MOUSE:
return true;
default:
return false;
}
}
const RideGroup* RideGroupManager::RideGroupFind(const uint8_t rideType, const uint8_t index)
{
if (index >= MAX_RIDE_GROUPS_PER_RIDE_TYPE)

View File

@ -32,7 +32,6 @@ class RideGroupManager
{
public:
static const RideGroup* GetRideGroup(const uint8_t trackType, const rct_ride_entry* rideEntry);
static bool RideTypeHasRideGroups(const uint8_t trackType);
static const RideGroup* RideGroupFind(const uint8_t rideType, const uint8_t index);
static const std::vector<const char*> GetPreferredRideEntryOrder(const uint8_t rideType);

View File

@ -23,7 +23,7 @@ constexpr const RideTypeDescriptor CorkscrewRollerCoasterRTD =
SET_FIELD(TrackPaintFunction, get_track_paint_function_corkscrew_rc),
SET_FIELD(Flags, RIDE_TYPE_FLAGS_TRACK_HAS_3_COLOURS | RIDE_TYPE_FLAG_HAS_LEAVE_WHEN_ANOTHER_VEHICLE_ARRIVES_AT_STATION |
RIDE_TYPE_FLAGS_COMMON_COASTER | RIDE_TYPE_FLAGS_COMMON_COASTER_NON_ALT | RIDE_TYPE_FLAG_HAS_LARGE_CURVES |
RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG_ALLOW_MULTIPLE_CIRCUITS),
RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG_HAS_RIDE_GROUPS),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_TRAIN, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_RESTRAINTS_STUCK_CLOSED) | (1 << BREAKDOWN_RESTRAINTS_STUCK_OPEN) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION) | (1 << BREAKDOWN_BRAKES_FAILURE)),
SET_FIELD(LiftData, { SoundId::LiftArrow, 4, 6 }),

View File

@ -23,7 +23,8 @@ constexpr const RideTypeDescriptor JuniorRollerCoasterRTD =
SET_FIELD(TrackPaintFunction, get_track_paint_function_junior_rc),
SET_FIELD(Flags, RIDE_TYPE_FLAGS_TRACK_HAS_3_COLOURS | RIDE_TYPE_FLAG_HAS_LEAVE_WHEN_ANOTHER_VEHICLE_ARRIVES_AT_STATION |
RIDE_TYPE_FLAGS_COMMON_COASTER | RIDE_TYPE_FLAGS_COMMON_COASTER_NON_ALT | RIDE_TYPE_FLAG_HAS_LARGE_CURVES |
RIDE_TYPE_FLAG_ALLOW_DOORS_ON_TRACK | RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG_ALLOW_MULTIPLE_CIRCUITS),
RIDE_TYPE_FLAG_ALLOW_DOORS_ON_TRACK | RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG_ALLOW_MULTIPLE_CIRCUITS |
RIDE_TYPE_FLAG_HAS_RIDE_GROUPS),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_TRAIN, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_RESTRAINTS_STUCK_CLOSED) | (1 << BREAKDOWN_RESTRAINTS_STUCK_OPEN) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION) | (1 << BREAKDOWN_BRAKES_FAILURE)),
SET_FIELD(LiftData, { SoundId::LiftFrictionWheels, 4, 6 }),

View File

@ -23,7 +23,7 @@ constexpr const RideTypeDescriptor SteelWildMouseRTD =
SET_FIELD(TrackPaintFunction, get_track_paint_function_wild_mouse),
SET_FIELD(Flags, RIDE_TYPE_FLAGS_TRACK_HAS_3_COLOURS | RIDE_TYPE_FLAG_HAS_LEAVE_WHEN_ANOTHER_VEHICLE_ARRIVES_AT_STATION |
RIDE_TYPE_FLAGS_COMMON_COASTER | RIDE_TYPE_FLAGS_COMMON_COASTER_NON_ALT | RIDE_TYPE_FLAG_ALLOW_DOORS_ON_TRACK |
RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES),
RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG_HAS_RIDE_GROUPS),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_CAR, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_RESTRAINTS_STUCK_CLOSED) | (1 << BREAKDOWN_RESTRAINTS_STUCK_OPEN) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION) | (1 << BREAKDOWN_BRAKES_FAILURE)),
SET_FIELD(LiftData, { SoundId::LiftWildMouse, 4, 6 }),

View File

@ -23,7 +23,7 @@ constexpr const RideTypeDescriptor TwisterRollerCoasterRTD =
SET_FIELD(TrackPaintFunction, get_track_paint_function_twister_rc),
SET_FIELD(Flags, RIDE_TYPE_FLAGS_TRACK_HAS_3_COLOURS | RIDE_TYPE_FLAG_HAS_LEAVE_WHEN_ANOTHER_VEHICLE_ARRIVES_AT_STATION |
RIDE_TYPE_FLAGS_COMMON_COASTER | RIDE_TYPE_FLAGS_COMMON_COASTER_NON_ALT | RIDE_TYPE_FLAG_HAS_LARGE_CURVES |
RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG_ALLOW_MULTIPLE_CIRCUITS),
RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG_HAS_RIDE_GROUPS),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_TRAIN, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_RESTRAINTS_STUCK_CLOSED) | (1 << BREAKDOWN_RESTRAINTS_STUCK_OPEN) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION) | (1 << BREAKDOWN_BRAKES_FAILURE)),
SET_FIELD(LiftData, { SoundId::LiftBM, 5, 8 }),

View File

@ -25,7 +25,8 @@ constexpr const RideTypeDescriptor CarRideRTD =
RIDE_TYPE_FLAG_HAS_DATA_LOGGING | RIDE_TYPE_FLAG_HAS_LOAD_OPTIONS | RIDE_TYPE_FLAG_PEEP_WILL_RIDE_AGAIN |
RIDE_TYPE_FLAG_HAS_VEHICLE_COLOURS | RIDE_TYPE_FLAG_HAS_TRACK | RIDE_TYPE_FLAG_SUPPORTS_MULTIPLE_TRACK_COLOUR |
RIDE_TYPE_FLAG_ALLOW_DOORS_ON_TRACK | RIDE_TYPE_FLAG_ALLOW_MUSIC | RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT |
RIDE_TYPE_FLAG_ALLOW_MORE_VEHICLES_THAN_STATION_FITS | RIDE_TYPE_FLAG_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG_SLIGHTLY_INTERESTING_TO_LOOK_AT),
RIDE_TYPE_FLAG_ALLOW_MORE_VEHICLES_THAN_STATION_FITS | RIDE_TYPE_FLAG_SHOW_IN_TRACK_DESIGNER |
RIDE_TYPE_FLAG_SLIGHTLY_INTERESTING_TO_LOOK_AT | RIDE_TYPE_FLAG_HAS_RIDE_GROUPS),
SET_FIELD(NameConvention, { RIDE_COMPONENT_TYPE_CAR, RIDE_COMPONENT_TYPE_TRACK, RIDE_COMPONENT_TYPE_STATION }),
SET_FIELD(AvailableBreakdowns, (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION)),
SET_FIELD(LiftData, { SoundId::Null, 5, 5 }),