Mercurial > hg > openttd
changeset 3918:06bbac429638 draft
(svn r5037) -Fix: assert when GetVehicleTrackdir() returns wrong trackdir - introduced by r5033 (thanks yanek)
author | KUDr <KUDr@openttd.org> |
---|---|
date | Tue, 30 May 2006 15:04:59 +0000 |
parents | e0dc3975867d |
children | 98ff70fd829b |
files | yapf/yapf_road.cpp |
diffstat | 1 files changed, 16 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/yapf/yapf_road.cpp +++ b/yapf/yapf_road.cpp @@ -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;