diff options
Diffstat (limited to 'src/ai')
-rw-r--r-- | src/ai/api/ai_industry.cpp | 28 | ||||
-rw-r--r-- | src/ai/api/ai_industry.hpp | 31 | ||||
-rw-r--r-- | src/ai/api/ai_industry.hpp.sq | 6 |
3 files changed, 53 insertions, 12 deletions
diff --git a/src/ai/api/ai_industry.cpp b/src/ai/api/ai_industry.cpp index 6ef383672..a1493c0b5 100644 --- a/src/ai/api/ai_industry.cpp +++ b/src/ai/api/ai_industry.cpp @@ -134,17 +134,39 @@ return (::GetIndustrySpec(::GetIndustry(industry_id)->type)->behaviour & INDUSTRYBEH_BUILT_ONWATER) != 0; } -/* static */ bool AIIndustry::HasHeliportAndDock(IndustryID industry_id) +/* static */ bool AIIndustry::HasHeliport(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) +/* static */ TileIndex AIIndustry::GetHeliportLocation(IndustryID industry_id) { if (!IsValidIndustry(industry_id)) return INVALID_TILE; - if (!HasHeliportAndDock(industry_id)) return INVALID_TILE; + if (!HasHeliport(industry_id)) return INVALID_TILE; + + const Industry *ind = ::GetIndustry(industry_id); + BEGIN_TILE_LOOP(tile_cur, ind->width, ind->height, ind->xy); + if (IsTileType(tile_cur, MP_STATION) && IsOilRig(tile_cur)) { + return tile_cur; + } + END_TILE_LOOP(tile_cur, ind->width, ind->height, ind->xy); + + return INVALID_TILE; +} + +/* static */ bool AIIndustry::HasDock(IndustryID industry_id) +{ + if (!IsValidIndustry(industry_id)) return false; + + return (::GetIndustrySpec(::GetIndustry(industry_id)->type)->behaviour & INDUSTRYBEH_AI_AIRSHIP_ROUTES) != 0; +} + +/* static */ TileIndex AIIndustry::GetDockLocation(IndustryID industry_id) +{ + if (!IsValidIndustry(industry_id)) return INVALID_TILE; + if (!HasDock(industry_id)) return INVALID_TILE; const Industry *ind = ::GetIndustry(industry_id); BEGIN_TILE_LOOP(tile_cur, ind->width, ind->height, ind->xy); diff --git a/src/ai/api/ai_industry.hpp b/src/ai/api/ai_industry.hpp index 11d3dbc43..abaff2ea2 100644 --- a/src/ai/api/ai_industry.hpp +++ b/src/ai/api/ai_industry.hpp @@ -132,21 +132,38 @@ public: static bool IsBuiltOnWater(IndustryID industry_id); /** - * Does this industry have a heliport and dock? + * Does this industry have a heliport? * @param industry_id The index of the industry. * @pre IsValidIndustry(industry_id). - * @return True when the industry has a heliport and dock. + * @return True when the industry has a heliport. */ - static bool HasHeliportAndDock(IndustryID industry_id); + static bool HasHeliport(IndustryID industry_id); /** - * Gets the location of the industry's heliport/dock. + * Gets the location of the industry's heliport. * @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. + * @pre HasHeliport(industry_id). + * @return The location of the industry's heliport. */ - static TileIndex GetHeliportAndDockLocation(IndustryID industry_id); + static TileIndex GetHeliportLocation(IndustryID industry_id); + + /** + * Does this industry have a dock? + * @param industry_id The index of the industry. + * @pre IsValidIndustry(industry_id). + * @return True when the industry has a dock. + */ + static bool HasDock(IndustryID industry_id); + + /** + * Gets the location of the industry's dock. + * @param industry_id The index of the industry. + * @pre IsValidIndustry(industry_id). + * @pre HasDock(industry_id). + * @return The location of the industry's dock. + */ + static TileIndex GetDockLocation(IndustryID industry_id); /** * Get the IndustryType of the industry. diff --git a/src/ai/api/ai_industry.hpp.sq b/src/ai/api/ai_industry.hpp.sq index 399ed384e..539684414 100644 --- a/src/ai/api/ai_industry.hpp.sq +++ b/src/ai/api/ai_industry.hpp.sq @@ -30,8 +30,10 @@ void SQAIIndustry_Register(Squirrel *engine) { SQAIIndustry.DefSQStaticMethod(engine, &AIIndustry::GetDistanceManhattanToTile, "GetDistanceManhattanToTile", 3, "?ii"); SQAIIndustry.DefSQStaticMethod(engine, &AIIndustry::GetDistanceSquareToTile, "GetDistanceSquareToTile", 3, "?ii"); SQAIIndustry.DefSQStaticMethod(engine, &AIIndustry::IsBuiltOnWater, "IsBuiltOnWater", 2, "?i"); - SQAIIndustry.DefSQStaticMethod(engine, &AIIndustry::HasHeliportAndDock, "HasHeliportAndDock", 2, "?i"); - SQAIIndustry.DefSQStaticMethod(engine, &AIIndustry::GetHeliportAndDockLocation, "GetHeliportAndDockLocation", 2, "?i"); + SQAIIndustry.DefSQStaticMethod(engine, &AIIndustry::HasHeliport, "HasHeliport", 2, "?i"); + SQAIIndustry.DefSQStaticMethod(engine, &AIIndustry::GetHeliportLocation, "GetHeliportLocation", 2, "?i"); + SQAIIndustry.DefSQStaticMethod(engine, &AIIndustry::HasDock, "HasDock", 2, "?i"); + SQAIIndustry.DefSQStaticMethod(engine, &AIIndustry::GetDockLocation, "GetDockLocation", 2, "?i"); SQAIIndustry.DefSQStaticMethod(engine, &AIIndustry::GetIndustryType, "GetIndustryType", 2, "?i"); SQAIIndustry.PostRegister(engine); |