Merge pull request #14458 from Gymnasiast/backport-nsf

Backport ride limit refactors from new-save-format
This commit is contained in:
Michael Steenbeek 2021-04-20 23:25:53 +02:00 committed by GitHub
commit c9943ee11d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 19 additions and 17 deletions

View File

@ -2702,7 +2702,7 @@ static void window_ride_vehicle_mousedown(rct_window* w, rct_widgetindex widgetI
window_ride_show_vehicle_type_dropdown(w, &w->widgets[widgetIndex]);
break;
case WIDX_VEHICLE_TRAINS_INCREASE:
if (ride->num_vehicles < 32)
if (ride->num_vehicles < MAX_VEHICLES_PER_RIDE)
ride->SetNumVehicles(ride->num_vehicles + 1);
break;
case WIDX_VEHICLE_TRAINS_DECREASE:
@ -2710,7 +2710,7 @@ static void window_ride_vehicle_mousedown(rct_window* w, rct_widgetindex widgetI
ride->SetNumVehicles(ride->num_vehicles - 1);
break;
case WIDX_VEHICLE_CARS_PER_TRAIN_INCREASE:
if (ride->num_cars_per_train < 255)
if (ride->num_cars_per_train < MAX_CARS_PER_TRAIN)
ride->SetNumCarsPerVehicle(ride->num_cars_per_train + 1);
break;
case WIDX_VEHICLE_CARS_PER_TRAIN_DECREASE:

View File

@ -1981,7 +1981,7 @@ static void window_ride_construction_entrance_click(rct_window* w)
else
{
gRideEntranceExitPlaceType = ENTRANCE_TYPE_RIDE_ENTRANCE;
gRideEntranceExitPlaceRideIndex = w->number & 0xFF;
gRideEntranceExitPlaceRideIndex = static_cast<ride_id_t>(w->number);
gRideEntranceExitPlaceStationIndex = 0;
input_set_flag(INPUT_FLAG_6, true);
ride_construction_invalidate_current_track();

View File

@ -161,7 +161,7 @@ GameActions::Result::Ptr RideCreateAction::Execute() const
ride->num_stations = 0;
ride->num_vehicles = 1;
ride->proposed_num_vehicles = 32;
ride->max_trains = 32;
ride->max_trains = MAX_VEHICLES_PER_RIDE;
ride->num_cars_per_train = 1;
ride->proposed_num_cars_per_train = 12;
ride->min_waiting_time = 10;

View File

@ -259,11 +259,12 @@ GameActions::Result::Ptr TrackDesignAction::Execute() const
ride->track_colour[i].supports = _td.track_support_colour[i];
}
for (int32_t i = 0; i <= MAX_VEHICLES_PER_RIDE; i++)
for (size_t i = 0; i <= MAX_VEHICLES_PER_RIDE; i++)
{
ride->vehicle_colours[i].Body = _td.vehicle_colours[i].body_colour;
ride->vehicle_colours[i].Trim = _td.vehicle_colours[i].trim_colour;
ride->vehicle_colours[i].Ternary = _td.vehicle_additional_colour[i];
auto tdIndex = std::min(i, std::size(_td.vehicle_colours) - 1);
ride->vehicle_colours[i].Body = _td.vehicle_colours[tdIndex].body_colour;
ride->vehicle_colours[i].Trim = _td.vehicle_colours[tdIndex].trim_colour;
ride->vehicle_colours[i].Ternary = _td.vehicle_additional_colour[tdIndex];
}
for (int32_t count = 1; count == 1 || r->Error != GameActions::Status::Ok; ++count)

View File

@ -212,7 +212,7 @@ private:
}
}
// Set remaining vehicles to same colour as first vehicle
for (int32_t i = RCT1_MAX_TRAINS_PER_RIDE; i <= MAX_VEHICLES_PER_RIDE; i++)
for (size_t i = RCT1_MAX_TRAINS_PER_RIDE; i < std::size(td->vehicle_colours); i++)
{
td->vehicle_colours[i] = td->vehicle_colours[0];
td->vehicle_additional_colour[i] = td->vehicle_additional_colour[0];

View File

@ -3095,7 +3095,7 @@ vehicle_colour ride_get_vehicle_colour(Ride* ride, int32_t vehicleIndex)
vehicle_colour result;
// Prevent indexing array out of bounds
vehicleIndex = std::min(vehicleIndex, MAX_CARS_PER_TRAIN);
vehicleIndex = std::min<int32_t>(vehicleIndex, MAX_CARS_PER_TRAIN);
result.main = ride->vehicle_colours[vehicleIndex].Body;
result.additional_1 = ride->vehicle_colours[vehicleIndex].Trim;
@ -6402,7 +6402,7 @@ void Ride::UpdateMaxVehicles()
{
case RideMode::ContinuousCircuitBlockSectioned:
case RideMode::PoweredLaunchBlockSectioned:
maxNumTrains = std::clamp(num_stations + num_block_brakes - 1, 1, 31);
maxNumTrains = std::clamp<int32_t>(num_stations + num_block_brakes - 1, 1, MAX_VEHICLES_PER_RIDE);
break;
case RideMode::ReverseInclineLaunchedShuttle:
case RideMode::PoweredLaunchPasstrough:
@ -6434,7 +6434,7 @@ void Ride::UpdateMaxVehicles()
if ((mode != RideMode::StationToStation && mode != RideMode::ContinuousCircuit)
|| !(GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_ALLOW_MORE_VEHICLES_THAN_STATION_FITS)))
{
maxNumTrains = std::min(maxNumTrains, 31);
maxNumTrains = std::min(maxNumTrains, int32_t(MAX_VEHICLES_PER_RIDE));
}
else
{
@ -6463,7 +6463,7 @@ void Ride::UpdateMaxVehicles()
{
maxNumTrains++;
length += totalSpacing;
} while (maxNumTrains < 31 && length < trackLength);
} while (maxNumTrains < MAX_VEHICLES_PER_RIDE && length < trackLength);
}
break;
}
@ -6482,7 +6482,7 @@ void Ride::UpdateMaxVehicles()
if (gCheatsDisableTrainLengthLimit)
{
maxNumTrains = 31;
maxNumTrains = MAX_VEHICLES_PER_RIDE;
}
numVehicles = std::min(proposed_num_vehicles, static_cast<uint8_t>(maxNumTrains));

