Mercurial > hg > openttd
changeset 16828:41819c032e1b draft
(svn r21562) -Change: Add articulated parts of vehicles in a refit selection to that selection.
author | terkhen <terkhen@openttd.org> |
---|---|
date | Tue, 21 Dec 2010 13:53:19 +0000 |
parents | e7b5830c41b1 |
children | d920c1a24af8 |
files | src/vehicle.cpp |
diffstat | 1 files changed, 20 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -2269,9 +2269,28 @@ 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(); } } }