Skip to content

Commit

Permalink
Part of OpenRCT2#11982: Replace direct ride type checking #1
Browse files Browse the repository at this point in the history
  • Loading branch information
frutiemax92 committed Jul 16, 2020
1 parent 289dc96 commit 0fa8fb7
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 37 deletions.
34 changes: 17 additions & 17 deletions src/openrct2-ui/windows/Ride.cpp
Expand Up @@ -1247,7 +1247,7 @@ static void window_ride_draw_tab_vehicle(rct_drawpixelinfo* dpi, rct_window* w)
}

// For any suspended rides, move image higher in the vehicle tab on the rides window
if (RideTypeDescriptors[ride->type].HasFlag(RIDE_TYPE_FLAG_IS_SUSPENDED))
if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_IS_SUSPENDED))
{
screenCoords.y /= 4;
}
Expand Down Expand Up @@ -1339,15 +1339,15 @@ static void window_ride_disable_tabs(rct_window* w)
&& !ride_type_has_flag(ride_type, RIDE_TYPE_FLAG_HAS_TRACK_COLOUR_ADDITIONAL)
&& !ride_type_has_flag(ride_type, RIDE_TYPE_FLAG_HAS_TRACK_COLOUR_SUPPORTS)
&& !ride_type_has_flag(ride_type, RIDE_TYPE_FLAG_HAS_VEHICLE_COLOURS)
&& !(RideTypeDescriptors[ride->type].Flags & RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT))
&& !(ride->GetRideTypeDescriptor().Flags & RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT))
{
disabled_tabs |= (1 << WIDX_TAB_5); // 0x100
}

if (ride_type_has_flag(ride_type, RIDE_TYPE_FLAG_IS_SHOP))
disabled_tabs |= (1 << WIDX_TAB_3 | 1 << WIDX_TAB_4 | 1 << WIDX_TAB_7); // 0x4C0

if (!(RideTypeDescriptors[ride->type].Flags & RIDE_TYPE_FLAG_ALLOW_MUSIC))
if (!(ride->GetRideTypeDescriptor().Flags & RIDE_TYPE_FLAG_ALLOW_MUSIC))
{
disabled_tabs |= (1 << WIDX_TAB_6); // 0x200
}
Expand Down Expand Up @@ -2046,7 +2046,7 @@ static void window_ride_show_view_dropdown(rct_window* w, rct_widget* widget)
int32_t currentItem = 1;

// Vehicles
int32_t name = RideComponentNames[RideTypeDescriptors[ride->type].NameConvention.vehicle].number;
int32_t name = RideComponentNames[ride->GetRideTypeDescriptor().NameConvention.vehicle].number;
for (int32_t i = 1; i <= ride->num_vehicles; i++)
{
gDropdownItemsFormat[currentItem] = STR_DROPDOWN_MENU_LABEL;
Expand All @@ -2055,7 +2055,7 @@ static void window_ride_show_view_dropdown(rct_window* w, rct_widget* widget)
}

