changeset 13091:5cdcbb26b38c draft

(svn r17591) -Add [NoAI] [FS#3212]: AIAirport::IsAirportInformationAvailable. Also update several preconditions so it's now possible to get information on airports types that can no longer be build (small airport after 1960)
author yexo <yexo@openttd.org>
date Sun, 20 Sep 2009 18:38:43 +0000
parents 78bc107232da
children d755cf7553ef
files bin/ai/regression/regression.nut bin/ai/regression/regression.txt src/ai/api/ai_airport.cpp src/ai/api/ai_airport.hpp src/ai/api/ai_airport.hpp.sq
diffstat 5 files changed, 101 insertions(+), 67 deletions(-) [+]
line wrap: on
line diff
--- a/bin/ai/regression/regression.nut
+++ b/bin/ai/regression/regression.nut
@@ -213,10 +213,11 @@
 	print("  GetAirportType():     " + AIAirport.GetAirportType(32116));
 
 	for (local i = -1; i < 10; i++) {
-		print("  IsValidAirportType(" + i + "):       " + AIAirport.IsValidAirportType(i));
-		print("  GetAirportWidth(" + i + "):          " + AIAirport.GetAirportWidth(i));
-		print("  GetAirportHeight(" + i + "):         " + AIAirport.GetAirportHeight(i));
-		print("  GetAirportCoverageRadius(" + i + "): " + AIAirport.GetAirportCoverageRadius(i));
+		print("  IsAirportInformationAvailable(" + i + "): " + AIAirport.IsAirportInformationAvailable(i));
+		print("  IsValidAirportType(" + i + "):            " + AIAirport.IsValidAirportType(i));
+		print("  GetAirportWidth(" + i + "):               " + AIAirport.GetAirportWidth(i));
+		print("  GetAirportHeight(" + i + "):              " + AIAirport.GetAirportHeight(i));
+		print("  GetAirportCoverageRadius(" + i + "):      " + AIAirport.GetAirportCoverageRadius(i));
 	}
 
 	print("  GetBankBalance():     " + AICompany.GetBankBalance(AICompany.COMPANY_SELF));
--- a/bin/ai/regression/regression.txt
+++ b/bin/ai/regression/regression.txt
@@ -626,50 +626,61 @@
   IsAirportTile():      false
   GetHangarOfAirport(): -1
   GetAirportType():     255
-  IsValidAirportType(-1):       false
-  GetAirportWidth(-1):          -1
-  GetAirportHeight(-1):         -1
-  GetAirportCoverageRadius(-1): -1
-  IsValidAirportType(0):       true
-  GetAirportWidth(0):          4
-  GetAirportHeight(0):         3
-  GetAirportCoverageRadius(0): 4
-  IsValidAirportType(1):       false
-  GetAirportWidth(1):          -1
-  GetAirportHeight(1):         -1
-  GetAirportCoverageRadius(1): -1
-  IsValidAirportType(2):       false
-  GetAirportWidth(2):          -1
-  GetAirportHeight(2):         -1
-  GetAirportCoverageRadius(2): -1
-  IsValidAirportType(3):       false
-  GetAirportWidth(3):          -1
-  GetAirportHeight(3):         -1
-  GetAirportCoverageRadius(3): -1
-  IsValidAirportType(4):       false
-  GetAirportWidth(4):          -1
-  GetAirportHeight(4):         -1
-  GetAirportCoverageRadius(4): -1
-  IsValidAirportType(5):       false
-  GetAirportWidth(5):          -1
-  GetAirportHeight(5):         -1
-  GetAirportCoverageRadius(5): -1
-  IsValidAirportType(6):       false
-  GetAirportWidth(6):          -1
-  GetAirportHeight(6):         -1
-  GetAirportCoverageRadius(6): -1
-  IsValidAirportType(7):       false
-  GetAirportWidth(7):          -1
-  GetAirportHeight(7):         -1
-  GetAirportCoverageRadius(7): -1
-  IsValidAirportType(8):       false
-  GetAirportWidth(8):          -1
-  GetAirportHeight(8):         -1
-  GetAirportCoverageRadius(8): -1
-  IsValidAirportType(9):       false
-  GetAirportWidth(9):          -1
-  GetAirportHeight(9):         -1
-  GetAirportCoverageRadius(9): -1
+  IsAirportInformationAvailable(-1): false
+  IsValidAirportType(-1):            false
+  GetAirportWidth(-1):               -1
+  GetAirportHeight(-1):              -1
+  GetAirportCoverageRadius(-1):      -1
+  IsAirportInformationAvailable(0): true
+  IsValidAirportType(0):            true
+  GetAirportWidth(0):               4
+  GetAirportHeight(0):              3
+  GetAirportCoverageRadius(0):      4
+  IsAirportInformationAvailable(1): true
+  IsValidAirportType(1):            false
+  GetAirportWidth(1):               6
+  GetAirportHeight(1):              6
+  GetAirportCoverageRadius(1):      5
+  IsAirportInformationAvailable(2): true
+  IsValidAirportType(2):            false
+  GetAirportWidth(2):               1
+  GetAirportHeight(2):              1
+  GetAirportCoverageRadius(2):      4
+  IsAirportInformationAvailable(3): true
+  IsValidAirportType(3):            false
+  GetAirportWidth(3):               6
+  GetAirportHeight(3):              6
+  GetAirportCoverageRadius(3):      6
+  IsAirportInformationAvailable(4): true
+  IsValidAirportType(4):            false
+  GetAirportWidth(4):               7
+  GetAirportHeight(4):              7
+  GetAirportCoverageRadius(4):      8
+  IsAirportInformationAvailable(5): true
+  IsValidAirportType(5):            false
+  GetAirportWidth(5):               5
+  GetAirportHeight(5):              4
+  GetAirportCoverageRadius(5):      4
+  IsAirportInformationAvailable(6): true
+  IsValidAirportType(6):            false
+  GetAirportWidth(6):               2
+  GetAirportHeight(6):              2
+  GetAirportCoverageRadius(6):      4
+  IsAirportInformationAvailable(7): true
+  IsValidAirportType(7):            false
+  GetAirportWidth(7):               9
+  GetAirportHeight(7):              11
+  GetAirportCoverageRadius(7):      10
+  IsAirportInformationAvailable(8): true
+  IsValidAirportType(8):            false
+  GetAirportWidth(8):               4
+  GetAirportHeight(8):              2
+  GetAirportCoverageRadius(8):      4
+  IsAirportInformationAvailable(9): false
+  IsValidAirportType(9):            false
+  GetAirportWidth(9):               -1
+  GetAirportHeight(9):              -1
+  GetAirportCoverageRadius(9):      -1
   GetBankBalance():     1999999790
   GetPrice():           5400
   BuildAirport():       true
--- a/src/ai/api/ai_airport.cpp
+++ b/src/ai/api/ai_airport.cpp
@@ -19,7 +19,12 @@
 
 /* static */ bool AIAirport::IsValidAirportType(AirportType type)
 {
-	return type >= 0 && type < (AirportType)NUM_AIRPORTS && ::GetAirport(type)->IsAvailable();
+	return IsAirportInformationAvailable(type) && ::GetAirport(type)->IsAvailable();
+}
+
+/* static */ bool AIAirport::IsAirportInformationAvailable(AirportType type)
+{
+	return type >= 0 && type < (AirportType)NUM_AIRPORTS;
 }
 
 /* static */ Money AIAirport::GetPrice(AirportType type)
@@ -46,21 +51,21 @@
 
 /* static */ int32 AIAirport::GetAirportWidth(AirportType type)
 {
-	if (!IsValidAirportType(type)) return -1;
+	if (!IsAirportInformationAvailable(type)) return -1;
 
 	return ::GetAirport(type)->size_x;
 }
 
 /* static */ int32 AIAirport::GetAirportHeight(AirportType type)
 {
-	if (!IsValidAirportType(type)) return -1;
+	if (!IsAirportInformationAvailable(type)) return -1;
 
 	return ::GetAirport(type)->size_y;
 }
 
 /* static */ int32 AIAirport::GetAirportCoverageRadius(AirportType type)
 {
-	if (!IsValidAirportType(type)) return -1;
+	if (!IsAirportInformationAvailable(type)) return -1;
 
 	return _settings_game.station.modified_catchment ? ::GetAirport(type)->catchment : (uint)CA_UNMODIFIED;
 }
@@ -143,7 +148,7 @@
 	extern Town *AirportGetNearestTown(const AirportFTAClass *afc, TileIndex airport_tile);
 
 	if (!::IsValidTile(tile)) return INVALID_TOWN;
-	if (!IsValidAirportType(type)) return INVALID_TOWN;
+	if (!IsAirportInformationAvailable(type)) return INVALID_TOWN;
 
 	return AirportGetNearestTown(GetAirport(type), tile)->index;
 }
