From 8fc48a79dae5d60a8b1c3db7d663f1188e2aba2c Mon Sep 17 00:00:00 2001 From: terkhen Date: Tue, 21 Dec 2010 13:53:19 +0000 Subject: (svn r21562) -Change: Add articulated parts of vehicles in a refit selection to that selection. --- src/vehicle.cpp | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 94a4c488f..e1065f823 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -2269,9 +2269,28 @@ const GroundVehicleCache *Vehicle::GetGroundVehicleCache() const void GetVehicleSet(VehicleSet &set, Vehicle *v, uint8 num_vehicles) { if (v->type == VEH_TRAIN) { - for (Train *u = Train::From(v); u != NULL && num_vehicles > 0; num_vehicles--, u = u->Next()) { + Train *u = Train::From(v); + /* If the first vehicle in the selection is part of an articulated vehicle, add the previous parts of the vehicle. */ + if (u->IsArticulatedPart()) { + u = u->GetFirstEnginePart(); + while (u->index != v->index) { + set.Include(u->index); + u = u->GetNextArticPart(); + } + } + + for (;u != NULL && num_vehicles > 0; num_vehicles--, u = u->Next()) { /* Include current vehicle in the selection. */ set.Include(u->index); + + /* If the vehicle is multiheaded, add the other part too. */ + if (u->IsMultiheaded()) set.Include(u->other_multiheaded_part->index); + } + + /* If the last vehicle is part of an articulated vehicle, add the following parts of the vehicle. */ + while (u != NULL && u->IsArticulatedPart()) { + set.Include(u->index); + u = u->Next(); } } } -- cgit v1.2.3-70-g09d2