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();
 		}
 	}
 }