--- a/src/ai/api/ai_airport.hpp
+++ b/src/ai/api/ai_airport.hpp
@@ -57,12 +57,24 @@
 	 * Checks whether the given AirportType is valid and available.
 	 * @param type The AirportType to check.
 	 * @return True if and only if the AirportType is valid and available.
+	 * @post return value == true -> IsAirportInformationAvailable returns true.
 	 */
 	static bool IsValidAirportType(AirportType type);
 
 	/**
+	 * Can you get information on this airport type? As opposed to
+	 * IsValidAirportType this will return also return true when
+	 * an airport type is no longer buildable.
+	 * @param type The AirportType to check.
+	 * @return True if and only if the AirportType is valid.
+	 * @post return value == false -> IsValidAirportType returns false.
+	 */
+	static bool IsAirportInformationAvailable(AirportType type);
+
+	/**
 	 * Get the cost to build this AirportType.
 	 * @param type The AirportType to check.
+	 * @pre AirportAvailable(type).
 	 * @return The cost of building this AirportType.
 	 */
 	static Money GetPrice(AirportType type);
@@ -86,6 +98,7 @@
 	/**
 	 * Get the width of this type of airport.
 	 * @param type The type of airport.
+	 * @pre IsAirportInformationAvailable(type).
 	 * @return The width in tiles.
 	 */
 	static int32 GetAirportWidth(AirportType type);
@@ -93,6 +106,7 @@
 	/**
 	 * Get the height of this type of airport.
 	 * @param type The type of airport.
+	 * @pre IsAirportInformationAvailable(type).
 	 * @return The height in tiles.
 	 */
 	static int32 GetAirportHeight(AirportType type);
@@ -100,6 +114,7 @@
 	/**
 	 * Get the coverage radius of this type of airport.
 	 * @param type The type of airport.
+	 * @pre IsAirportInformationAvailable(type).
 	 * @return The radius in tiles.
 	 */
 	static int32 GetAirportCoverageRadius(AirportType type);
@@ -174,6 +189,7 @@
 	 *  an airport at some tile.
 	 * @param tile The tile to check.
 	 * @param type The AirportType to check.
+	 * @pre IsAirportInformationAvailable(type).
 	 * @return The TownID of the town closest to the tile.
 	 */
 	static TownID GetNearestTown(TileIndex tile, AirportType type);
--- a/src/ai/api/ai_airport.hpp.sq
+++ b/src/ai/api/ai_airport.hpp.sq
@@ -46,20 +46,21 @@
 	SQAIAirport.DefSQConst(engine, AIAirport::PT_BIG_PLANE,     "PT_BIG_PLANE");
 	SQAIAirport.DefSQConst(engine, AIAirport::PT_INVALID,       "PT_INVALID");
 
