summaryrefslogtreecommitdiff
path: root/src/articulated_vehicles.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/articulated_vehicles.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/articulated_vehicles.cpp')
-rw-r--r--src/articulated_vehicles.cpp36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/articulated_vehicles.cpp b/src/articulated_vehicles.cpp
index c2ca4c7ec..c4947bc3b 100644
--- a/src/articulated_vehicles.cpp
+++ b/src/articulated_vehicles.cpp
@@ -34,6 +34,42 @@ uint CountArticulatedParts(EngineID engine_type, bool purchase_window)
return i - 1;
}
+
+uint16 *GetCapacityOfArticulatedParts(EngineID engine, VehicleType type)
+{
+ static uint16 capacity[NUM_CARGO];
+ memset(capacity, 0, sizeof(capacity));
+
+ if (type == VEH_TRAIN) {
+ const RailVehicleInfo *rvi = RailVehInfo(engine);
+ capacity[rvi->cargo_type] = rvi->capacity;
+ if (rvi->railveh_type == RAILVEH_MULTIHEAD) capacity[rvi->cargo_type] += rvi->capacity;
+ } else if (type == VEH_ROAD) {
+ const RoadVehicleInfo *rvi = RoadVehInfo(engine);
+ capacity[rvi->cargo_type] = rvi->capacity;
+ }
+
+ if (!HasBit(EngInfo(engine)->callbackmask, CBM_VEHICLE_ARTIC_ENGINE)) return capacity;
+
+ for (uint i = 1; i < MAX_UVALUE(EngineID); i++) {
+ uint16 callback = GetVehicleCallback(CBID_VEHICLE_ARTIC_ENGINE, i, 0, engine, NULL);
+ if (callback == CALLBACK_FAILED || callback == 0xFF) break;
+
+ EngineID artic_engine = GetFirstEngineOfType(type) + GB(callback, 0, 7);
+
+ if (type == VEH_TRAIN) {
+ const RailVehicleInfo *rvi = RailVehInfo(artic_engine);
+ capacity[rvi->cargo_type] += GetEngineProperty(artic_engine, 0x14, rvi->capacity);
+ } else if (type == VEH_ROAD) {
+ const RoadVehicleInfo *rvi = RoadVehInfo(artic_engine);
+ capacity[rvi->cargo_type] += GetEngineProperty(artic_engine, 0x0F, rvi->capacity);
+ }
+ }
+
+ return capacity;
+}
+
+
void AddArticulatedParts(Vehicle **vl, VehicleType type)
{
const Vehicle *v = vl[0];