--- 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");