// Stations
name = RideComponentNames[RideTypeDescriptors[ride->type].NameConvention.station].number;
name = RideComponentNames[ride->GetRideTypeDescriptor().NameConvention.station].number;
for (int32_t i = 1; i <= ride->num_stations; i++)
{
gDropdownItemsFormat[currentItem] = STR_DROPDOWN_MENU_LABEL;
Expand Down Expand Up @@ -2289,7 +2289,7 @@ static void populate_vehicle_type_dropdown(Ride* ride)
continue;

// Skip if vehicle does not belong to the same ride group
if (RideTypeDescriptors[ride->type].HasFlag(RIDE_TYPE_FLAG_HAS_RIDE_GROUPS) && !selectionShouldBeExpanded)
if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_RIDE_GROUPS) && !selectionShouldBeExpanded)
{
const RideGroup* rideGroup = RideGroupManager::GetRideGroup(ride->type, rideEntry);
const RideGroup* currentRideGroup = RideGroupManager::GetRideGroup(ride->type, currentRideEntry);
Expand Down Expand Up @@ -2597,7 +2597,7 @@ static void window_ride_main_invalidate(rct_window* w)
else
{
window_ride_main_widgets[WIDX_RIDE_TYPE].type = WWT_DROPDOWN;
window_ride_main_widgets[WIDX_RIDE_TYPE].text = RideTypeDescriptors[ride->type].Naming.Name;
window_ride_main_widgets[WIDX_RIDE_TYPE].text = ride->GetRideTypeDescriptor().Naming.Name;
window_ride_main_widgets[WIDX_RIDE_TYPE_DROPDOWN].type = WWT_BUTTON;
}

Expand Down Expand Up @@ -2702,7 +2702,7 @@ static rct_string_id window_ride_get_status_vehicle(rct_window* w, void* argumen
|| trackType == TRACK_ELEM_25_DEG_UP_TO_FLAT || trackType == TRACK_ELEM_60_DEG_UP_TO_FLAT
|| trackType == TRACK_ELEM_DIAG_25_DEG_UP_TO_FLAT || trackType == TRACK_ELEM_DIAG_60_DEG_UP_TO_FLAT)
{
if (RideTypeDescriptors[ride->type].SupportsTrackPiece(TRACK_BLOCK_BRAKES) && vehicle->velocity == 0)
if (ride->GetRideTypeDescriptor().SupportsTrackPiece(TRACK_BLOCK_BRAKES) && vehicle->velocity == 0)
{
*reinterpret_cast<rct_string_id*>(reinterpret_cast<uintptr_t>(arguments)) = STR_STOPPED_BY_BLOCK_BRAKES;
return STR_BLACK_STRING;
Expand All @@ -2718,13 +2718,13 @@ static rct_string_id window_ride_get_status_vehicle(rct_window* w, void* argumen
if (ride->type == RIDE_TYPE_MINI_GOLF)
return 0;

if ((RideTypeDescriptors[ride->type].Flags & RIDE_TYPE_FLAG_SINGLE_SESSION)
if ((ride->GetRideTypeDescriptor().Flags & RIDE_TYPE_FLAG_SINGLE_SESSION)
&& vehicle->status <= VEHICLE_STATUS_UNLOADING_PASSENGERS)
{
stringId = SingleSessionVehicleStatusNames[vehicle->status];
}

const RideComponentName stationName = RideComponentNames[RideTypeDescriptors[ride->type].NameConvention.station];
const RideComponentName stationName = RideComponentNames[ride->GetRideTypeDescriptor().NameConvention.station];
*reinterpret_cast<rct_string_id*>(reinterpret_cast<uintptr_t>(arguments) + 4) = (ride->num_stations > 1)
? stationName.number
: stationName.singular;
Expand Down Expand Up @@ -2829,12 +2829,12 @@ static void window_ride_main_paint(rct_window* w, rct_drawpixelinfo* dpi)
{
if (w->ride.view > ride->num_vehicles)
{
ft.Add<rct_string_id>(RideComponentNames[RideTypeDescriptors[ride->type].NameConvention.station].number);
ft.Add<rct_string_id>(RideComponentNames[ride->GetRideTypeDescriptor().NameConvention.station].number);
ft.Add<uint16_t>(w->ride.view - ride->num_vehicles);
}
else
{
ft.Add<rct_string_id>(RideComponentNames[RideTypeDescriptors[ride->type].NameConvention.vehicle].number);
ft.Add<rct_string_id>(RideComponentNames[ride->GetRideTypeDescriptor().NameConvention.vehicle].number);
ft.Add<uint16_t>(w->ride.view);
}
}
Expand Down Expand Up @@ -3032,7 +3032,7 @@ static void window_ride_vehicle_invalidate(rct_window* w)
auto ft = Formatter::Common();
ft.Increment(6);
ft.Add<uint16_t>(carsPerTrain);
RIDE_COMPONENT_TYPE vehicleType = RideTypeDescriptors[ride->type].NameConvention.vehicle;
RIDE_COMPONENT_TYPE vehicleType = ride->GetRideTypeDescriptor().NameConvention.vehicle;
stringId = RideComponentNames[vehicleType].count;
if (ride->num_vehicles > 1)
{
Expand Down Expand Up @@ -3244,7 +3244,7 @@ static void window_ride_mode_tweak_increase(rct_window* w)
if (ride == nullptr)
return;

const auto& operatingSettings = RideTypeDescriptors[ride->type].OperatingSettings;
const auto& operatingSettings = ride->GetRideTypeDescriptor().OperatingSettings;
uint8_t maxValue = operatingSettings.MaxValue;
uint8_t minValue = gCheatsFastLiftHill ? 0 : operatingSettings.MinValue;

Expand All @@ -3269,7 +3269,7 @@ static void window_ride_mode_tweak_decrease(rct_window* w)
if (ride == nullptr)
return;

const auto& operatingSettings = RideTypeDescriptors[ride->type].OperatingSettings;
const auto& operatingSettings = ride->GetRideTypeDescriptor().OperatingSettings;
uint8_t maxValue = operatingSettings.MaxValue;
uint8_t minValue = gCheatsFastLiftHill ? 0 : operatingSettings.MinValue;
if (gCheatsFastLiftHill)
Expand Down Expand Up @@ -3426,8 +3426,8 @@ static void window_ride_operating_mousedown(rct_window* w, rct_widgetindex widge
window_ride_mode_tweak_decrease(w);
break;
case WIDX_LIFT_HILL_SPEED_INCREASE:
upper_bound = gCheatsFastLiftHill ? 255 : RideTypeDescriptors[ride->type].LiftData.maximum_speed;
lower_bound = gCheatsFastLiftHill ? 0 : RideTypeDescriptors[ride->type].LiftData.minimum_speed;
upper_bound = gCheatsFastLiftHill ? 255 : ride->GetRideTypeDescriptor().LiftData.maximum_speed;
lower_bound = gCheatsFastLiftHill ? 0 : ride->GetRideTypeDescriptor().LiftData.minimum_speed;
set_operating_setting(
w->number, RideSetSetting::LiftHillSpeed,
std::clamp<int16_t>(ride->lift_hill_speed + 1, lower_bound, upper_bound));
Expand Down
22 changes: 11 additions & 11 deletions src/openrct2-ui/windows/RideConstruction.cpp
Expand Up @@ -503,7 +503,7 @@ static bool is_track_enabled(int32_t trackFlagIndex)

static int32_t ride_get_alternative_type(Ride* ride)
{
return (_currentTrackAlternative & RIDE_TYPE_ALTERNATIVE_TRACK_TYPE) ? RideTypeDescriptors[ride->type].AlternateType
return (_currentTrackAlternative & RIDE_TYPE_ALTERNATIVE_TRACK_TYPE) ? ride->GetRideTypeDescriptor().AlternateType
: ride->type;
}

Expand Down Expand Up @@ -565,13 +565,13 @@ rct_window* window_ride_construction_open()
_currentBrakeSpeed2 = 8;
_currentSeatRotationAngle = 4;

_currentTrackCurve = RideTypeDescriptors[ride->type].StartTrackPiece | RideConstructionSpecialPieceSelected;
_currentTrackCurve = ride->GetRideTypeDescriptor().StartTrackPiece | RideConstructionSpecialPieceSelected;
_currentTrackSlopeEnd = 0;
_currentTrackBankEnd = 0;
_currentTrackLiftHill = 0;
_currentTrackAlternative = RIDE_TYPE_NO_ALTERNATIVES;

if (RideTypeDescriptors[ride->type].Flags & RIDE_TYPE_FLAG_START_CONSTRUCTION_INVERTED)
if (ride->GetRideTypeDescriptor().Flags & RIDE_TYPE_FLAG_START_CONSTRUCTION_INVERTED)
_currentTrackAlternative |= RIDE_TYPE_ALTERNATIVE_TRACK_TYPE;

_previousTrackBankEnd = 0;
Expand Down Expand Up @@ -775,7 +775,7 @@ static void window_ride_construction_resize(rct_window* w)
}
if (!is_track_enabled(TRACK_SLOPE) && !is_track_enabled(TRACK_SLOPE_STEEP))
{
if (!RideTypeDescriptors[ride->type].SupportsTrackPiece(TRACK_REVERSE_FREEFALL))
if (!ride->GetRideTypeDescriptor().SupportsTrackPiece(TRACK_REVERSE_FREEFALL))
{
// Disable all slopes
disabledWidgets |= (1ULL << WIDX_SLOPE_GROUPBOX) | (1ULL << WIDX_SLOPE_DOWN_STEEP) | (1ULL << WIDX_SLOPE_DOWN)
Expand Down Expand Up @@ -1112,7 +1112,7 @@ static void window_ride_construction_resize(rct_window* w)
disabledWidgets |= (1ULL << WIDX_SLOPE_UP_STEEP);
}
disabledWidgets |= (1ULL << WIDX_LEFT_CURVE_LARGE) | (1ULL << WIDX_RIGHT_CURVE_LARGE);
if (RideTypeDescriptors[ride->type].SupportsTrackPiece(TRACK_REVERSE_FREEFALL))
if (ride->GetRideTypeDescriptor().SupportsTrackPiece(TRACK_REVERSE_FREEFALL))
{
disabledWidgets |= (1ULL << WIDX_STRAIGHT) | (1ULL << WIDX_RIGHT_CURVE) | (1ULL << WIDX_RIGHT_CURVE_SMALL)
| (1ULL << WIDX_LEFT_CURVE_SMALL) | (1ULL << WIDX_LEFT_CURVE);
Expand All @@ -1125,7 +1125,7 @@ static void window_ride_construction_resize(rct_window* w)
disabledWidgets |= (1ULL << WIDX_SLOPE_DOWN_STEEP);
}
disabledWidgets |= (1ULL << WIDX_LEFT_CURVE_LARGE) | (1ULL << WIDX_RIGHT_CURVE_LARGE);
if (RideTypeDescriptors[ride->type].SupportsTrackPiece(TRACK_REVERSE_FREEFALL))
if (ride->GetRideTypeDescriptor().SupportsTrackPiece(TRACK_REVERSE_FREEFALL))
{
disabledWidgets |= (1ULL << WIDX_STRAIGHT) | (1ULL << WIDX_RIGHT_CURVE) | (1ULL << WIDX_RIGHT_CURVE_SMALL)
| (1ULL << WIDX_LEFT_CURVE_SMALL) | (1ULL << WIDX_LEFT_CURVE);
Expand Down Expand Up @@ -1437,7 +1437,7 @@ static void window_ride_construction_mousedown(rct_window* w, rct_widgetindex wi
{
_currentTrackBankEnd = TRACK_BANK_NONE;
}
if (RideTypeDescriptors[ride->type].SupportsTrackPiece(TRACK_REVERSE_FREEFALL))
if (ride->GetRideTypeDescriptor().SupportsTrackPiece(TRACK_REVERSE_FREEFALL))
{
if (_rideConstructionState == RIDE_CONSTRUCTION_STATE_FRONT && _currentTrackCurve == TRACK_CURVE_NONE)
{
Expand Down Expand Up @@ -2430,7 +2430,7 @@ static void sub_6CBCE2(
CoordsXY coords = originCoords + offsets.Rotate(trackDirection);

int32_t baseZ = originZ + trackBlock->z;
int32_t clearanceZ = trackBlock->var_07 + RideTypeDescriptors[ride->type].Heights.ClearanceHeight + baseZ
int32_t clearanceZ = trackBlock->var_07 + ride->GetRideTypeDescriptor().Heights.ClearanceHeight + baseZ
+ (4 * COORDS_Z_STEP);

auto centreTileCoords = TileCoordsXY{ coords };
Expand Down Expand Up @@ -2541,14 +2541,14 @@ void window_ride_construction_update_enabled_track_pieces()

int32_t rideType = ride_get_alternative_type(ride);

if (!gCheatsEnableAllDrawableTrackPieces && RideTypeDescriptors[rideType].HasFlag(RIDE_TYPE_FLAG_HAS_RIDE_GROUPS))
if (!gCheatsEnableAllDrawableTrackPieces && ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_RIDE_GROUPS))
{
const RideGroup* rideGroup = RideGroupManager::GetRideGroup(rideType, rideEntry);
_enabledRidePieces = rideGroup->AvailableTrackPieces;
}
else
{
_enabledRidePieces = RideTypeDescriptors[rideType].GetAvailableTrackPieces();
_enabledRidePieces = ride->GetRideTypeDescriptor().GetAvailableTrackPieces();
}
}

Expand Down Expand Up @@ -2908,7 +2908,7 @@ static void window_ride_construction_update_widgets(rct_window* w)
window_ride_construction_widgets[WIDX_SLOPE_DOWN_STEEP].tooltip = STR_RIDE_CONSTRUCTION_STEEP_SLOPE_DOWN_TIP;
window_ride_construction_widgets[WIDX_SLOPE_UP_STEEP].image = SPR_RIDE_CONSTRUCTION_SLOPE_UP_STEEP;
window_ride_construction_widgets[WIDX_SLOPE_UP_STEEP].tooltip = STR_RIDE_CONSTRUCTION_STEEP_SLOPE_UP_TIP;
if (RideTypeDescriptors[rideType].SupportsTrackPiece(TRACK_REVERSE_FREEFALL))
if (ride->GetRideTypeDescriptor().SupportsTrackPiece(TRACK_REVERSE_FREEFALL))
{
window_ride_construction_widgets[WIDX_LEVEL].type = WWT_FLATBTN;
window_ride_construction_widgets[WIDX_SLOPE_UP].type = WWT_FLATBTN;
Expand Down
2 changes: 1 addition & 1 deletion src/openrct2-ui/windows/TileInspector.cpp
Expand Up @@ -1918,7 +1918,7 @@ static void window_tile_inspector_paint(rct_window* w, rct_drawpixelinfo* dpi)
auto ride = get_ride(rideId);
if (ride != nullptr)
{
auto rideType = RideTypeDescriptors[ride->type].Naming.Name;
auto rideType = ride->GetRideTypeDescriptor().Naming.Name;
gfx_draw_string_left(dpi, STR_TILE_INSPECTOR_TRACK_RIDE_TYPE, &rideType, COLOUR_WHITE, screenCoords);
}
gfx_draw_string_left(
Expand Down
16 changes: 8 additions & 8 deletions src/openrct2/ride/RideRatings.cpp
Expand Up @@ -808,7 +808,7 @@ static void ride_ratings_calculate_value(Ride* ride)
}

// Start with the base ratings, multiplied by the ride type specific weights for excitement, intensity and nausea.
const auto& ratingsMultipliers = RideTypeDescriptors[ride->type].RatingsMultipliers;
const auto& ratingsMultipliers = ride->GetRideTypeDescriptor().RatingsMultipliers;
int32_t value = (((ride->excitement * ratingsMultipliers.Excitement) * 32) >> 15)
+ (((ride->intensity * ratingsMultipliers.Intensity) * 32) >> 15)
+ (((ride->nausea * ratingsMultipliers.Nausea) * 32) >> 15);
Expand Down Expand Up @@ -869,9 +869,9 @@ static void ride_ratings_calculate_value(Ride* ride)
static uint16_t ride_compute_upkeep(Ride* ride)
{
// data stored at 0x0057E3A8, incrementing 18 bytes at a time
uint16_t upkeep = RideTypeDescriptors[ride->type].UpkeepCosts.BaseCost;
uint16_t upkeep = ride->GetRideTypeDescriptor().UpkeepCosts.BaseCost;

uint16_t trackCost = RideTypeDescriptors[ride->type].UpkeepCosts.CostPerTrackPiece;
uint16_t trackCost = ride->GetRideTypeDescriptor().UpkeepCosts.CostPerTrackPiece;
uint8_t dropFactor = ride->drops;

dropFactor >>= 6;
Expand All @@ -884,7 +884,7 @@ static uint16_t ride_compute_upkeep(Ride* ride)
// rides that had tracks. The 0's were fixed rides like crooked house or
// dodgems.
// Data source is 0x0097E3AC
totalLength *= RideTypeDescriptors[ride->type].UpkeepCosts.TrackLengthMultiplier;
totalLength *= ride->GetRideTypeDescriptor().UpkeepCosts.TrackLengthMultiplier;
upkeep += static_cast<uint16_t>(totalLength >> 10);

if (ride->lifecycle_flags & RIDE_LIFECYCLE_ON_RIDE_PHOTO)
Expand Down Expand Up @@ -912,11 +912,11 @@ static uint16_t ride_compute_upkeep(Ride* ride)

// https://gist.github.com/kevinburke/e19b803cd2769d96c540
upkeep += RideTypeDescriptors[ride->type].UpkeepCosts.CostPerTrain * ride->num_vehicles;
upkeep += RideTypeDescriptors[ride->type].UpkeepCosts.CostPerCar * ride->num_cars_per_train;
upkeep += ride->GetRideTypeDescriptor().UpkeepCosts.CostPerCar * ride->num_cars_per_train;

// slight upkeep boosts for some rides - 5 for mini railway, 10 for log
// flume/rapids, 10 for roller coaster, 28 for giga coaster
upkeep += RideTypeDescriptors[ride->type].UpkeepCosts.CostPerStation * ride->num_stations;
upkeep += ride->GetRideTypeDescriptor().UpkeepCosts.CostPerStation * ride->num_stations;

if (ride->mode == RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE)
{
Expand Down Expand Up @@ -987,7 +987,7 @@ static void ride_ratings_apply_adjustments(Ride* ride, RatingTuple* ratings)
}
}
#else
if (RideTypeDescriptors[ride->type].Flags & RIDE_TYPE_FLAG_HAS_AIR_TIME)
if (ride->GetRideTypeDescriptor().Flags & RIDE_TYPE_FLAG_HAS_AIR_TIME)
{
int32_t excitementModifier;
int32_t nauseaModifier;
Expand Down Expand Up @@ -1032,7 +1032,7 @@ static void ride_ratings_apply_intensity_penalty(RatingTuple* ratings)
static void set_unreliability_factor(Ride* ride)
{
// The bigger the difference in lift speed and minimum the higher the unreliability
uint8_t minLiftSpeed = RideTypeDescriptors[ride->type].LiftData.minimum_speed;
uint8_t minLiftSpeed = ride->GetRideTypeDescriptor().LiftData.minimum_speed;
ride->unreliability_factor += (ride->lift_hill_speed - minLiftSpeed) * 2;
}

Expand Down

0 comments on commit 0fa8fb7

Please sign in to comment.