vehicle.h
changeset 2602 f0e2dcce3695
parent 2601 7c94a0e394a6
child 2617 a9e1a187de99
--- a/vehicle.h	Sat Nov 05 14:01:00 2005 +0000
+++ b/vehicle.h	Sat Nov 05 16:07:26 2005 +0000
@@ -30,6 +30,7 @@
 // 1 and 3 do not appear to be used
 typedef enum TrainSubtypes {
 	TS_Front_Engine = 0, // Leading engine of a train
+	TS_Artic_Part = 1,   // Articulated part of an engine
 	TS_Not_First = 2,    // Wagon or additional engine
 	TS_Free_Car = 4,     // First in a wagon chain (in depot)
 } TrainSubtype;
@@ -414,6 +415,41 @@
 	return index < GetVehiclePoolSize();
 }
 
+/**
+ * Get the next real (non-articulated part) vehicle in the consist.
+ * @param v Vehicle.
+ * @return Next vehicle in the consist.
+ */
+static inline Vehicle *GetNextVehicle(const Vehicle *v)
+{
+	Vehicle *u = v->next;
+	while (u != NULL && u->subtype == TS_Artic_Part) {
+		u = u->next;
+	}
+	return u;
+}
+
+/**
+ * Check if an engine has an articulated part.
+ * @param v Vehicle.
+ * @return True if the engine has an articulated part.
+ */
+static inline bool EngineHasArticPart(const Vehicle *v)
+{
+	return (v->next != NULL && v->next->subtype == TS_Artic_Part);
+}
+
+/**
+ * Get the last part of a multi-part engine.
+ * @param v Vehicle.
+ * @return Last part of the engine.
+ */
+static inline Vehicle *GetLastEnginePart(Vehicle *v)
+{
+	while (EngineHasArticPart(v)) v = v->next;
+	return v;
+}
+
 /* Returns order 'index' of a vehicle or NULL when it doesn't exists */
 static inline Order *GetVehicleOrder(const Vehicle *v, int index)
 {