changeset 15690:b1af6b1e509d draft

(svn r20356) -Fix [FS#3983]: apparantly one generic error message can't be understood...
author rubidium <rubidium@openttd.org>
date Tue, 03 Aug 2010 18:32:53 +0000
parents 6931dd400fdf
children 4363493b3838
files src/lang/english.txt src/station_cmd.cpp
diffstat 2 files changed, 17 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/lang/english.txt
+++ b/src/lang/english.txt
@@ -3496,6 +3496,8 @@
 STR_ERROR_CAN_T_RENAME_STATION                                  :{WHITE}Can't rename station...
 STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD                            :{WHITE}... this is a town owned road
 STR_ERROR_DRIVE_THROUGH_DIRECTION                               :{WHITE}... road facing in the wrong direction
+STR_ERROR_DRIVE_THROUGH_CORNER                                  :{WHITE}... drive through stops can't have corners
+STR_ERROR_DRIVE_THROUGH_JUNCTION                                :{WHITE}... drive through stops can't have junctions
 
 # Station destruction related errors
 STR_ERROR_CAN_T_REMOVE_PART_OF_STATION                          :{WHITE}Can't remove part of station...
--- a/src/station_cmd.cpp
+++ b/src/station_cmd.cpp
@@ -862,7 +862,21 @@
 		} else {
 			bool build_over_road = is_drive_through && IsNormalRoadTile(cur_tile);
 			/* Road bits in the wrong direction. */
-			if (build_over_road && (GetAllRoadBits(cur_tile) & (axis == AXIS_X ? ROAD_Y : ROAD_X)) != 0) return_cmd_error(STR_ERROR_DRIVE_THROUGH_DIRECTION);
+			RoadBits rb = GetAllRoadBits(cur_tile);
+			if (build_over_road && (rb & (axis == AXIS_X ? ROAD_Y : ROAD_X)) != 0) {
+				/* Someone was pedantic and *NEEDED* three fracking different error messages. */
+				switch (CountBits(rb)) {
+					case 1:
+						return_cmd_error(STR_ERROR_DRIVE_THROUGH_DIRECTION);
+
+					case 2:
+						if (rb == ROAD_X || rb == ROAD_Y) return_cmd_error(STR_ERROR_DRIVE_THROUGH_DIRECTION);
+						return_cmd_error(STR_ERROR_DRIVE_THROUGH_CORNER);
+
+					default: // 3 or 4
+						return_cmd_error(STR_ERROR_DRIVE_THROUGH_JUNCTION);
+				}
+			}
 
 			RoadTypes cur_rts = IsNormalRoadTile(cur_tile) ? GetRoadTypes(cur_tile) : ROADTYPES_NONE;
 			uint num_roadbits = 0;