diff options
author | rubidium <rubidium@openttd.org> | 2007-05-30 18:22:56 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2007-05-30 18:22:56 +0000 |
commit | 2bfc36c1ba22d186bfc013a06e3fd1cc9cfcd852 (patch) | |
tree | 253a9753be4672ff16754117a76c51f42afac695 | |
parent | 70e6102c86b55a6b269bbe931309d9a57b65cd2e (diff) | |
download | openttd-2bfc36c1ba22d186bfc013a06e3fd1cc9cfcd852.tar.xz |
(svn r9989) -Fix [FS#817]: trams/road vehicles did go to the closest road stop regardless whether they could actually "drive" on there.
-rw-r--r-- | src/roadveh_cmd.cpp | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/roadveh_cmd.cpp b/src/roadveh_cmd.cpp index d411e92a7..ba731b9e9 100644 --- a/src/roadveh_cmd.cpp +++ b/src/roadveh_cmd.cpp @@ -729,11 +729,14 @@ static void ProcessRoadVehOrder(Vehicle *v) IsCargoInClass(v->cargo_type, CC_PASSENGERS) ? RoadStop::BUS : RoadStop::TRUCK ); + TileIndex dest = INVALID_TILE; if (rs != NULL) { - TileIndex dest = rs->xy; - uint mindist = DistanceManhattan(v->tile, rs->xy); + uint mindist = MAX_UVALUE(uint); + + for (; rs != NULL; rs = rs->next) { + /* The vehicle cannot go to this roadstop */ + if ((GetRoadTypes(rs->xy) & v->u.road.compatible_roadtypes) == ROADTYPES_NONE) continue; - for (rs = rs->next; rs != NULL; rs = rs->next) { uint dist = DistanceManhattan(v->tile, rs->xy); if (dist < mindist) { @@ -741,7 +744,10 @@ static void ProcessRoadVehOrder(Vehicle *v) dest = rs->xy; } } - v->dest_tile = dest; + } + + if (dest != INVALID_TILE) { + v->dest_tile = dest; } else { /* There is no stop left at the station, so don't even TRY to go there */ v->cur_order_index++; |