vehicle.c
changeset 4574 497540b4a75f
parent 4560 f744bf3dd85a
child 4603 3ccd4ee0a2e2
--- a/vehicle.c	Fri Sep 08 03:59:38 2006 +0000
+++ b/vehicle.c	Fri Sep 08 10:47:39 2006 +0000
@@ -535,8 +535,28 @@
 	return count;
 }
 
+/** Check if a vehicle is counted in num_engines in each player struct
+ * @param *v Vehicle to test
+ * @return true if the vehicle is counted in num_engines
+ */
+bool IsEngineCountable(const Vehicle *v)
+{
+	switch (v->type) {
+		case VEH_Aircraft: return (v->subtype <= 2); // don't count plane shadows and helicopter rotors
+		case VEH_Train:
+			return !IsArticulatedPart(v) && // tenders and other articulated parts
+			(!IsMultiheaded(v) || IsTrainEngine(v)); // rear parts of multiheaded engines
+		case VEH_Road:
+		case VEH_Ship:
+			return true;
+		default: return false; // Only count player buildable vehicles
+	}
+}
+
 void DestroyVehicle(Vehicle *v)
 {
+	if (IsEngineCountable(v)) GetPlayer(v->owner)->num_engines[v->engine_type]--;
+
 	DeleteVehicleNews(v->index, INVALID_STRING_ID);
 
 	DeleteName(v->string_id);