summaryrefslogtreecommitdiff
path: root/src/build_vehicle_gui.cpp
diff options
context:
space:
mode:
authorpeter1138 <peter1138@openttd.org>2008-02-14 07:25:24 +0000
committerpeter1138 <peter1138@openttd.org>2008-02-14 07:25:24 +0000
commit3371d0244963f6f9d077761c0897baab4d91f891 (patch)
tree4e1c1e1e7e281723915de9307d1471df65126a4c /src/build_vehicle_gui.cpp
parent539c635efdafa91683839d1439953d6fdf514eb9 (diff)
downloadopenttd-3371d0244963f6f9d077761c0897baab4d91f891.tar.xz
(svn r12137) -Fix [FS#1769]: Show cargo capacity for articulated vehicles correctly in the purchase list. Multiple cargo types can also now been shown.
Diffstat (limited to 'src/build_vehicle_gui.cpp')
-rw-r--r--src/build_vehicle_gui.cpp46
1 files changed, 29 insertions, 17 deletions
diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp
index 2922f301b..1ddfb0d62 100644
--- a/src/build_vehicle_gui.cpp
+++ b/src/build_vehicle_gui.cpp
@@ -530,6 +530,26 @@ static const StringID _sort_listing[][11] = {{
INVALID_STRING_ID
}};
+static int DrawCargoCapacityInfo(int x, int y, EngineID engine, VehicleType type, bool refittable)
+{
+ uint16 *cap = GetCapacityOfArticulatedParts(engine, type);
+
+ for (uint c = 0; c < NUM_CARGO; c++) {
+ if (cap[c] == 0) continue;
+
+ SetDParam(0, c);
+ SetDParam(1, cap[c]);
+ SetDParam(2, refittable ? STR_9842_REFITTABLE : STR_EMPTY);
+ DrawString(x, y, STR_PURCHASE_INFO_CAPACITY, TC_FROMSTRING);
+ y += 10;
+
+ /* Only show as refittable once */
+ refittable = false;
+ }
+
+ return y;
+}
+
/* Draw rail wagon specific details */
static int DrawRailWagonPurchaseInfo(int x, int y, EngineID engine_number, const RailVehicleInfo *rvi)
{
@@ -615,13 +635,7 @@ static int DrawRoadVehPurchaseInfo(int x, int y, EngineID engine_number, const R
y += 10;
/* Cargo type + capacity */
- SetDParam(0, rvi->cargo_type);
- SetDParam(1, GetEngineProperty(engine_number, 0x0F, rvi->capacity));
- SetDParam(2, refittable ? STR_9842_REFITTABLE : STR_EMPTY);
- DrawString(x, y, STR_PURCHASE_INFO_CAPACITY, TC_FROMSTRING);
- y += 10;
-
- return y;
+ return DrawCargoCapacityInfo(x, y, engine_number, VEH_ROAD, refittable);
}
/* Draw ship specific details */
@@ -703,7 +717,7 @@ int DrawVehiclePurchaseInfo(int x, int y, uint w, EngineID engine_number)
const RailVehicleInfo *rvi = RailVehInfo(engine_number);
uint capacity = GetEngineProperty(engine_number, 0x14, rvi->capacity);
- refitable = (EngInfo(engine_number)->refit_mask != 0) && (capacity > 0);
+ bool refitable = (EngInfo(engine_number)->refit_mask != 0) && (capacity > 0);
if (rvi->railveh_type == RAILVEH_WAGON) {
y = DrawRailWagonPurchaseInfo(x, y, engine_number, rvi);
@@ -712,20 +726,18 @@ int DrawVehiclePurchaseInfo(int x, int y, uint w, EngineID engine_number)
}
/* Cargo type + capacity, or N/A */
- if (rvi->capacity == 0) {
+ int new_y = DrawCargoCapacityInfo(x, y, engine_number, VEH_TRAIN, refitable);
+
+ if (new_y == y) {
SetDParam(0, CT_INVALID);
SetDParam(2, STR_EMPTY);
+ DrawString(x, y, STR_PURCHASE_INFO_CAPACITY, TC_FROMSTRING);
+ y += 10;
} else {
- int multihead = (rvi->railveh_type == RAILVEH_MULTIHEAD ? 1 : 0);
-
- SetDParam(0, rvi->cargo_type);
- SetDParam(1, (capacity * (CountArticulatedParts(engine_number, true) + 1)) << multihead);
- SetDParam(2, refitable ? STR_9842_REFITTABLE : STR_EMPTY);
+ y = new_y;
}
- DrawString(x, y, STR_PURCHASE_INFO_CAPACITY, TC_FROMSTRING);
- y += 10;
- }
break;
+ }
case VEH_ROAD:
y = DrawRoadVehPurchaseInfo(x, y, engine_number, RoadVehInfo(engine_number));
refitable = true;