View File

@ -36,12 +36,13 @@ struct Vehicle;
// The max number of different types of vehicle.
// Examples of vehicles here are the locomotive, tender and carriage of the Miniature Railway.
#define MAX_VEHICLES_PER_RIDE_ENTRY 4
#define MAX_VEHICLES_PER_RIDE 31
constexpr const uint8_t MAX_VEHICLES_PER_RIDE = 31;
constexpr const uint8_t MAX_CARS_PER_TRAIN = 255;
constexpr const uint8_t MAX_VEHICLE_COLOURS = std::max(MAX_CARS_PER_TRAIN, MAX_VEHICLES_PER_RIDE);
#define NUM_COLOUR_SCHEMES 4
#define MAX_CATEGORIES_PER_RIDE 2
#define DOWNTIME_HISTORY_SIZE 8
#define CUSTOMER_HISTORY_SIZE 10
#define MAX_CARS_PER_TRAIN 255
#define MAX_STATIONS 4
#define MAX_RIDES 255
#define RIDE_TYPE_NULL 255
@ -215,7 +216,7 @@ struct Ride
ObjectEntryIndex subtype;
RideMode mode;
uint8_t colour_scheme_type;
VehicleColour vehicle_colours[MAX_CARS_PER_TRAIN];
VehicleColour vehicle_colours[MAX_VEHICLE_COLOURS];
// 0 = closed, 1 = open, 2 = test
uint8_t status;
std::string custom_name;