(svn r1708) - Fix: FindNearestHangar() will no longer return a hangar where a jet will crash if it is a jet, that is searching
authorbjarni
Fri, 28 Jan 2005 18:10:12 +0000
changeset 1204 94bc5d4587c1
parent 1203 c95a16972da5
child 1205 98a430b41d81
(svn r1708) - Fix: FindNearestHangar() will no longer return a hangar where a jet will crash if it is a jet, that is searching
- Codechange: Since planes move in strait lines in 8 directions, GetTileDistAdv() is used instead of manhatten distance in FindNearestHangar()
aircraft_cmd.c
--- a/aircraft_cmd.c	Fri Jan 28 17:31:42 2005 +0000
+++ b/aircraft_cmd.c	Fri Jan 28 18:10:12 2005 +0000
@@ -37,16 +37,17 @@
 // bit 16 is set in the return value if the player do not have any airports with a hangar (like helipads only)
 static uint32 FindNearestHangar(Vehicle *v)
 {
-	/* TODO add a check to see if the aircraft can land at the airport */
 	Station *st;
-	uint32 temp_distance, distance = 65000;
+	uint temp_distance, distance = 0xFFFF;
 	uint16 index_to_target = 0;
 
 	FOR_ALL_STATIONS(st) {
 		if (st->owner == v->owner && st->facilities & FACIL_AIRPORT) {
 			if (GetAirport(st->airport_type)->terminals != NULL) {
-				TileIndex airport_tile = st->airport_tile;
-				temp_distance = abs((v->x_pos >> 4) - TileX(airport_tile)) + abs((v->y_pos >> 4) - TileY(airport_tile));
+				// don't crash the planes if we know they can't land at the airport
+				if (HASBIT(v->subtype,1) && st->airport_type == AT_SMALL && !_cheats.no_jetcrash.value) continue;
+
+				temp_distance = GetTileDistAdv(v->tile, st->airport_tile);
 				if (temp_distance < distance) {
 					distance = temp_distance;
 					index_to_target = st->index;