summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/autoreplace_cmd.cpp3
-rw-r--r--src/train.h13
2 files changed, 14 insertions, 2 deletions
diff --git a/src/autoreplace_cmd.cpp b/src/autoreplace_cmd.cpp
index 4791dde3c..ca0d2c06e 100644
--- a/src/autoreplace_cmd.cpp
+++ b/src/autoreplace_cmd.cpp
@@ -249,8 +249,7 @@ static CommandCost ReplaceVehicle(Vehicle **w, byte flags, Money total_cost)
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. */
diff --git a/src/train.h b/src/train.h
index d2cfa1268..db9e53c6a 100644
--- a/src/train.h
+++ b/src/train.h
@@ -248,6 +248,19 @@ static inline Vehicle *GetNextVehicle(const Vehicle *v)
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);