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/articulated_vehicles.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/articulated_vehicles.cpp')
-rw-r--r-- | src/articulated_vehicles.cpp | 36 |
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]; |