changeset 12522:becf2d0cf3d2 draft

(svn r16959) -Codechange: make the station joiner a bit more aware of the difference between waypoints and stations.
author rubidium <rubidium@openttd.org>
date Sun, 26 Jul 2009 09:25:00 +0000
parents 24160fbe9e96
children 499566607266
files src/station_cmd.cpp src/station_gui.cpp
diffstat 2 files changed, 14 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/src/station_cmd.cpp
+++ b/src/station_cmd.cpp
@@ -551,8 +551,8 @@
 
 		/* Make sure the station can accept the goods type. */
 		bool is_passengers = IsCargoInClass(i, CC_PASSENGERS);
-		if ((!is_passengers && !(st->facilities & (byte)~FACIL_BUS_STOP)) ||
-				(is_passengers && !(st->facilities & (byte)~FACIL_TRUCK_STOP))) {
+		if ((!is_passengers && !(st->facilities & ~FACIL_BUS_STOP)) ||
+				(is_passengers && !(st->facilities & ~FACIL_TRUCK_STOP))) {
 			amt = 0;
 		}
 
@@ -564,7 +564,7 @@
 	if (old_acc == new_acc) return;
 
 	/* show a message to report that the acceptance was changed? */
-	if (show_msg && st->owner == _local_company && st->facilities) {
+	if (show_msg && st->owner == _local_company && st->IsInUse()) {
 		/* List of accept and reject strings for different number of
 		 * cargo types */
 		static const StringID accept_msg[] = {
--- a/src/station_gui.cpp
+++ b/src/station_gui.cpp
@@ -1076,22 +1076,15 @@
 static SmallVector<TileAndStation, 8> _deleted_stations_nearby;
 static SmallVector<StationID, 8> _stations_nearby_list;
 
-/** Context for FindStationsNearby */
-struct FindNearbyStationContext {
-	TileIndex tile; ///< Base tile of station to be built
-	uint      w;    ///< Width of station to be built
-	uint      h;    ///< Height of station to be built
-};
-
 /**
  * Add station on this tile to _stations_nearby_list if it's fully within the
  * station spread.
  * @param tile Tile just being checked
- * @param user_data Pointer to FindNearbyStationContext context
+ * @param user_data Pointer to TileArea context
  */
 static bool AddNearbyStation(TileIndex tile, void *user_data)
 {
-	FindNearbyStationContext *ctx = (FindNearbyStationContext *)user_data;
+	TileArea *ctx = (TileArea *)user_data;
 
 	/* First check if there were deleted stations here */
 	for (uint i = 0; i < _deleted_stations_nearby.Length(); i++) {
@@ -1107,6 +1100,10 @@
 	if (!IsTileType(tile, MP_STATION)) return false;
 
 	StationID sid = GetStationIndex(tile);
+
+	/* This station is (likely) a waypoint */
+	if (!Station::IsValidID(sid)) return false;
+
 	Station *st = Station::Get(sid);
 	if (st->owner != _local_company || _stations_nearby_list.Contains(sid)) return false;
 
@@ -1129,7 +1126,7 @@
  **/
 static const Station *FindStationsNearby(TileIndex tile, int w, int h, bool distant_join)
 {
-	FindNearbyStationContext ctx;
+	TileArea ctx;
 	ctx.tile = tile;
 	ctx.w = w;
 	ctx.h = h;
@@ -1139,13 +1136,13 @@
 
 	/* Check the inside, to return, if we sit on another station */
 	BEGIN_TILE_LOOP(t, w, h, tile)
-		if (t < MapSize() && IsTileType(t, MP_STATION)) return Station::GetByTile(t);
+		if (t < MapSize() && IsTileType(t, MP_STATION) && Station::IsValidID(GetStationIndex(t))) return Station::GetByTile(t);
 	END_TILE_LOOP(t, w, h, tile)
 
 	/* Look for deleted stations */
-	const Station *st;
-	FOR_ALL_STATIONS(st) {
-		if (st->facilities == 0 && st->owner == _local_company) {
+	const BaseStation *st;
+	FOR_ALL_BASE_STATIONS(st) {
+		if (Station::IsExpected(st) && !st->IsInUse() && st->owner == _local_company) {
 			/* Include only within station spread (yes, it is strictly less than) */
 			if (max(DistanceMax(tile, st->xy), DistanceMax(TILE_ADDXY(tile, w - 1, h - 1), st->xy)) < _settings_game.station.station_spread) {
 				TileAndStation *ts = _deleted_stations_nearby.Append();