Mercurial > hg > openttd
changeset 16147:2c2d2a90fd54 draft
(svn r20843) -Fix [FS#2534] (r20506): Make sure (gradual) loading is properly terminated for consists with multiple cargo types. Don't stop loading if the timetabled wait is not over yet. (Steve-N)
author | michi_cc <michi_cc@openttd.org> |
---|---|
date | Sat, 25 Sep 2010 12:48:33 +0000 |
parents | a71a87e852a7 |
children | 8ab03dda5d20 |
files | src/economy.cpp |
diffstat | 1 files changed, 14 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/src/economy.cpp +++ b/src/economy.cpp @@ -1158,7 +1158,7 @@ bool completely_emptied = true; bool anything_unloaded = false; bool anything_loaded = false; - bool full_load_amount = false; + uint32 full_load_amount = 0; uint32 cargo_not_full = 0; uint32 cargo_full = 0; @@ -1280,7 +1280,13 @@ count = cargo_left[v->cargo_type]; cargo_left[v->cargo_type] -= cap; } - if (count >= (uint)cap_left) full_load_amount = true; + + /* Store whether the maximum possible load amount was loaded or not.*/ + if (count >= (uint)cap_left) { + SetBit(full_load_amount, v->cargo_type); + } else { + ClrBit(full_load_amount, v->cargo_type); + } if (v->cargo.Empty()) TriggerVehicle(v, VEHICLE_TRIGGER_NEW_CARGO); @@ -1342,8 +1348,12 @@ unloading_time = gradual_loading_wait_time[v->type]; } - /* We loaded less cargo than possible and it's not full load, stop loading. */ - if (!anything_unloaded && !full_load_amount && !(v->current_order.GetLoadType() & OLFB_FULL_LOAD)) SetBit(u->vehicle_flags, VF_STOP_LOADING); + /* We loaded less cargo than possible for all cargo types and it's not full + * load and we're not supposed to wait any longer: stop loading. */ + if (!anything_unloaded && full_load_amount == 0 && !(v->current_order.GetLoadType() & OLFB_FULL_LOAD) && + (!_settings_game.order.timetabling || v->current_order_time >= (uint)max(v->current_order.wait_time - v->lateness_counter, 0))) { + SetBit(v->vehicle_flags, VF_STOP_LOADING); + } } else { bool finished_loading = true; if (v->current_order.GetLoadType() & OLFB_FULL_LOAD) {