mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-02-04 05:15:21 +00:00
(svn r19755) -Fix: Blocked roadvehicles should first check whether they are still blocked before accelerating again, instead of continuous starting/stopping.
This commit is contained in:
parent
809dd8a54c
commit
fc646a16a4
@ -1598,13 +1598,18 @@ static bool RoadVehController(RoadVehicle *v)
|
|||||||
int j = RoadVehAccelerate(v);
|
int j = RoadVehAccelerate(v);
|
||||||
|
|
||||||
int adv_spd = (v->direction & 1) ? 192 : 256;
|
int adv_spd = (v->direction & 1) ? 192 : 256;
|
||||||
|
bool blocked = false;
|
||||||
while (j >= adv_spd) {
|
while (j >= adv_spd) {
|
||||||
j -= adv_spd;
|
j -= adv_spd;
|
||||||
|
|
||||||
RoadVehicle *u = v;
|
RoadVehicle *u = v;
|
||||||
for (RoadVehicle *prev = NULL; u != NULL; prev = u, u = u->Next()) {
|
for (RoadVehicle *prev = NULL; u != NULL; prev = u, u = u->Next()) {
|
||||||
if (!IndividualRoadVehicleController(u, prev)) break;
|
if (!IndividualRoadVehicleController(u, prev)) {
|
||||||
|
blocked = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
if (blocked) break;
|
||||||
|
|
||||||
/* 192 spd used for going straight, 256 for going diagonally. */
|
/* 192 spd used for going straight, 256 for going diagonally. */
|
||||||
adv_spd = (v->direction & 1) ? 192 : 256;
|
adv_spd = (v->direction & 1) ? 192 : 256;
|
||||||
@ -1619,7 +1624,10 @@ static bool RoadVehController(RoadVehicle *v)
|
|||||||
u->UpdateViewport(false, false);
|
u->UpdateViewport(false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (v->progress == 0) v->progress = j;
|
/* If movement is blocked, set 'progress' to its maximum, so the roadvehicle does
|
||||||
|
* not accelerate again before it can actually move. I.e. make sure it tries to advance again
|
||||||
|
* on next tick to discover whether it is still blocked. */
|
||||||
|
if (v->progress == 0) v->progress = blocked ? adv_spd - 1 : j;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user