From 44351cdc57f470e7fc1213e4b0b2f6b1f42e71ac Mon Sep 17 00:00:00 2001 From: frosch Date: Thu, 26 Mar 2009 19:45:45 +0000 Subject: [PATCH] (svn r15860) -Add: AIRoad::GetRoadVehicleTypeForCargo() to tell whether a certain cargo needs a bus- or a truckstop. --- bin/ai/regression/regression.nut | 1 + bin/ai/regression/regression.txt | 16 ++++++++++++++++ src/ai/api/ai_road.cpp | 6 ++++++ src/ai/api/ai_road.hpp | 8 ++++++++ src/ai/api/ai_road.hpp.sq | 1 + 5 files changed, 32 insertions(+) diff --git a/bin/ai/regression/regression.nut b/bin/ai/regression/regression.nut index 4a2e8433f5..152ab6d51a 100644 --- a/bin/ai/regression/regression.nut +++ b/bin/ai/regression/regression.nut @@ -329,6 +329,7 @@ function Regression::Cargo() 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)); } } diff --git a/bin/ai/regression/regression.txt b/bin/ai/regression/regression.txt index f0b28de8a1..cf105624c3 100644 --- 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 diff --git a/src/ai/api/ai_road.cpp b/src/ai/api/ai_road.cpp index 4cced8873c..4cbce4a689 100644 --- 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; diff --git a/src/ai/api/ai_road.hpp b/src/ai/api/ai_road.hpp index e899af7714..7bd26922df 100644 --- a/src/ai/api/ai_road.hpp +++ b/src/ai/api/ai_road.hpp @@ -56,6 +56,14 @@ public: ROADVEHTYPE_TRUCK, //!< Build objects useable for trucks and cargo trams }; + /** + * 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 diff --git a/src/ai/api/ai_road.hpp.sq b/src/ai/api/ai_road.hpp.sq index b495dbba7f..4c89d93a49 100644 --- a/src/ai/api/ai_road.hpp.sq +++ b/src/ai/api/ai_road.hpp.sq @@ -46,6 +46,7 @@ void SQAIRoad_Register(Squirrel *engine) { 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");