diff options
author | rubidium <rubidium@openttd.org> | 2007-05-03 11:02:37 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2007-05-03 11:02:37 +0000 |
commit | 9194d5ab9e46dd12d4098e7cf99727df9f8b9eca (patch) | |
tree | 58e22a3850350c61b45c4e7d5051888d7bfa8c18 /src/vehicle.cpp | |
parent | c584b7a40124e11ef209a240bcbe555263740c34 (diff) | |
download | openttd-9194d5ab9e46dd12d4098e7cf99727df9f8b9eca.tar.xz |
(svn r9772) -Fix [r9770,FS#761]: under some circumstances loading/unloading didn't work (correctly).
Diffstat (limited to 'src/vehicle.cpp')
-rw-r--r-- | src/vehicle.cpp | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 8920c4376..41cb04caa 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -743,27 +743,30 @@ static bool CanFillVehicle_FullLoadAny(Vehicle *v) } -bool CanFillVehicle(Vehicle *v) +bool CanFillVehicle(Vehicle *front_v) { - TileIndex tile = v->tile; + TileIndex tile = front_v->tile; - if (IsTileType(tile, MP_STATION) || - (v->type == VEH_SHIP && ( + assert(IsTileType(tile, MP_STATION) || + (front_v->type == VEH_SHIP && ( IsTileType(TILE_ADDXY(tile, 1, 0), MP_STATION) || IsTileType(TILE_ADDXY(tile, -1, 0), MP_STATION) || IsTileType(TILE_ADDXY(tile, 0, 1), MP_STATION) || IsTileType(TILE_ADDXY(tile, 0, -1), MP_STATION) || IsTileType(TILE_ADDXY(tile, -2, 0), MP_STATION) - ))) { + ))); - /* If patch is active, use alternative CanFillVehicle-function */ - if (_patches.full_load_any && v->current_order.flags & OF_FULL_LOAD) return CanFillVehicle_FullLoadAny(v); + bool full_load = front_v->current_order.flags & OF_FULL_LOAD; - do { - if (v->cargo_count != v->cargo_cap) return true; - } while ((v = v->next) != NULL); - } - return false; + /* If patch is active, use alternative CanFillVehicle-function */ + if (_patches.full_load_any && full_load) return CanFillVehicle_FullLoadAny(front_v); + + Vehicle *v = front_v; + do { + if (HASBIT(v->vehicle_flags, VF_CARGO_UNLOADING) || (full_load && v->cargo_count != v->cargo_cap)) return true; + } while ((v = v->next) != NULL); + + return !HASBIT(front_v->vehicle_flags, VF_LOADING_FINISHED); } /** Check if a given engine type can be refitted to a given cargo |