mirror of https://github.com/OpenTTD/OpenTTD
(svn r11419) -Fix [FS#1388]: articulated vehicle breaking up when making a 90 degree turn immediately after a 180 degree turn.
parent
0660d2a3d6
commit
04925c3f12
|
@ -1415,7 +1415,29 @@ static Trackdir FollowPreviousRoadVehicle(const Vehicle *v, const Vehicle *prev,
|
|||
} else if (HASBIT(prev_state, RVS_IN_DT_ROAD_STOP)) {
|
||||
dir = (Trackdir)(prev_state & RVSB_ROAD_STOP_TRACKDIR_MASK);
|
||||
} else if (prev_state < TRACKDIR_END) {
|
||||
dir = (Trackdir)prev_state;
|
||||
if (already_reversed && prev->tile != tile) {
|
||||
/*
|
||||
* The vehicle has reversed, but did not go straight back.
|
||||
* It immediatelly turn onto another tile. This means that
|
||||
* the roadstate of the previous vehicle cannot be used
|
||||
* as the direction we have to go with this vehicle.
|
||||
*
|
||||
* Next table is build in the following way:
|
||||
* - first row for when the vehicle in front went to the northern or
|
||||
* western tile, second for southern and eastern.
|
||||
* - columns represent the entry direction.
|
||||
* - cell values are determined by the Trackdir one has to take from
|
||||
* the entry dir (column) to the tile in north or south by only
|
||||
* going over the trackdirs used for turning 90 degrees, i.e.
|
||||
* TRACKDIR_{UPPER,RIGHT,LOWER,LEFT}_{N,E,S,W}.
|
||||
*/
|
||||
Trackdir reversed_turn_lookup[2][DIAGDIR_END] = {
|
||||
{ TRACKDIR_UPPER_W, TRACKDIR_RIGHT_N, TRACKDIR_LEFT_N, TRACKDIR_UPPER_E },
|
||||
{ TRACKDIR_RIGHT_S, TRACKDIR_LOWER_W, TRACKDIR_LOWER_E, TRACKDIR_LEFT_S }};
|
||||
dir = reversed_turn_lookup[prev->tile < tile ? 0 : 1][ReverseDiagDir(entry_dir)];
|
||||
} else {
|
||||
dir = (Trackdir)prev_state;
|
||||
}
|
||||
} else {
|
||||
return INVALID_TRACKDIR;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue