Fix: Inaccurate waiting cargo total in station window when using cargodist

For stations with many flows and/or small cargo packets,
due to accumulated inaccuracies in DivideApprox.

The displayed total should match GoodsEntry::TotalCount().
pull/590/head
Jonathan G Rennison 10 months ago
parent c7712bbd20
commit aee13946ff

@ -1770,9 +1770,23 @@ struct StationViewWindow : public Window {
continue;
}
for (CargoDataSet::iterator dest_it = via_entry->Begin(); dest_it != via_entry->End(); ++dest_it) {
uint remaining = cp->Count();
for (CargoDataSet::iterator dest_it = via_entry->Begin(); dest_it != via_entry->End();) {
CargoDataEntry *dest_entry = *dest_it;
uint val = DivideApprox(cp->Count() * dest_entry->GetCount(), via_entry->GetCount());
/* Advance iterator here instead of in the for statement to test whether this is the last entry */
++dest_it;
uint val;
if (dest_it == via_entry->End()) {
/* Allocate all remaining waiting cargo to the last destination to avoid
* waiting cargo being "lost", and the displayed total waiting cargo
* not matching GoodsEntry::TotalCount() */
val = remaining;
} else {
val = std::min<uint>(remaining, DivideApprox(cp->Count() * dest_entry->GetCount(), via_entry->GetCount()));
remaining -= val;
}
this->ShowCargo(cargo, i, cp->SourceStation(), next, dest_entry->GetStation(), val);
}
}

Loading…
Cancel
Save