changeset 16829:d920c1a24af8 draft

(svn r21563) -Codechange: Add function to get the width of a vehicle.
author terkhen <terkhen@openttd.org>
date Tue, 21 Dec 2010 13:54:57 +0000
parents 41819c032e1b
children 36b4cb0c0efa
files src/vehicle_gui.cpp src/vehicle_gui.h
diffstat 2 files changed, 36 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/vehicle_gui.cpp
+++ b/src/vehicle_gui.cpp
@@ -2397,3 +2397,37 @@
 	const Vehicle *v = Vehicle::Get(_new_vehicle_id);
 	ShowVehicleViewWindow(v);
 }
+
+/**
+ * Get the width of a vehicle (including all parts of the consist) in pixels.
+ * @param v Vehicle to get the width for.
+ * @return Width of the vehicle.
+ */
+int GetVehicleWidth(Vehicle *v)
+{
+	int vehicle_width = 0;
+
+	switch (v->type) {
+		case VEH_TRAIN:
+			for (const Train *u = Train::From(v); u != NULL; u = u->Next()) {
+				vehicle_width += u->GetDisplayImageWidth();
+			}
+			break;
+
+		case VEH_ROAD:
+			for (const RoadVehicle *u = RoadVehicle::From(v); u != NULL; u = u->Next()) {
+				vehicle_width += u->GetDisplayImageWidth();
+			}
+			break;
+
+		default:
+			bool rtl = _current_text_dir == TD_RTL;
+			SpriteID sprite = v->GetImage(rtl ? DIR_E : DIR_W);
+			const Sprite *real_sprite = GetSprite(sprite, ST_NORMAL);
+			vehicle_width = real_sprite->width;
+
+			break;
+	}
+
+	return vehicle_width;
+}
--- a/src/vehicle_gui.h
+++ b/src/vehicle_gui.h
@@ -73,6 +73,8 @@
 	return (type == VEH_TRAIN || type == VEH_ROAD) ? 14 : 24;
 }
 
+int GetVehicleWidth(Vehicle *v);
+
 /**
  * Get WindowClass for vehicle list of given vehicle type
  * @param vt vehicle type to check