(svn r12841) [NoAI] -Add: function to test whether an industry is built on water/has a heliport/dock. noai
authorrubidium
Tue, 22 Apr 2008 19:42:52 +0000
branchnoai
changeset 10300 f947a1d7e544
parent 10299 7f1a1c0b6c86
child 10308 0c81dfce3e9b
(svn r12841) [NoAI] -Add: function to test whether an industry is built on water/has a heliport/dock.
src/ai/api/ai_industry.cpp
src/ai/api/ai_industry.hpp
src/ai/api/ai_industry.hpp.sq
--- 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);
 }