(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.
authormatthijs
Fri, 15 Apr 2005 13:48:08 +0000
changeset 1698 bf364c664a60
parent 1697 be3b6806cbb4
child 1699 aa48f5e9f5b6
(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
ship_cmd.c
train_cmd.c
--- a/roadveh_cmd.c	Thu Apr 14 22:59:49 2005 +0000
+++ b/roadveh_cmd.c	Fri Apr 15 13:48:08 2005 +0000
@@ -1090,12 +1090,16 @@
 		//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 {
--- a/ship_cmd.c	Thu Apr 14 22:59:49 2005 +0000
+++ b/ship_cmd.c	Fri Apr 15 13:48:08 2005 +0000
@@ -576,12 +576,14 @@
 
 		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;
--- a/train_cmd.c	Thu Apr 14 22:59:49 2005 +0000
+++ b/train_cmd.c	Fri Apr 15 13:48:08 2005 +0000
@@ -1672,12 +1672,17 @@
 		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? */
 		}