diff options
author | rubidium <rubidium@openttd.org> | 2009-12-02 18:12:24 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2009-12-02 18:12:24 +0000 |
commit | 66da3cbb20bcaf29ed3b863c25b291527b56d44a (patch) | |
tree | aca11abc42ffcc2d03407da8a96afa52e3d66211 /src/pathfinder | |
parent | 4ec4fdff36e96321773a2a087784e9fd4ec4105d (diff) | |
download | openttd-66da3cbb20bcaf29ed3b863c25b291527b56d44a.tar.xz |
(svn r18383) -Fix (r18375): triggering NOT_REACHED for some waypoints
Diffstat (limited to 'src/pathfinder')
-rw-r--r-- | src/pathfinder/npf/npf.cpp | 6 | ||||
-rw-r--r-- | src/pathfinder/pathfinder_func.h | 1 | ||||
-rw-r--r-- | src/pathfinder/yapf/yapf_destrail.hpp | 2 |
3 files changed, 5 insertions, 4 deletions
diff --git a/src/pathfinder/npf/npf.cpp b/src/pathfinder/npf/npf.cpp index 9e6d0c2f3..1b9489f6b 100644 --- a/src/pathfinder/npf/npf.cpp +++ b/src/pathfinder/npf/npf.cpp @@ -453,7 +453,9 @@ static int32 NPFFindStationOrTile(AyStar *as, OpenListNode *current) 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 @@ void NPFFillWithOrderData(NPFFindStationOrTileData *fstd, const Vehicle *v, bool 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); diff --git a/src/pathfinder/pathfinder_func.h b/src/pathfinder/pathfinder_func.h index 7f5226a52..411b49f25 100644 --- 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) diff --git a/src/pathfinder/yapf/yapf_destrail.hpp b/src/pathfinder/yapf/yapf_destrail.hpp index 7953baf25..da360b474 100644 --- a/src/pathfinder/yapf/yapf_destrail.hpp +++ b/src/pathfinder/yapf/yapf_destrail.hpp @@ -137,7 +137,7 @@ public: 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; |