summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsmatz <smatz@openttd.org>2009-07-03 13:33:00 +0000
committersmatz <smatz@openttd.org>2009-07-03 13:33:00 +0000
commite7be1c74cfb3fd663aaed9a0726bdb1f927217e2 (patch)
tree18c5f47e3fb1aa0d58b6fc35b2867a4409772b02
parent3c50a66cedfa1632cf151c9e7a031e042ffeb004 (diff)
downloadopenttd-e7be1c74cfb3fd663aaed9a0726bdb1f927217e2.tar.xz
(svn r16728) -Fix (r14919): the Join station window didn't show all stations nearby in some cases
-rw-r--r--src/station_gui.cpp25
1 files changed, 18 insertions, 7 deletions
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<StationViewWindow>(&_station_view_desc, station);
}
+/** Struct containing TileIndex and StationID */
+struct TileAndStation {
+ TileIndex tile; ///< TileIndex
+ StationID station; ///< StationID
+};
+
+static SmallVector<TileAndStation, 8> _deleted_stations_nearby;
static SmallVector<StationID, 8> _stations_nearby_list;
-static SmallMap<TileIndex, StationID, 8> _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<TileIndex, StationID> *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) &&