From 4eeac3ea75232b5d5805c9b2d6b846eb5c50be15 Mon Sep 17 00:00:00 2001 From: matthijs Date: Fri, 15 Apr 2005 13:48:08 +0000 Subject: [PATCH] (svn r2202) - Fix: [NPF] When a vehicle could not reach its target, it would choose a random direction. It will now try to get as close as possible. --- roadveh_cmd.c | 8 ++++++-- ship_cmd.c | 10 ++++++---- train_cmd.c | 9 +++++++-- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/roadveh_cmd.c b/roadveh_cmd.c index 7106ce3d10..d5d42ba2b6 100644 --- a/roadveh_cmd.c +++ b/roadveh_cmd.c @@ -1090,12 +1090,16 @@ static int RoadFindPathToDest(Vehicle *v, uint tile, int enterdir) //debug("Finding path. Enterdir: %d, Trackdir: %d", enterdir, trackdir); ftd = NPFRouteToStationOrTile(tile - TileOffsByDir(enterdir), trackdir, &fstd, TRANSPORT_ROAD, v->owner); - if (ftd.best_bird_dist != 0 || ftd.best_trackdir == 0xff) { - /* Not found, just do something, or we are already there */ + if (ftd.best_trackdir == 0xff) { + /* We are already at our target. Just do something */ //TODO: maybe display error? //TODO: go straight ahead if possible? return_track(FindFirstBit2x64(bitmask)); } else { + /* If ftd.best_bird_dist is 0, we found our target and ftd.best_trackdir contains + the direction we need to take to get there, if ftd.best_bird_dist is not 0, + we did not find our target, but ftd.best_trackdir contains the direction leading + to the tile closest to our target. */ return_track(ftd.best_trackdir); } } else { diff --git a/ship_cmd.c b/ship_cmd.c index 3ccf8c11c7..b988d50f19 100644 --- a/ship_cmd.c +++ b/ship_cmd.c @@ -576,12 +576,14 @@ static int ChooseShipTrack(Vehicle *v, uint tile, int enterdir, uint tracks) ftd = NPFRouteToStationOrTile(src_tile, _track_direction_to_trackdir[track][v->direction], &fstd, TRANSPORT_WATER, v->owner); - if (ftd.best_bird_dist == 0 && ftd.best_trackdir != 0xff) - /* Found the target, and it is not our current tile */ + if (ftd.best_trackdir != 0xff) + /* If ftd.best_bird_dist is 0, we found our target and ftd.best_trackdir contains + the direction we need to take to get there, if ftd.best_bird_dist is not 0, + we did not find our target, but ftd.best_trackdir contains the direction leading + to the tile closest to our target. */ return ftd.best_trackdir & 7; /* TODO: Wrapper function? */ else - return -1; /* Couldn't find target, reverse */ - /* TODO: When the target is unreachable, the ship will keep reversing */ + return -1; /* Already at target, reverse? */ } else { uint b; uint tot_dist, dist; diff --git a/train_cmd.c b/train_cmd.c index b10090732e..844d091530 100644 --- a/train_cmd.c +++ b/train_cmd.c @@ -1672,12 +1672,17 @@ static byte ChooseTrainTrack(Vehicle *v, uint tile, int enterdir, byte trackbits assert(trackdir != 0xff); ftd = NPFRouteToStationOrTile(tile - TileOffsByDir(enterdir), trackdir, &fstd, TRANSPORT_RAIL, v->owner); - if (ftd.best_bird_dist != 0 || ftd.best_trackdir == 0xff) { - /* Not found, or we are already there. Just do something */ + + if (ftd.best_trackdir == 0xff) { + /* We are already at our target. Just do something */ //TODO: maybe display error? //TODO: go straight ahead if possible? best_track = FIND_FIRST_BIT(bits); } else { + /* If ftd.best_bird_dist is 0, we found our target and ftd.best_trackdir contains + the direction we need to take to get there, if ftd.best_bird_dist is not 0, + we did not find our target, but ftd.best_trackdir contains the direction leading + to the tile closest to our target. */ /* Discard enterdir information, making it a normal track */ best_track = ftd.best_trackdir & 7; /* TODO: Wrapper function? */ }