mirror of
https://github.com/OpenTTD/OpenTTD
synced 2026-01-27 22:24:28 +01:00
Fix: Articulated road vehicle following with immediately sequential u-turns (#15170)
This commit is contained in:
committed by
GitHub
parent
24a4f3b1a6
commit
44612d5b59
@@ -1076,7 +1076,7 @@ static Trackdir FollowPreviousRoadVehicle(const RoadVehicle *v, const RoadVehicl
|
||||
if (diag_dir == INVALID_DIAGDIR) return INVALID_TRACKDIR;
|
||||
dir = DiagDirToDiagTrackdir(diag_dir);
|
||||
} else {
|
||||
if (already_reversed && prev->tile != tile) {
|
||||
if (already_reversed && (prev->tile != tile || (prev_state < TRACKDIR_END && IsReversingRoadTrackdir(static_cast<Trackdir>(prev_state))))) {
|
||||
/*
|
||||
* The vehicle has reversed, but did not go straight back.
|
||||
* It immediately turn onto another tile. This means that
|
||||
@@ -1092,10 +1092,16 @@ static Trackdir FollowPreviousRoadVehicle(const RoadVehicle *v, const RoadVehicl
|
||||
* going over the trackdirs used for turning 90 degrees, i.e.
|
||||
* TRACKDIR_{UPPER,RIGHT,LOWER,LEFT}_{N,E,S,W}.
|
||||
*/
|
||||
bool north;
|
||||
if (prev->tile != tile) {
|
||||
north = prev->tile < tile;
|
||||
} else {
|
||||
north = (prev_state == TRACKDIR_RVREV_NW || prev_state == TRACKDIR_RVREV_NE);
|
||||
}
|
||||
static const 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)];
|
||||
dir = reversed_turn_lookup[north ? 0 : 1][ReverseDiagDir(entry_dir)];
|
||||
} 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) {
|
||||
|
||||
Reference in New Issue
Block a user