summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2009-07-26 09:25:00 +0000
committerrubidium <rubidium@openttd.org>2009-07-26 09:25:00 +0000
commit5b576e6e7a200eda8f1ef05254133591d32f2e27 (patch)
treef7ce5b0957e629b9d3359069164a0e3e2f0139ee /src
parent83b61a75c379d64a0bc856a4fa312fc9f0608c67 (diff)
downloadopenttd-5b576e6e7a200eda8f1ef05254133591d32f2e27.tar.xz
(svn r16959) -Codechange: make the station joiner a bit more aware of the difference between waypoints and stations.
Diffstat (limited to 'src')
-rw-r--r--src/station_cmd.cpp6
-rw-r--r--src/station_gui.cpp25
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();