diff options
author | rubidium <rubidium@openttd.org> | 2009-07-26 09:25:00 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2009-07-26 09:25:00 +0000 |
commit | 5b576e6e7a200eda8f1ef05254133591d32f2e27 (patch) | |
tree | f7ce5b0957e629b9d3359069164a0e3e2f0139ee | |
parent | 83b61a75c379d64a0bc856a4fa312fc9f0608c67 (diff) | |
download | openttd-5b576e6e7a200eda8f1ef05254133591d32f2e27.tar.xz |
(svn r16959) -Codechange: make the station joiner a bit more aware of the difference between waypoints and stations.
-rw-r--r-- | src/station_cmd.cpp | 6 | ||||
-rw-r--r-- | src/station_gui.cpp | 25 |
2 files changed, 14 insertions, 17 deletions
diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index e5d021597..6c783780a 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -551,8 +551,8 @@ static void UpdateStationAcceptance(Station *st, bool show_msg) /* 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 @@ static void UpdateStationAcceptance(Station *st, bool show_msg) 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[] = { diff --git a/src/station_gui.cpp b/src/station_gui.cpp index ac0eaf51b..39a4c95c5 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -1076,22 +1076,15 @@ struct TileAndStation { 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 @@ static bool AddNearbyStation(TileIndex tile, void *user_data) 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 bool AddNearbyStation(TileIndex tile, void *user_data) **/ 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 @@ static const Station *FindStationsNearby(TileIndex tile, int w, int h, bool dist /* 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(); |