1
0
Fork 0

Fix: Inaccurate waiting cargo total in station window when using cargodist (#11213)

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

The displayed total should match GoodsEntry::TotalCount().
pull/11268/head
Jonathan G Rennison 2023-09-06 20:36:26 +01:00 committed by GitHub
parent 21bd5fb991
commit 0316940fe8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 16 additions and 2 deletions

View File

@ -1603,9 +1603,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);
}
}