src/road_cmd.cpp
branchnoai
changeset 10645 8cbdb511a674
parent 10513 33cb70ff2f5d
child 10713 c5c9dc32c052
--- a/src/road_cmd.cpp	Mon May 19 14:14:33 2008 +0000
+++ b/src/road_cmd.cpp	Mon May 19 15:13:58 2008 +0000
@@ -43,6 +43,37 @@
 #include "table/sprites.h"
 #include "table/strings.h"
 
+
+bool RoadVehiclesAreBuilt()
+{
+	const Vehicle* v;
+
+	FOR_ALL_VEHICLES(v) {
+		if (v->type == VEH_ROAD) return true;
+	}
+	return false;
+}
+
+/**
+ * Change the side of the road vehicles drive on (server only).
+ * @param tile unused
+ * @param flags operation to perform
+ * @param p1 the side of the road; 0 = left side and 1 = right side
+ * @param p2 unused
+ */
+CommandCost CmdSetRoadDriveSide(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+{
+	/* Check boundaries and you can only change this if NO vehicles have been built yet,
+	 * except in the intro-menu where of course it's always possible to do so. */
+	if (p1 > 1 || (_game_mode != GM_MENU && RoadVehiclesAreBuilt())) return CMD_ERROR;
+
+	if (flags & DC_EXEC) {
+		_opt_ptr->road_side = p1;
+		InvalidateWindow(WC_GAME_OPTIONS, 0);
+	}
+	return CommandCost();
+}
+
 #define M(x) (1 << (x))
 /* Level crossings may only be built on these slopes */
 static const uint32 VALID_LEVEL_CROSSING_SLOPES = (M(SLOPE_SEN) | M(SLOPE_ENW) | M(SLOPE_NWS) | M(SLOPE_NS) | M(SLOPE_WSE) | M(SLOPE_EW) | M(SLOPE_FLAT));
@@ -1390,7 +1421,7 @@
 
 					if (side != INVALID_DIAGDIR && side != dir) break;
 
-					trackdirbits = TrackBitsToTrackdirBits(AxisToTrackBits(DiagDirToAxis(dir)));
+					trackdirbits = TrackBitsToTrackdirBits(DiagDirToDiagTrackBits(dir));
 					break;
 				}
 			}