Changeset - r12512:5dadf9eceb54
[Not reviewed]
master
0 2 0
rubidium - 15 years ago 2009-07-26 09:25:00
rubidium@openttd.org
(svn r16959) -Codechange: make the station joiner a bit more aware of the difference between waypoints and stations.
2 files changed with 14 insertions and 17 deletions:
0 comments (0 inline, 0 general)
src/station_cmd.cpp
Show inline comments
 
@@ -548,26 +548,26 @@ static void UpdateStationAcceptance(Stat
 
	/* Adjust in case our station only accepts fewer kinds of goods */
 
	for (CargoID i = 0; i < NUM_CARGO; i++) {
 
		uint amt = min(acceptance[i], 15);
 

	
 
		/* 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;
 
		}
 

	
 
		SB(st->goods[i].acceptance_pickup, GoodsEntry::ACCEPTANCE, 1, amt >= 8);
 
	}
 

	
 
	/* Only show a message in case the acceptance was actually changed. */
 
	uint new_acc = GetAcceptanceMask(st);
 
	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[] = {
 
			STR_NEWS_STATION_NOW_ACCEPTS_CARGO,
 
			STR_NEWS_STATION_NOW_ACCEPTS_CARGO_AND_CARGO,
 
		};
src/station_gui.cpp
Show inline comments
 
@@ -1073,28 +1073,21 @@ struct TileAndStation {
 
	StationID station; ///< StationID
 
};
 

	
 
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++) {
 
		TileAndStation *ts = _deleted_stations_nearby.Get(i);
 
		if (ts->tile == tile) {
 
			*_stations_nearby_list.Append() = _deleted_stations_nearby[i].station;
 
@@ -1104,12 +1097,16 @@ static bool AddNearbyStation(TileIndex t
 
	}
 

	
 
	/* Check if own station and if we stay within station spread */
 
	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;
 

	
 
	if (st->rect.BeforeAddRect(ctx->tile, ctx->w, ctx->h, StationRect::ADD_TEST)) {
 
		*_stations_nearby_list.Append() = sid;
 
	}
 
@@ -1126,29 +1123,29 @@ static bool AddNearbyStation(TileIndex t
 
 * @param h Height of the to-be-built station
 
 * @param distant_join Search for adjacent stations (false) or stations fully
 
 *                     within station spread
 
 **/
 
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;
 

	
 
	_stations_nearby_list.Clear();
 
	_deleted_stations_nearby.Clear();
 

	
 
	/* 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();
 
				ts->tile = st->xy;
 
				ts->station = st->index;
 

	
0 comments (0 inline, 0 general)