(svn r14456) -Fix: Obiwan in catchment-area and station-spread of docks.
authorfrosch
Fri, 10 Oct 2008 20:09:29 +0000
changeset 10228 2de09b30921a
parent 10227 2119781291ba
child 10229 798fb176712c
(svn r14456) -Fix: Obiwan in catchment-area and station-spread of docks.
src/station_cmd.cpp
src/station_map.h
--- a/src/station_cmd.cpp	Wed Oct 08 11:29:17 2008 +0000
+++ b/src/station_cmd.cpp	Fri Oct 10 20:09:29 2008 +0000
@@ -547,7 +547,12 @@
 		MergePoint(&rect, st->airport_tile + TileDiffXY(afc->size_x - 1, afc->size_y - 1));
 	}
 
-	if (st->dock_tile != 0) MergePoint(&rect, st->dock_tile);
+	if (st->dock_tile != 0) {
+		MergePoint(&rect, st->dock_tile);
+		if (IsDockTile(st->dock_tile)) {
+			MergePoint(&rect, st->dock_tile + TileOffsByDiagDir(GetDockDirection(st->dock_tile)));
+		} // else OilRig
+	}
 
 	for (const RoadStop *rs = st->bus_stops; rs != NULL; rs = rs->next) {
 		MergePoint(&rect, rs->xy);
@@ -559,7 +564,12 @@
 
 	/* And retrieve the acceptance. */
 	AcceptedCargo accepts;
+	assert((rect.right >= rect.left) == !st->rect.IsEmpty());
 	if (rect.right >= rect.left) {
+		assert(rect.left == st->rect.left);
+		assert(rect.top == st->rect.bottom);
+		assert(rect.right == st->rect.right);
+		assert(rect.bottom == st->rect.top);
 		GetAcceptanceAroundTiles(
 			accepts,
 			TileXY(rect.left, rect.bottom),
@@ -2126,7 +2136,9 @@
 			return_cmd_error(STR_3009_TOO_CLOSE_TO_ANOTHER_STATION);
 		}
 
-		if (!st->rect.BeforeAddRect(tile, _dock_w_chk[direction], _dock_h_chk[direction], StationRect::ADD_TEST)) return CMD_ERROR;
+		if (!st->rect.BeforeAddRect(
+				tile + ToTileIndexDiff(_dock_tileoffs_chkaround[direction]),
+				_dock_w_chk[direction], _dock_h_chk[direction], StationRect::ADD_TEST)) return CMD_ERROR;
 
 		if (st->dock_tile != 0) return_cmd_error(STR_304C_TOO_CLOSE_TO_ANOTHER_DOCK);
 	} else {
@@ -2150,7 +2162,9 @@
 		st->dock_tile = tile;
 		st->AddFacility(FACIL_DOCK, tile);
 
-		st->rect.BeforeAddRect(tile, _dock_w_chk[direction], _dock_h_chk[direction], StationRect::ADD_TRY);
+		st->rect.BeforeAddRect(
+				tile + ToTileIndexDiff(_dock_tileoffs_chkaround[direction]),
+				_dock_w_chk[direction], _dock_h_chk[direction], StationRect::ADD_TRY);
 
 		MakeDock(tile, st->owner, st->index, direction, wc);
 
--- a/src/station_map.h	Wed Oct 08 11:29:17 2008 +0000
+++ b/src/station_map.h	Fri Oct 10 20:09:29 2008 +0000
@@ -165,6 +165,11 @@
 	return GetStationType(t) == STATION_DOCK;
 }
 
+static inline bool IsDockTile(TileIndex t)
+{
+	return IsTileType(t, MP_STATION) && GetStationType(t) == STATION_DOCK;
+}
+
 static inline bool IsBuoy(TileIndex t)
 {
 	return GetStationType(t) == STATION_BUOY;