changeset 7527:6508f031bb0b draft

(svn r11046) -Codechange: added function to get the next movable (non-articulated, non-read end of dualheaded engine) vehicle in a train
author bjarni <bjarni@openttd.org>
date Wed, 05 Sep 2007 10:33:42 +0000
parents e463f6756541
children fc1e988036ea
files src/autoreplace_cmd.cpp src/train.h
diffstat 2 files changed, 14 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/autoreplace_cmd.cpp
+++ b/src/autoreplace_cmd.cpp
@@ -249,8 +249,7 @@
 		CommandCost tmp_move;
 
 		if (old_v->type == VEH_TRAIN && IsFrontEngine(old_v)) {
-			Vehicle *next_veh = GetNextVehicle(old_v);
-			if (IsRearDualheaded(next_veh)) next_veh = next_veh->Next(); // don't try to move the rear multiheaded engine
+			Vehicle *next_veh = GetNextUnit(old_v); // don't try to move the rear multiheaded engine or articulated parts
 			if (next_veh != NULL) {
 				/* Verify that the wagons can be placed on the engine in question.
 				 * This is done by building an engine, test if the wagons can be added and then sell the test engine. */
--- a/src/train.h
+++ b/src/train.h
@@ -248,6 +248,19 @@
 	return v->Next();
 }
 
+/** Get the next real (non-articulated part and non rear part of dualheaded engine) vehicle in the consist.
+ * @param v Vehicle.
+ * @return Next vehicle in the consist.
+ */
+static inline Vehicle *GetNextUnit(Vehicle *v)
+{
+	assert(v->type == VEH_TRAIN);
+	v = GetNextVehicle(v);
+	if (v != NULL && IsRearDualheaded(v)) v = v->Next();
+
+	return v;
+}
+
 void ConvertOldMultiheadToNew();
 void ConnectMultiheadedTrains();
 uint CountArticulatedParts(EngineID engine_type);