(svn r13217) -Fix: old AI was building small airports in years when they were not available in original game, causing small planes and helis everywhere
authorsmatz
Fri, 23 May 2008 00:28:13 +0000
changeset 10673 19d08fc61e06
parent 10672 6bf5b967d84c
child 10677 31915681d854
(svn r13217) -Fix: old AI was building small airports in years when they were not available in original game, causing small planes and helis everywhere
src/ai/default/default.cpp
--- a/src/ai/default/default.cpp	Thu May 22 20:44:24 2008 +0000
+++ b/src/ai/default/default.cpp	Fri May 23 00:28:13 2008 +0000
@@ -3438,12 +3438,28 @@
 static int AiFindBestDefaultAirportBlock(TileIndex tile, byte cargo, byte heli, CommandCost *cost)
 {
 	const AiDefaultBlockData *p;
-	uint i;
-
-	for (i = 0; (p = _airport_default_block_data[i]) != NULL; i++) {
-		// If we are doing a helicopter service, avoid building
-		// airports where they can't land.
-		if (heli && !(GetAirport(p->attr)->flags & AirportFTAClass::HELICOPTERS)) continue;
+
+	bool no_small = false;
+
+	if (!heli) {
+		/* do not build small airport if we have large available and we are not building heli route */
+		uint valid = GetValidAirports();
+		for (uint i = 0; (p = _airport_default_block_data[i]) != NULL; i++) {
+			if (HasBit(valid, p->attr) && !(GetAirport(p->attr)->flags & AirportFTAClass::SHORT_STRIP)) {
+				no_small = true;
+				break;
+			}
+		}
+	}
+
+	for (uint i = 0; (p = _airport_default_block_data[i]) != NULL; i++) {
+		uint flags = GetAirport(p->attr)->flags;
+		/* If we are doing a helicopter service, avoid building airports where they can't land */
+		if (heli && !(flags & AirportFTAClass::HELICOPTERS)) continue;
+		/* Similiar with aircraft ... */
+		if (!heli && !(flags & AirportFTAClass::AIRPLANES)) continue;
+		/* Do not build small airport if we prefer large */
+		if (no_small && (flags & AirportFTAClass::SHORT_STRIP)) continue;
 
 		*cost = AiDoBuildDefaultAirportBlock(tile, p, 0);
 		if (CmdSucceeded(*cost) && AiCheckAirportResources(tile, p, cargo))