summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormatthijs <matthijs@openttd.org>2005-04-15 13:48:08 +0000
committermatthijs <matthijs@openttd.org>2005-04-15 13:48:08 +0000
commitc08314a43a9efe5bac657fc66e02d834a09cd567 (patch)
tree7b2ef5a2e3abfe4ae3dba0863c1370b6763e33cb
parent1e13bf3d272a37dba078259bfd07481abbb5de8b (diff)
downloadopenttd-c08314a43a9efe5bac657fc66e02d834a09cd567.tar.xz
(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.
-rw-r--r--roadveh_cmd.c8
-rw-r--r--ship_cmd.c10
-rw-r--r--train_cmd.c9
3 files changed, 19 insertions, 8 deletions
diff --git a/roadveh_cmd.c b/roadveh_cmd.c
index 7106ce3d1..d5d42ba2b 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 3ccf8c11c..b988d50f1 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 b10090732..844d09153 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? */
}