diff options
author | peter1138 <peter1138@openttd.org> | 2008-02-14 07:25:24 +0000 |
---|---|---|
committer | peter1138 <peter1138@openttd.org> | 2008-02-14 07:25:24 +0000 |
commit | 3371d0244963f6f9d077761c0897baab4d91f891 (patch) | |
tree | 4e1c1e1e7e281723915de9307d1471df65126a4c /src/build_vehicle_gui.cpp | |
parent | 539c635efdafa91683839d1439953d6fdf514eb9 (diff) | |
download | openttd-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.cpp | 46 |
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; |