(svn r12925) [NoAI] -Add: added AIIndustry::GetAmountOfStationsAround() (Yexo) noai
authortruebrain
Tue, 29 Apr 2008 21:34:17 +0000
branchnoai
changeset 10383 bda80b3e9c25
parent 10381 4ad8b98acd82
child 10384 f0106eb03df3
(svn r12925) [NoAI] -Add: added AIIndustry::GetAmountOfStationsAround() (Yexo)
bin/ai/regression/regression.nut
src/ai/api/ai_industry.cpp
src/ai/api/ai_industry.hpp
src/ai/api/ai_industry.hpp.sq
--- a/bin/ai/regression/regression.nut	Tue Apr 29 21:06:16 2008 +0000
+++ b/bin/ai/regression/regression.nut	Tue Apr 29 21:34:17 2008 +0000
@@ -414,6 +414,11 @@
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
 	}
+	list.Valuate(AIIndustry.GetAmountOfStationsAround);
+	print("  GetAmountOfStationsAround(30000) ListDump:");
+	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
+		print("    " + i + " => " + list.GetValue(i));
+	}
 	list.Valuate(AIIndustry.IsCargoAccepted, 1);
 	print("  CargoAccepted(1) ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
--- a/src/ai/api/ai_industry.cpp	Tue Apr 29 21:06:16 2008 +0000
+++ b/src/ai/api/ai_industry.cpp	Tue Apr 29 21:34:17 2008 +0000
@@ -9,6 +9,7 @@
 #include "../../industry.h"
 #include "../../tile_type.h"
 #include "../../strings_func.h"
+#include "../../station_func.h"
 #include "table/strings.h"
 
 /* static */ IndustryID AIIndustry::GetMaxIndustryID()
@@ -66,12 +67,6 @@
 	return false;
 }
 
-/* static */ TileIndex AIIndustry::GetLocation(IndustryID industry_id)
-{
-	if (!IsValidIndustry(industry_id)) return INVALID_TILE;
-	return ::GetIndustry(industry_id)->xy;
-}
-
 /* static */ uint16 AIIndustry::GetLastMonthProduction(IndustryID industry_id, CargoID cargo_id)
 {
 	if (!IsValidIndustry(industry_id)) return false;
@@ -100,13 +95,32 @@
 	return false;
 }
 
+/* static */ TileIndex AIIndustry::GetLocation(IndustryID industry_id)
+{
+	if (!IsValidIndustry(industry_id)) return INVALID_TILE;
+
+	return ::GetIndustry(industry_id)->xy;
+}
+
+/* static */ int32 AIIndustry::GetAmountOfStationsAround(IndustryID industry_id)
+{
+	if (!IsValidIndustry(industry_id)) return -1;
+
+	Industry *ind = ::GetIndustry(industry_id);
+	return ::FindStationsAroundIndustryTile(ind->xy, ind->width, ind->height).size();
+}
+
 /* static */ int32 AIIndustry::GetDistanceManhattanToTile(IndustryID industry_id, TileIndex tile)
 {
+	if (!IsValidIndustry(industry_id)) return -1;
+
 	return AIMap::DistanceManhattan(tile, GetLocation(industry_id));
 }
 
 /* static */ int32 AIIndustry::GetDistanceSquareToTile(IndustryID industry_id, TileIndex tile)
 {
+	if (!IsValidIndustry(industry_id)) return -1;
+
 	return AIMap::DistanceSquare(tile, GetLocation(industry_id));
 }
 
--- a/src/ai/api/ai_industry.hpp	Tue Apr 29 21:06:16 2008 +0000
+++ b/src/ai/api/ai_industry.hpp	Tue Apr 29 21:34:17 2008 +0000
@@ -95,6 +95,14 @@
 	static TileIndex GetLocation(IndustryID industry_id);
 
 	/**
+	 * Get the number of stations around an industry.
+	 * @param industry_id The index of the industry.
+	 * @pre IsValidIndustry(industry_id).
+	 * @return The number of stations around an industry.
+	 */
+	static int32 GetAmountOfStationsAround(IndustryID industry_id);
+
+	/**
 	 * Get the manhattan distance from the tile to the AIIndustry::GetLocation()
 	 *  of the industry.
 	 * @param industry_id The industry to get the distance to.
--- a/src/ai/api/ai_industry.hpp.sq	Tue Apr 29 21:06:16 2008 +0000
+++ b/src/ai/api/ai_industry.hpp.sq	Tue Apr 29 21:34:17 2008 +0000
@@ -27,6 +27,7 @@
 	SQAIIndustry.DefSQStaticMethod(engine, &AIIndustry::GetLastMonthProduction,     "GetLastMonthProduction",     3, "xii");
 	SQAIIndustry.DefSQStaticMethod(engine, &AIIndustry::GetLastMonthTransported,    "GetLastMonthTransported",    3, "xii");
 	SQAIIndustry.DefSQStaticMethod(engine, &AIIndustry::GetLocation,                "GetLocation",                2, "xi");
+	SQAIIndustry.DefSQStaticMethod(engine, &AIIndustry::GetAmountOfStationsAround,  "GetAmountOfStationsAround",  2, "xi");
 	SQAIIndustry.DefSQStaticMethod(engine, &AIIndustry::GetDistanceManhattanToTile, "GetDistanceManhattanToTile", 3, "xii");
 	SQAIIndustry.DefSQStaticMethod(engine, &AIIndustry::GetDistanceSquareToTile,    "GetDistanceSquareToTile",    3, "xii");
 	SQAIIndustry.DefSQStaticMethod(engine, &AIIndustry::IsBuiltOnWater,             "IsBuiltOnWater",             2, "xi");