From e7be1c74cfb3fd663aaed9a0726bdb1f927217e2 Mon Sep 17 00:00:00 2001 From: smatz Date: Fri, 3 Jul 2009 13:33:00 +0000 Subject: (svn r16728) -Fix (r14919): the Join station window didn't show all stations nearby in some cases --- src/station_gui.cpp | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/station_gui.cpp b/src/station_gui.cpp index 6b632e0e7..65a2f39f6 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -1073,8 +1073,14 @@ void ShowStationViewWindow(StationID station) AllocateWindowDescFront(&_station_view_desc, station); } +/** Struct containing TileIndex and StationID */ +struct TileAndStation { + TileIndex tile; ///< TileIndex + StationID station; ///< StationID +}; + +static SmallVector _deleted_stations_nearby; static SmallVector _stations_nearby_list; -static SmallMap _deleted_stations_nearby; /** Context for FindStationsNearby */ struct FindNearbyStationContext { @@ -1093,11 +1099,14 @@ static bool AddNearbyStation(TileIndex tile, void *user_data) { FindNearbyStationContext *ctx = (FindNearbyStationContext *)user_data; - /* First check if there was a deleted station here */ - SmallPair *dst = _deleted_stations_nearby.Find(tile); - if (dst != _deleted_stations_nearby.End()) { - _stations_nearby_list.Include(dst->second); - return false; + /* First check if there were deleted stations here */ + for (uint i = 0; i < _deleted_stations_nearby.Length(); i++) { + TileAndStation *ts = _deleted_stations_nearby.Get(i); + if (ts->tile == tile) { + *_stations_nearby_list.Append() = _deleted_stations_nearby[i].station; + _deleted_stations_nearby.Erase(ts); + i--; + } } /* Check if own station and if we stay within station spread */ @@ -1145,7 +1154,9 @@ static const Station *FindStationsNearby(TileIndex tile, int w, int h, bool dist if (st->facilities == 0 && 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) { - _deleted_stations_nearby.Insert(st->xy, st->index); + TileAndStation *ts = _deleted_stations_nearby.Append(); + ts->tile = st->xy; + ts->station = st->index; /* Add the station when it's within where we're going to build */ if (IsInsideBS(TileX(st->xy), TileX(ctx.tile), ctx.w) && -- cgit v1.2.3-54-g00ecf