summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormaedhros <maedhros@openttd.org>2007-08-06 12:46:49 +0000
committermaedhros <maedhros@openttd.org>2007-08-06 12:46:49 +0000
commit68abeed9b896bc0cf4f08cc0cc3bd4bc03d8fe28 (patch)
treea6e8360d9ce50e6620a1a86a05eb8100f38c821d /src
parent537064d010891fe7a0e1bdd34af15560cb0154c5 (diff)
downloadopenttd-68abeed9b896bc0cf4f08cc0cc3bd4bc03d8fe28.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.cpp15
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;