summaryrefslogtreecommitdiff
path: root/src/ai
diff options
context:
space:
mode:
Diffstat (limited to 'src/ai')
-rw-r--r--src/ai/api/ai_tile.cpp8
-rw-r--r--src/ai/api/ai_tile.hpp18
-rw-r--r--src/ai/api/ai_tile.hpp.sq1
3 files changed, 27 insertions, 0 deletions
diff --git a/src/ai/api/ai_tile.cpp b/src/ai/api/ai_tile.cpp
index 29305af8a..a1f16b9bd 100644
--- a/src/ai/api/ai_tile.cpp
+++ b/src/ai/api/ai_tile.cpp
@@ -202,6 +202,14 @@
return AIObject::DoCommand(tile, slope, 0, CMD_TERRAFORM_LAND);
}
+/* static */ bool AITile::LevelTiles(TileIndex start_tile, TileIndex end_tile)
+{
+ EnforcePrecondition(false, ::IsValidTile(start_tile));
+ EnforcePrecondition(false, ::IsValidTile(end_tile));
+
+ return AIObject::DoCommand(end_tile, start_tile, 0, CMD_LEVEL_LAND);
+}
+
/* static */ bool AITile::DemolishTile(TileIndex tile)
{
EnforcePrecondition(false, ::IsValidTile(tile));
diff --git a/src/ai/api/ai_tile.hpp b/src/ai/api/ai_tile.hpp
index 151771cae..9a4df1677 100644
--- a/src/ai/api/ai_tile.hpp
+++ b/src/ai/api/ai_tile.hpp
@@ -313,6 +313,24 @@ public:
static bool LowerTile(TileIndex tile, int32 slope);
/**
+ * Level all tiles in the rectangle between start_tile and end_tile so they
+ * are at the same height. All tiles will be raised or lowered until
+ * they are at height AITile::GetHeight(start_tile).
+ * @param start_tile One corner of the rectangle to level.
+ * @param end_tile The opposite corner of the rectangle.
+ * @pre start_tile < AIMap::GetMapSize().
+ * @pre end_tile < AIMap::GetMapSize().
+ * @exception AIError::ERR_AREA_NOT_CLEAR
+ * @exception AIError::ERR_TOO_CLOSE_TO_EDGE
+ * @return True if and only if the area was completely leveled.
+ * @note Even if leveling some part fails, some other part may have been
+ * succesfully leveled already.
+ * @note This function may return true in AITestMode, although it fails in
+ * AIExecMode.
+ */
+ static bool LevelTiles(TileIndex start_tile, TileIndex end_tile);
+
+ /**
* Destroy everything on the given tile.
* @param tile The tile to demolish.
* @pre AIMap::IsValidTile(tile).
diff --git a/src/ai/api/ai_tile.hpp.sq b/src/ai/api/ai_tile.hpp.sq
index 78a888ca8..844c92cf7 100644
--- a/src/ai/api/ai_tile.hpp.sq
+++ b/src/ai/api/ai_tile.hpp.sq
@@ -87,6 +87,7 @@ void SQAITile_Register(Squirrel *engine) {
SQAITile.DefSQStaticMethod(engine, &AITile::GetDistanceSquareToTile, "GetDistanceSquareToTile", 3, "xii");
SQAITile.DefSQStaticMethod(engine, &AITile::RaiseTile, "RaiseTile", 3, "xii");
SQAITile.DefSQStaticMethod(engine, &AITile::LowerTile, "LowerTile", 3, "xii");
+ SQAITile.DefSQStaticMethod(engine, &AITile::LevelTiles, "LevelTiles", 3, "xii");
SQAITile.DefSQStaticMethod(engine, &AITile::DemolishTile, "DemolishTile", 2, "xi");
SQAITile.DefSQStaticMethod(engine, &AITile::PlantTree, "PlantTree", 2, "xi");
SQAITile.DefSQStaticMethod(engine, &AITile::PlantTreeRectangle, "PlantTreeRectangle", 4, "xiii");