(svn r5037) -Fix: assert when GetVehicleTrackdir() returns wrong trackdir - introduced by r5033 (thanks yanek)
--- a/yapf/yapf_road.cpp Tue May 30 13:45:53 2006 +0000
+++ b/yapf/yapf_road.cpp Tue May 30 15:04:59 2006 +0000
@@ -301,10 +301,7 @@
return 0;
}
- // set origin (tile, trackdir)
- TileIndex src_tile = v->tile;
- Trackdir src_td = GetVehicleTrackdir(v);
- Yapf().SetOrigin(src_tile, TrackdirToTrackdirBits(src_td));
+ if (!SetOriginFromVehiclePos(v)) return UINT_MAX;
// set destination tile, trackdir
// get available trackdirs on the destination tile
@@ -327,6 +324,21 @@
return dist;
}
+ /** Return true if the valid origin (tile/trackdir) was set from the current vehicle position. */
+ FORCEINLINE bool SetOriginFromVehiclePos(const Vehicle *v)
+ {
+ // set origin (tile, trackdir)
+ TileIndex src_tile = v->tile;
+ Trackdir src_td = GetVehicleTrackdir(v);
+ if ((GetTileTrackStatus(src_tile, TRANSPORT_ROAD) & TrackdirToTrackdirBits(src_td)) == 0) {
+ // sometimes the roadveh is not on the road (it resides on non-existing track)
+ // how should we handle that situation?
+ return false;
+ }
+ Yapf().SetOrigin(src_tile, TrackdirToTrackdirBits(src_td));
+ return true;
+ }
+
static Depot* stFindNearestDepot(Vehicle* v, TileIndex tile, Trackdir td)
{
Tpf pf;