summaryrefslogtreecommitdiff
path: root/src/station_cmd.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/station_cmd.cpp')
-rw-r--r--src/station_cmd.cpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp
index a7d986676..546aecc26 100644
--- a/src/station_cmd.cpp
+++ b/src/station_cmd.cpp
@@ -2632,6 +2632,28 @@ void ClearDockingTilesCheckingNeighbours(TileIndex tile)
}
/**
+ * Check if a dock tile can be docked from the given direction.
+ * @param t Tile index of dock.
+ * @param d DiagDirection adjacent to dock being tested.
+ * @return True iff the dock can be docked from the given direction.
+ */
+bool IsValidDockingDirectionForDock(TileIndex t, DiagDirection d)
+{
+ assert(IsDockTile(t));
+
+ /** Bitmap of valid directions for each dock tile part. */
+ static const uint8 _valid_docking_tile[] = {
+ 0, 0, 0, 0, // No docking against the slope part.
+ 1 << DIAGDIR_NE | 1 << DIAGDIR_SW, // Docking permitted at the end
+ 1 << DIAGDIR_NW | 1 << DIAGDIR_SE, // of the flat piers.
+ };
+
+ StationGfx gfx = GetStationGfx(t);
+ assert(gfx < lengthof(_valid_docking_tile));
+ return HasBit(_valid_docking_tile[gfx], d);
+}
+
+/**
* Find the part of a dock that is land-based
* @param t Dock tile to find land part of
* @return tile of land part of dock