(svn r12841) [NoAI] -Add: function to test whether an industry is built on water/has a heliport/dock.
--- a/src/ai/api/ai_industry.cpp Tue Apr 22 19:23:19 2008 +0000
+++ b/src/ai/api/ai_industry.cpp Tue Apr 22 19:42:52 2008 +0000
@@ -107,3 +107,25 @@
{
return AIMap::DistanceSquare(tile, GetLocation(industry_id));
}
+
+/* static */ bool AIIndustry::IsBuiltOnWater(IndustryID industry_id)
+{
+ if (!IsValidIndustry(industry_id)) return false;
+
+ return (::GetIndustrySpec(::GetIndustry(industry_id)->type)->behaviour & INDUSTRYBEH_BUILT_ONWATER) != 0;
+}
+
+/* static */ bool AIIndustry::HasHeliportAndDock(IndustryID industry_id)
+{
+ if (!IsValidIndustry(industry_id)) return false;
+
+ return (::GetIndustrySpec(::GetIndustry(industry_id)->type)->behaviour & INDUSTRYBEH_AI_AIRSHIP_ROUTES) != 0;
+}
+
+/* static */ TileIndex AIIndustry::GetHeliportAndDockLocation(IndustryID industry_id)
+{
+ if (!IsValidIndustry(industry_id)) return INVALID_TILE;
+ if (!HasHeliportAndDock(industry_id)) return INVALID_TILE;
+
+ return ::GetIndustry(industry_id)->xy;
+}
--- a/src/ai/api/ai_industry.hpp Tue Apr 22 19:23:19 2008 +0000
+++ b/src/ai/api/ai_industry.hpp Tue Apr 22 19:42:52 2008 +0000
@@ -116,6 +116,31 @@
* @return The distance between industry and tile.
*/
static int32 GetDistanceSquareToTile(IndustryID industry_id, TileIndex tile);
+
+ /**
+ * Is this industry built on water.
+ * @param industry_id The index of the industry.
+ * @pre IsValidIndustry(industry_id).
+ * @return True when the industry is built on water.
+ */
+ static bool IsBuiltOnWater(IndustryID industry_id);
+
+ /**
+ * Does this industry have a heliport and dock?
+ * @param industry_id The index of the industry.
+ * @pre IsValidIndustry(industry_id).
+ * @return True when the industry has a heliport and dock.
+ */
+ static bool HasHeliportAndDock(IndustryID industry_id);
+
+ /**
+ * Gets the location of the industry's heliport/dock.
+ * @param industry_id The index of the industry.
+ * @pre IsValidIndustry(industry_id).
+ * @pre HasHeliportAndDock(industry_id).
+ * @return The location of the industry's heliport/dock.
+ */
+ static TileIndex GetHeliportAndDockLocation(IndustryID industry_id);
};
#endif /* AI_INDUSTRY_HPP */
--- a/src/ai/api/ai_industry.hpp.sq Tue Apr 22 19:23:19 2008 +0000
+++ b/src/ai/api/ai_industry.hpp.sq Tue Apr 22 19:42:52 2008 +0000
@@ -29,6 +29,9 @@
SQAIIndustry.DefSQStaticMethod(engine, &AIIndustry::GetLocation, "GetLocation", 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");
+ SQAIIndustry.DefSQStaticMethod(engine, &AIIndustry::HasHeliportAndDock, "HasHeliportAndDock", 2, "xi");
+ SQAIIndustry.DefSQStaticMethod(engine, &AIIndustry::GetHeliportAndDockLocation, "GetHeliportAndDockLocation", 2, "xi");
SQAIIndustry.PostRegister(engine);
}