mirror of https://github.com/OpenTTD/OpenTTD
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
parent
21bd5fb991
commit
0316940fe8
|
@ -1603,9 +1603,23 @@ struct StationViewWindow : public Window {
|
||||||
continue;
|
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;
|
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);
|
this->ShowCargo(cargo, i, cp->SourceStation(), next, dest_entry->GetStation(), val);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue