changeset 11499:68618eceac70 draft

(svn r15860) -Add: AIRoad::GetRoadVehicleTypeForCargo() to tell whether a certain cargo needs a bus- or a truckstop.
author frosch <frosch@openttd.org>
date Thu, 26 Mar 2009 19:45:45 +0000
parents 0d1c25918555
children d29f1358f95b
files bin/ai/regression/regression.nut bin/ai/regression/regression.txt src/ai/api/ai_road.cpp src/ai/api/ai_road.hpp src/ai/api/ai_road.hpp.sq
diffstat 5 files changed, 32 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/bin/ai/regression/regression.nut
+++ b/bin/ai/regression/regression.nut
@@ -329,6 +329,7 @@
 		print("    GetCargoIncome(10, 10):  " + AICargo.GetCargoIncome(i, 10, 10));
 		print("    GetCargoIncome(100, 10): " + AICargo.GetCargoIncome(i, 100, 10));
 		print("    GetCargoIncome(10, 100): " + AICargo.GetCargoIncome(i, 10, 100));
+		print("    GetRoadVehicleTypeForCargo(): " + AIRoad.GetRoadVehicleTypeForCargo(i));
 	}
 }
 
--- a/bin/ai/regression/regression.txt
+++ b/bin/ai/regression/regression.txt
@@ -824,6 +824,7 @@
     GetCargoIncome(10, 10):  -1
     GetCargoIncome(100, 10): -1
     GetCargoIncome(10, 100): -1
+    GetRoadVehicleTypeForCargo(): 1
   Cargo 0
     IsValidCargo():          true
     GetCargoLabel():         'PASS'
@@ -834,6 +835,7 @@
     GetCargoIncome(10, 10):  3
     GetCargoIncome(100, 10): 39
     GetCargoIncome(10, 100): 3
+    GetRoadVehicleTypeForCargo(): 0
   Cargo 1
     IsValidCargo():          true
     GetCargoLabel():         'COAL'
@@ -844,6 +846,7 @@
     GetCargoIncome(10, 10):  7
     GetCargoIncome(100, 10): 75
     GetCargoIncome(10, 100): 6
+    GetRoadVehicleTypeForCargo(): 1
   Cargo 2
     IsValidCargo():          true
     GetCargoLabel():         'MAIL'
@@ -854,6 +857,7 @@
     GetCargoIncome(10, 10):  5
     GetCargoIncome(100, 10): 58
     GetCargoIncome(10, 100): 5
+    GetRoadVehicleTypeForCargo(): 1
   Cargo 3
     IsValidCargo():          true
     GetCargoLabel():         'OIL_'
@@ -864,6 +868,7 @@
     GetCargoIncome(10, 10):  5
     GetCargoIncome(100, 10): 56
     GetCargoIncome(10, 100): 5
+    GetRoadVehicleTypeForCargo(): 1
   Cargo 4
     IsValidCargo():          true
     GetCargoLabel():         'LVST'
@@ -874,6 +879,7 @@
     GetCargoIncome(10, 10):  5
     GetCargoIncome(100, 10): 55
     GetCargoIncome(10, 100): 4
+    GetRoadVehicleTypeForCargo(): 1
   Cargo 5
     IsValidCargo():          true
     GetCargoLabel():         'GOOD'
@@ -884,6 +890,7 @@
     GetCargoIncome(10, 10):  7
     GetCargoIncome(100, 10): 78
     GetCargoIncome(10, 100): 6
+    GetRoadVehicleTypeForCargo(): 1
   Cargo 6
     IsValidCargo():          true
     GetCargoLabel():         'GRAI'
@@ -894,6 +901,7 @@
     GetCargoIncome(10, 10):  6
     GetCargoIncome(100, 10): 60
     GetCargoIncome(10, 100): 5
+    GetRoadVehicleTypeForCargo(): 1
   Cargo 7
     IsValidCargo():          true
     GetCargoLabel():         'WOOD'
@@ -904,6 +912,7 @@
     GetCargoIncome(10, 10):  6
     GetCargoIncome(100, 10): 63
     GetCargoIncome(10, 100): 5
+    GetRoadVehicleTypeForCargo(): 1
   Cargo 8
     IsValidCargo():          true
     GetCargoLabel():         'IORE'
@@ -914,6 +923,7 @@
     GetCargoIncome(10, 10):  6
     GetCargoIncome(100, 10): 65
     GetCargoIncome(10, 100): 5
+    GetRoadVehicleTypeForCargo(): 1
   Cargo 9
     IsValidCargo():          true
     GetCargoLabel():         'STEL'
@@ -924,6 +934,7 @@
     GetCargoIncome(10, 10):  7
     GetCargoIncome(100, 10): 72
     GetCargoIncome(10, 100): 6
