1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-26 08:14:38 +01:00

Remove calls to ride_entry_get_train_layout and replace with calls to ride_entry_get_vehicle_at_position

This commit is contained in:
X7123M3-256
2016-03-29 19:36:11 +01:00
committed by Michał Janiszewski
parent 34a67436cd
commit fd5bb09271
3 changed files with 29 additions and 30 deletions

View File

@@ -4571,12 +4571,9 @@ train_ref vehicle_create_train(int rideIndex, int x, int y, int z, int vehicleIn
{
rct_ride *ride = get_ride(rideIndex);
uint8 trainLayout[RIDE_MAX_CARS_PER_TRAIN];
ride_entry_get_train_layout(ride->subtype, ride->num_cars_per_train, trainLayout);
train_ref train = { NULL, NULL };
for (int carIndex = 0; carIndex < ride->num_cars_per_train; carIndex++) {
rct_vehicle *car = vehicle_create_car(rideIndex, trainLayout[carIndex], carIndex, vehicleIndex, x, y, z, remainingDistance, mapElement);
rct_vehicle *car = vehicle_create_car(rideIndex, ride_entry_get_vehicle_at_position(ride->subtype,ride->num_cars_per_train,carIndex), carIndex, vehicleIndex, x, y, z, remainingDistance, mapElement);
if (carIndex == 0) {
train.head = car;
} else {
@@ -7363,6 +7360,22 @@ void ride_entry_get_train_layout(int rideEntryIndex, int numCarsPerTrain, uint8
}
}
uint8 ride_entry_get_vehicle_at_position(int rideEntryIndex,int numCarsPerTrain,int position)
{
rct_ride_entry *rideEntry = get_ride_entry(rideEntryIndex);
if (position == 0 && rideEntry->front_vehicle != 255) {
return rideEntry->front_vehicle;
} else if (position == 1 && rideEntry->second_vehicle != 255) {
return rideEntry->second_vehicle;
} else if (position == 2 && rideEntry->third_vehicle != 255) {
return rideEntry->third_vehicle;
} else if (position == numCarsPerTrain - 1 && rideEntry->rear_vehicle != 255) {
return rideEntry->rear_vehicle;
} else {
return rideEntry->default_vehicle;
}
}
int ride_get_smallest_station_length(rct_ride *ride)
{
uint32 result = -1;
@@ -7437,7 +7450,7 @@ void ride_update_max_vehicles(int rideIndex)
rct_ride *ride;
rct_ride_entry *rideEntry;
rct_ride_entry_vehicle *vehicleEntry;
uint8 trainLayout[RIDE_MAX_CARS_PER_TRAIN], numCarsPerTrain, numVehicles;
uint8 numCarsPerTrain, numVehicles;
int trainLength, maxNumTrains;
ride = get_ride(rideIndex);
@@ -7459,11 +7472,10 @@ void ride_update_max_vehicles(int rideIndex)
int maxFriction = RideData5[ride->type].max_friction << 8;
int maxCarsPerTrain = 1;
for (int numCars = rideEntry->max_cars_in_train; numCars > 0; numCars--) {
ride_entry_get_train_layout(ride->subtype, numCars, trainLayout);
trainLength = 0;
int totalFriction = 0;
for (int i = 0; i < numCars; i++) {
vehicleEntry = &rideEntry->vehicles[trainLayout[i]];
vehicleEntry = &rideEntry->vehicles[ride_entry_get_vehicle_at_position(ride->subtype,numCars,i)];
trainLength += vehicleEntry->spacing;
totalFriction += vehicleEntry->car_friction;
}
@@ -7494,10 +7506,9 @@ void ride_update_max_vehicles(int rideIndex)
break;
default:
// Calculate maximum number of trains
ride_entry_get_train_layout(ride->subtype, newCarsPerTrain, trainLayout);
trainLength = 0;
for (int i = 0; i < newCarsPerTrain; i++) {
vehicleEntry = &rideEntry->vehicles[trainLayout[i]];
vehicleEntry = &rideEntry->vehicles[ride_entry_get_vehicle_at_position(ride->subtype,newCarsPerTrain,i)];
trainLength += vehicleEntry->spacing;
}
@@ -7517,13 +7528,12 @@ void ride_update_max_vehicles(int rideIndex)
) {
maxNumTrains = min(maxNumTrains, 31);
} else {
ride_entry_get_train_layout(ride->subtype, newCarsPerTrain, trainLayout);
vehicleEntry = &rideEntry->vehicles[trainLayout[0]];
vehicleEntry = &rideEntry->vehicles[ride_entry_get_vehicle_at_position(ride->subtype,newCarsPerTrain,0)];
int speed = vehicleEntry->powered_max_speed;
int totalSpacing = 0;
for (int i = 0; i < newCarsPerTrain; i++) {
vehicleEntry = &rideEntry->vehicles[trainLayout[i]];
vehicleEntry = &rideEntry->vehicles[ride_entry_get_vehicle_at_position(ride->subtype,newCarsPerTrain,i)];
totalSpacing += vehicleEntry->spacing;
}

View File

@@ -1038,6 +1038,7 @@ bool ride_are_all_possible_entrances_and_exits_built(rct_ride *ride);
void ride_fix_breakdown(int rideIndex, int reliabilityIncreaseFactor);
void ride_entry_get_train_layout(int rideEntryIndex, int numCarsPerTrain, uint8 *trainLayout);
uint8 ride_entry_get_vehicle_at_position(int rideEntryIndex, int numCarsPerTrain, int position);
void ride_update_max_vehicles(int rideIndex);
void ride_set_ride_entry(int rideIndex, int rideEntry);