changeset 13854:f0479d827ebf draft

(svn r18383) -Fix (r18375): triggering NOT_REACHED for some waypoints
author rubidium <rubidium@openttd.org>
date Wed, 02 Dec 2009 18:12:24 +0000
parents ce07aa728b20
children cf7f21e56f62
files src/pathfinder/npf/npf.cpp src/pathfinder/pathfinder_func.h src/pathfinder/yapf/yapf_destrail.hpp
diffstat 3 files changed, 5 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/pathfinder/npf/npf.cpp
+++ b/src/pathfinder/npf/npf.cpp
@@ -453,7 +453,9 @@
 	if (fstd->station_index == INVALID_STATION && tile == fstd->dest_coords) return AYSTAR_FOUND_END_NODE;
 
 	if (IsTileType(tile, MP_STATION) && GetStationIndex(tile) == fstd->station_index) {
-		if (fstd->station_type == STATION_RAIL) return AYSTAR_FOUND_END_NODE;
+		if (fstd->v->type == VEH_TRAIN) return AYSTAR_FOUND_END_NODE;
+
+		assert(fstd->v->type == VEH_ROAD);
 		/* Only if it is a valid station *and* we can stop there */
 		if (GetStationType(tile) == fstd->station_type && (fstd->not_articulated || IsDriveThroughStopTile(tile))) return AYSTAR_FOUND_END_NODE;
 	}
@@ -1090,7 +1092,7 @@
 	if (v->type != VEH_SHIP && (v->current_order.IsType(OT_GOTO_STATION) || v->current_order.IsType(OT_GOTO_WAYPOINT))) {
 		assert(v->type == VEH_TRAIN || v->type == VEH_ROAD);
 		fstd->station_index = v->current_order.GetDestination();
-		fstd->station_type = (v->type == VEH_TRAIN) ? STATION_RAIL : (RoadVehicle::From(v)->IsBus() ? STATION_BUS : STATION_TRUCK);
+		fstd->station_type = (v->type == VEH_TRAIN) ? (v->current_order.IsType(OT_GOTO_STATION) ? STATION_RAIL : STATION_WAYPOINT) : (RoadVehicle::From(v)->IsBus() ? STATION_BUS : STATION_TRUCK);
 		fstd->not_articulated = v->type == VEH_ROAD && !RoadVehicle::From(v)->HasArticulatedPart();
 		/* Let's take the closest tile of the station as our target for vehicles */
 		fstd->dest_coords = CalcClosestStationTile(fstd->station_index, v->tile, fstd->station_type);
--- a/src/pathfinder/pathfinder_func.h
+++ b/src/pathfinder/pathfinder_func.h
@@ -22,7 +22,6 @@
  * @param station The station to calculate the distance to
  * @param tile The tile from where to calculate the distance
  * @param station_type the station type to get the closest tile of
- * @note for simplification STATION_RAIL is also used for waypoints!
  * @return The closest station tile to the given tile.
  */
 static inline TileIndex CalcClosestStationTile(StationID station, TileIndex tile, StationType station_type)
--- a/src/pathfinder/yapf/yapf_destrail.hpp
+++ b/src/pathfinder/yapf/yapf_destrail.hpp
@@ -137,7 +137,7 @@
 		switch (v->current_order.GetType()) {
 			case OT_GOTO_STATION:
 			case OT_GOTO_WAYPOINT:
-				m_destTile = CalcClosestStationTile(v->current_order.GetDestination(), v->tile, STATION_RAIL);
+				m_destTile = CalcClosestStationTile(v->current_order.GetDestination(), v->tile, v->current_order.IsType(OT_GOTO_STATION) ? STATION_RAIL : STATION_WAYPOINT);
 				m_dest_station_id = v->current_order.GetDestination();
 				m_destTrackdirs = INVALID_TRACKDIR_BIT;
 				break;