Fix through load crash when rear unit is longer than platform with no capacity
This commit is contained in:
@@ -439,8 +439,19 @@ int GetTrainStopLocation(StationID station_id, TileIndex tile, Train *v, bool up
|
|||||||
}
|
}
|
||||||
if (osl == OSL_PLATFORM_THROUGH && overhang > 0) {
|
if (osl == OSL_PLATFORM_THROUGH && overhang > 0) {
|
||||||
/* The train is longer than the station, and we can run through the station to load/unload */
|
/* The train is longer than the station, and we can run through the station to load/unload */
|
||||||
|
bool advance_beyond_platform_end = false;
|
||||||
|
if (update_train_state) {
|
||||||
|
/* Only advance beyond platform end if there is at least one vehicle with capacity in the active part of the train.
|
||||||
|
* This avoids the entire train being beyond the platform end. */
|
||||||
for (Train *u = v; u != nullptr; u = u->Next()) {
|
for (Train *u = v; u != nullptr; u = u->Next()) {
|
||||||
if (update_train_state && overhang > 0 && !HasBit(u->flags, VRF_BEYOND_PLATFORM_END) && !u->IsArticulatedPart()) {
|
if (u->cargo_cap != 0) {
|
||||||
|
advance_beyond_platform_end = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (Train *u = v; u != nullptr; u = u->Next()) {
|
||||||
|
if (advance_beyond_platform_end && overhang > 0 && !HasBit(u->flags, VRF_BEYOND_PLATFORM_END) && !u->IsArticulatedPart()) {
|
||||||
bool skip = true;
|
bool skip = true;
|
||||||
for (const Train *part = u; part != nullptr; part = part->HasArticulatedPart() ? part->GetNextArticulatedPart() : nullptr) {
|
for (const Train *part = u; part != nullptr; part = part->HasArticulatedPart() ? part->GetNextArticulatedPart() : nullptr) {
|
||||||
if (part->cargo_cap != 0) {
|
if (part->cargo_cap != 0) {
|
||||||
|
Reference in New Issue
Block a user