+    GetRoadVehicleTypeForCargo(): 1
   Cargo 10
     IsValidCargo():          true
     GetCargoLabel():         'VALU'
@@ -934,6 +945,7 @@
     GetCargoIncome(10, 10):  9
     GetCargoIncome(100, 10): 94
     GetCargoIncome(10, 100): 7
+    GetRoadVehicleTypeForCargo(): 1
   Cargo 11
     IsValidCargo():          false
     GetCargoLabel():         '(null : 0x00000000)'
@@ -944,6 +956,7 @@
     GetCargoIncome(10, 10):  -1
     GetCargoIncome(100, 10): -1
     GetCargoIncome(10, 100): -1
+    GetRoadVehicleTypeForCargo(): 1
   Cargo 12
     IsValidCargo():          false
     GetCargoLabel():         '(null : 0x00000000)'
@@ -954,6 +967,7 @@
     GetCargoIncome(10, 10):  -1
     GetCargoIncome(100, 10): -1
     GetCargoIncome(10, 100): -1
+    GetRoadVehicleTypeForCargo(): 1
   Cargo 13
     IsValidCargo():          false
     GetCargoLabel():         '(null : 0x00000000)'
@@ -964,6 +978,7 @@
     GetCargoIncome(10, 10):  -1
     GetCargoIncome(100, 10): -1
     GetCargoIncome(10, 100): -1
+    GetRoadVehicleTypeForCargo(): 1
   Cargo 14
     IsValidCargo():          false
     GetCargoLabel():         '(null : 0x00000000)'
@@ -974,6 +989,7 @@
     GetCargoIncome(10, 10):  -1
     GetCargoIncome(100, 10): -1
     GetCargoIncome(10, 100): -1
+    GetRoadVehicleTypeForCargo(): 1
 
 --CargoList--
   Count():            11
--- a/src/ai/api/ai_road.cpp
+++ b/src/ai/api/ai_road.cpp
@@ -5,12 +5,18 @@
 #include "ai_road.hpp"
 #include "ai_map.hpp"
 #include "ai_station.hpp"
+#include "ai_cargo.hpp"
 #include "../../station_map.h"
 #include "../../command_type.h"
 #include "../../settings_type.h"
 #include "../../company_func.h"
 #include "../../script/squirrel_helper_type.hpp"
 
+/* static */ AIRoad::RoadVehicleType AIRoad::GetRoadVehicleTypeForCargo(CargoID cargo_type)
+{
+	return AICargo::HasCargoClass(cargo_type, AICargo::CC_PASSENGERS) ? ROADVEHTYPE_BUS : ROADVEHTYPE_TRUCK;
+}
+
 /* static */ bool AIRoad::IsRoadTile(TileIndex tile)
 {
 	if (!::IsValidTile(tile)) return false;
--- a/src/ai/api/ai_road.hpp
+++ b/src/ai/api/ai_road.hpp
@@ -57,6 +57,14 @@
 	};
 
 	/**
+	 * Determines whether a busstop or a truckstop is needed to transport a certain cargo.
+	 * @param cargo_type The cargo to test.
+	 * @pre AICargo::IsValidCargo(cargo_type).
+	 * @return The road vehicle type needed to transport the cargo.
+	 */
+	static RoadVehicleType GetRoadVehicleTypeForCargo(CargoID cargo_type);
+
+	/**
 	 * Checks whether the given tile is actually a tile with road that can be
 	 *  used to traverse a tile. This excludes road depots and 'normal' road
 	 *  stations, but includes drive through stations.
--- a/src/ai/api/ai_road.hpp.sq
+++ b/src/ai/api/ai_road.hpp.sq
@@ -46,6 +46,7 @@
 	AIError::RegisterErrorMapString(AIRoad::ERR_ROAD_CANNOT_BUILD_ON_TOWN_ROAD,           "ERR_ROAD_CANNOT_BUILD_ON_TOWN_ROAD");
 	AIError::RegisterErrorMapString(AIRoad::ERR_ROAD_ONE_WAY_ROADS_CANNOT_HAVE_JUNCTIONS, "ERR_ROAD_ONE_WAY_ROADS_CANNOT_HAVE_JUNCTIONS");
 
+	SQAIRoad.DefSQStaticMethod(engine, &AIRoad::GetRoadVehicleTypeForCargo,     "GetRoadVehicleTypeForCargo",     2, ".i");
 	SQAIRoad.DefSQStaticMethod(engine, &AIRoad::IsRoadTile,                     "IsRoadTile",                     2, ".i");
 	SQAIRoad.DefSQStaticMethod(engine, &AIRoad::IsRoadDepotTile,                "IsRoadDepotTile",                2, ".i");
 	SQAIRoad.DefSQStaticMethod(engine, &AIRoad::IsRoadStationTile,              "IsRoadStationTile",              2, ".i");