summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/map.cpp17
-rw-r--r--src/map_func.h1
2 files changed, 18 insertions, 0 deletions
diff --git a/src/map.cpp b/src/map.cpp
index ae05a6cd3..70d9cce83 100644
--- a/src/map.cpp
+++ b/src/map.cpp
@@ -225,6 +225,23 @@ uint DistanceFromEdge(TileIndex tile)
}
/*!
+ * Gets the distance to the edge of the map in given direction.
+ * @param tile the tile to get the distance from
+ * @param diagdir the direction of interest
+ * @return the distance from the edge in tiles
+ */
+uint DistanceFromEdgeDir(TileIndex tile, DiagDirection dir)
+{
+ switch (dir) {
+ case DIAGDIR_NE: return TileX(tile) - (_settings_game.construction.freeform_edges ? 1 : 0);
+ case DIAGDIR_NW: return TileY(tile) - (_settings_game.construction.freeform_edges ? 1 : 0);
+ case DIAGDIR_SW: return MapMaxX() - TileX(tile) - 1;
+ case DIAGDIR_SE: return MapMaxY() - TileY(tile) - 1;
+ default: NOT_REACHED();
+ }
+}
+
+/*!
* Function performing a search around a center tile and going outward, thus in circle.
* Although it really is a square search...
* Every tile will be tested by means of the callback function proc,
diff --git a/src/map_func.h b/src/map_func.h
index 68c555e6d..42d6dd142 100644
--- a/src/map_func.h
+++ b/src/map_func.h
@@ -331,6 +331,7 @@ uint DistanceSquare(TileIndex, TileIndex); ///< euclidian- or L2-Norm squared
uint DistanceMax(TileIndex, TileIndex); ///< also known as L-Infinity-Norm
uint DistanceMaxPlusManhattan(TileIndex, TileIndex); ///< Max + Manhattan
uint DistanceFromEdge(TileIndex); ///< shortest distance from any edge of the map
+uint DistanceFromEdgeDir(TileIndex, DiagDirection); ///< distance from the map edge in given direction
/**
* A loop which iterates to a square of tiles