-	SQAIAirport.DefSQStaticMethod(engine, &AIAirport::IsValidAirportType,       "IsValidAirportType",       2, ".i");
-	SQAIAirport.DefSQStaticMethod(engine, &AIAirport::GetPrice,                 "GetPrice",                 2, ".i");
-	SQAIAirport.DefSQStaticMethod(engine, &AIAirport::IsHangarTile,             "IsHangarTile",             2, ".i");
-	SQAIAirport.DefSQStaticMethod(engine, &AIAirport::IsAirportTile,            "IsAirportTile",            2, ".i");
-	SQAIAirport.DefSQStaticMethod(engine, &AIAirport::GetAirportWidth,          "GetAirportWidth",          2, ".i");
-	SQAIAirport.DefSQStaticMethod(engine, &AIAirport::GetAirportHeight,         "GetAirportHeight",         2, ".i");
-	SQAIAirport.DefSQStaticMethod(engine, &AIAirport::GetAirportCoverageRadius, "GetAirportCoverageRadius", 2, ".i");
-	SQAIAirport.DefSQStaticMethod(engine, &AIAirport::GetNumHangars,            "GetNumHangars",            2, ".i");
-	SQAIAirport.DefSQStaticMethod(engine, &AIAirport::GetHangarOfAirport,       "GetHangarOfAirport",       2, ".i");
-	SQAIAirport.DefSQStaticMethod(engine, &AIAirport::BuildAirport,             "BuildAirport",             4, ".iii");
-	SQAIAirport.DefSQStaticMethod(engine, &AIAirport::RemoveAirport,            "RemoveAirport",            2, ".i");
-	SQAIAirport.DefSQStaticMethod(engine, &AIAirport::GetAirportType,           "GetAirportType",           2, ".i");
-	SQAIAirport.DefSQStaticMethod(engine, &AIAirport::GetNoiseLevelIncrease,    "GetNoiseLevelIncrease",    3, ".ii");
-	SQAIAirport.DefSQStaticMethod(engine, &AIAirport::GetNearestTown,           "GetNearestTown",           3, ".ii");
+	SQAIAirport.DefSQStaticMethod(engine, &AIAirport::IsValidAirportType,            "IsValidAirportType",            2, ".i");
+	SQAIAirport.DefSQStaticMethod(engine, &AIAirport::IsAirportInformationAvailable, "IsAirportInformationAvailable", 2, ".i");
+	SQAIAirport.DefSQStaticMethod(engine, &AIAirport::GetPrice,                      "GetPrice",                      2, ".i");
+	SQAIAirport.DefSQStaticMethod(engine, &AIAirport::IsHangarTile,                  "IsHangarTile",                  2, ".i");
+	SQAIAirport.DefSQStaticMethod(engine, &AIAirport::IsAirportTile,                 "IsAirportTile",                 2, ".i");
+	SQAIAirport.DefSQStaticMethod(engine, &AIAirport::GetAirportWidth,               "GetAirportWidth",               2, ".i");
+	SQAIAirport.DefSQStaticMethod(engine, &AIAirport::GetAirportHeight,              "GetAirportHeight",              2, ".i");
+	SQAIAirport.DefSQStaticMethod(engine, &AIAirport::GetAirportCoverageRadius,      "GetAirportCoverageRadius",      2, ".i");
+	SQAIAirport.DefSQStaticMethod(engine, &AIAirport::GetNumHangars,                 "GetNumHangars",                 2, ".i");
+	SQAIAirport.DefSQStaticMethod(engine, &AIAirport::GetHangarOfAirport,            "GetHangarOfAirport",            2, ".i");
+	SQAIAirport.DefSQStaticMethod(engine, &AIAirport::BuildAirport,                  "BuildAirport",                  4, ".iii");
+	SQAIAirport.DefSQStaticMethod(engine, &AIAirport::RemoveAirport,                 "RemoveAirport",                 2, ".i");
+	SQAIAirport.DefSQStaticMethod(engine, &AIAirport::GetAirportType,                "GetAirportType",                2, ".i");
+	SQAIAirport.DefSQStaticMethod(engine, &AIAirport::GetNoiseLevelIncrease,         "GetNoiseLevelIncrease",         3, ".ii");
+	SQAIAirport.DefSQStaticMethod(engine, &AIAirport::GetNearestTown,                "GetNearestTown",                3, ".ii");
 
 	SQAIAirport.PostRegister(engine);
 }