mirror of
https://github.com/JGRennison/OpenTTD-patches.git
synced 2024-11-19 15:25:39 +00:00
Fix overtaking counter overflow issues
This commit is contained in:
parent
13070172ae
commit
5a952d6c7f
@ -1429,6 +1429,12 @@ static void RoadVehCheckFinishOvertake(RoadVehicle *v)
|
||||
v->SetRoadVehicleOvertaking(0);
|
||||
}
|
||||
|
||||
inline byte IncreaseOvertakingCounter(RoadVehicle *v)
|
||||
{
|
||||
if (v->overtaking_ctr != 255) v->overtaking_ctr++;
|
||||
return v->overtaking_ctr;
|
||||
}
|
||||
|
||||
bool IndividualRoadVehicleController(RoadVehicle *v, const RoadVehicle *prev)
|
||||
{
|
||||
SCOPE_INFO_FMT([&], "IndividualRoadVehicleController: %s, %s", scope_dumper().VehicleInfo(v), scope_dumper().VehicleInfo(prev));
|
||||
@ -1445,7 +1451,7 @@ bool IndividualRoadVehicleController(RoadVehicle *v, const RoadVehicle *prev)
|
||||
} else if (v->state < RVSB_IN_ROAD_STOP && !IsStraightRoadTrackdir((Trackdir)v->state) && IsOneWaySideJunctionRoadTile(v->tile)) {
|
||||
/* No turning to/from overtaking lane on one way side road junctions */
|
||||
v->SetRoadVehicleOvertaking(0);
|
||||
} else if (++v->overtaking_ctr >= RV_OVERTAKE_TIMEOUT) {
|
||||
} else if (IncreaseOvertakingCounter(v) >= RV_OVERTAKE_TIMEOUT) {
|
||||
/* If overtaking just aborts at a random moment, we can have a out-of-bound problem,
|
||||
* if the vehicle started a corner. To protect that, only allow an abort of
|
||||
* overtake if we are on straight roads */
|
||||
@ -1455,9 +1461,6 @@ bool IndividualRoadVehicleController(RoadVehicle *v, const RoadVehicle *prev)
|
||||
} else {
|
||||
v->SetRoadVehicleOvertaking(0);
|
||||
}
|
||||
} else if (v->overtaking_ctr == 0) {
|
||||
/* prevent overflow issues */
|
||||
v->overtaking_ctr = 255;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user