diff options
author | maedhros <maedhros@openttd.org> | 2007-08-06 12:46:49 +0000 |
---|---|---|
committer | maedhros <maedhros@openttd.org> | 2007-08-06 12:46:49 +0000 |
commit | 371a0c4be633601435b8abe02d500f03bd564fc2 (patch) | |
tree | a6e8360d9ce50e6620a1a86a05eb8100f38c821d /src | |
parent | b17975d1f226e7c83f457c32221b9569622210e3 (diff) | |
download | openttd-371a0c4be633601435b8abe02d500f03bd564fc2.tar.xz |
(svn r10809) -Fix (r10097): When reversing, articulated parts of road vehicles should not attempt to do their own pathfinding.
Diffstat (limited to 'src')
-rw-r--r-- | src/roadveh_cmd.cpp | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/src/roadveh_cmd.cpp b/src/roadveh_cmd.cpp index 56d48a816..0e4a5751d 100644 --- a/src/roadveh_cmd.cpp +++ b/src/roadveh_cmd.cpp @@ -1376,9 +1376,9 @@ static bool RoadVehLeaveDepot(Vehicle *v, bool first) return true; } -static Trackdir FollowPreviousRoadVehicle(const Vehicle *v, const Vehicle *prev, TileIndex tile, DiagDirection entry_dir) +static Trackdir FollowPreviousRoadVehicle(const Vehicle *v, const Vehicle *prev, TileIndex tile, DiagDirection entry_dir, bool already_reversed) { - if (prev->tile == v->tile) { + if (prev->tile == v->tile && !already_reversed) { /* If the previous vehicle is on the same tile as this vehicle is * then it must have reversed. */ return _road_reverse_table[entry_dir]; @@ -1491,7 +1491,7 @@ static bool IndividualRoadVehicleController(Vehicle *v, const Vehicle *prev) /* If this is the front engine, look for the right path. */ dir = RoadFindPathToDest(v, tile, (DiagDirection)(rd.x & 3)); } else { - dir = FollowPreviousRoadVehicle(v, prev, tile, (DiagDirection)(rd.x & 3)); + dir = FollowPreviousRoadVehicle(v, prev, tile, (DiagDirection)(rd.x & 3), false); } if (dir == INVALID_TRACKDIR) { @@ -1583,11 +1583,18 @@ again: if (rd.x & RDE_TURNED) { /* Vehicle has finished turning around, it will now head back onto the same tile */ - Trackdir dir = RoadFindPathToDest(v, v->tile, (DiagDirection)(rd.x & 3)); + Trackdir dir; uint32 r; Direction newdir; const RoadDriveEntry *rdp; + if (IsRoadVehFront(v)) { + /* If this is the front engine, look for the right path. */ + dir = RoadFindPathToDest(v, v->tile, (DiagDirection)(rd.x & 3)); + } else { + dir = FollowPreviousRoadVehicle(v, prev, v->tile, (DiagDirection)(rd.x & 3), true); + } + if (dir == INVALID_TRACKDIR) { v->cur_speed = 0; return false; |