summaryrefslogtreecommitdiff
path: root/src/road.h
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2007-09-26 16:12:43 +0000
committerrubidium <rubidium@openttd.org>2007-09-26 16:12:43 +0000
commit01edaeec578bddb73b4513baf9d8bfe5f9a886b0 (patch)
tree226af8de8514a96ed474dc9590f68e2c517a31d9 /src/road.h
parenta85e18c92200590c84a6c3d3f60dd41f394cc0fe (diff)
downloadopenttd-01edaeec578bddb73b4513baf9d8bfe5f9a886b0.tar.xz
(svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
Diffstat (limited to 'src/road.h')
-rw-r--r--src/road.h48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/road.h b/src/road.h
index 051508971..e97600f1a 100644
--- a/src/road.h
+++ b/src/road.h
@@ -116,6 +116,36 @@ static inline RoadBits ComplementRoadBits(RoadBits r)
}
/**
+ * Calculate the mirrored RoadBits
+ *
+ * Simply move the bits to their new position.
+ *
+ * @param r The given RoadBits value
+ * @return the mirrored
+ */
+static inline RoadBits MirrorRoadBits(RoadBits r)
+{
+ return (RoadBits)(GB(r, 0, 2) << 2 | GB(r, 2, 2));
+}
+
+/**
+ * Calculate rotated RoadBits
+ *
+ * Move the Roadbits clockwise til they are in their final position.
+ *
+ * @param r The given RoadBits value
+ * @param rot The given Rotation angle
+ * @return the rotated
+ */
+static inline RoadBits RotateRoadBits(RoadBits r, DiagDirDiff rot)
+{
+ for (; rot > (DiagDirDiff)0; rot--){
+ r = (RoadBits)(GB(r, 0, 1) << 3 | GB(r, 1, 3));
+ }
+ return r;
+}
+
+/**
* Create the road-part which belongs to the given DiagDirection
*
* This function returns a RoadBits value which belongs to
@@ -130,6 +160,16 @@ static inline RoadBits DiagDirToRoadBits(DiagDirection d)
}
/**
+ * Return if the tile is a valid tile for a crossing.
+ *
+ * @note function is overloaded
+ * @param tile the curent tile
+ * @param ax the axis of the road over the rail
+ * @return true if it is a valid tile
+ */
+bool IsPossibleCrossing(const TileIndex tile, Axis ax);
+
+/**
* Checks whether the trackdir means that we are reversing.
* @param dir the trackdir to check
* @return true if it is a reversing road trackdir
@@ -150,6 +190,14 @@ static inline bool IsStraightRoadTrackdir(Trackdir dir)
}
/**
+ * Clean up unneccesary RoadBits of a planed tile.
+ * @param tile current tile
+ * @param org_rb planed RoadBits
+ * @return optimised RoadBits
+ */
+RoadBits CleanUpRoadBits(const TileIndex tile, RoadBits org_rb);
+
+/**
* Is it allowed to remove the given road bits from the given tile?
* @param tile the tile to remove the road from
* @param remove the roadbits that are going to be removed