diff options
author | terkhen <terkhen@openttd.org> | 2010-12-21 13:53:19 +0000 |
---|---|---|
committer | terkhen <terkhen@openttd.org> | 2010-12-21 13:53:19 +0000 |
commit | 8fc48a79dae5d60a8b1c3db7d663f1188e2aba2c (patch) | |
tree | d3d556de79228ee87ffda7f81eb2a8170f6170aa | |
parent | a1ff6859c501dd90152b912f748d2b452d745acc (diff) | |
download | openttd-8fc48a79dae5d60a8b1c3db7d663f1188e2aba2c.tar.xz |
(svn r21562) -Change: Add articulated parts of vehicles in a refit selection to that selection.
-rw-r--r-- | src/vehicle.cpp | 21 |
1 files changed, 20 insertions, 1 deletions
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(); } } } |