Changeset - r1685:5080d72c6c66
[Not reviewed]
master
0 3 0
tron - 20 years ago 2005-04-12 10:31:26
tron@openttd.org
(svn r2189) Introduce and use IsCompatibleTrainStationTile()
This should prevent trains, which are longer than the station, to turn around without stopping under certain circumstances and fix speed limit for trains entering a station, when realistic accerlation is used
3 files changed with 11 insertions and 2 deletions:
0 comments (0 inline, 0 general)
station.h
Show inline comments
 
@@ -276,6 +276,15 @@ static inline bool IsTrainStationTile(ui
 
	return IsTileType(tile, MP_STATION) && IS_BYTE_INSIDE(_map5[tile], 0, 8);
 
}
 

	
 
static inline bool IsCompatibleTrainStationTile(TileIndex tile, TileIndex ref)
 
{
 
	assert(IsTrainStationTile(ref));
 
	return
 
		IsTrainStationTile(tile) &&
 
		(_map3_lo[tile] & 0x0F) == (_map3_lo[ref] & 0x0F) && // same rail type?
 
		(_map5[tile] & 0x01) == (_map5[ref] & 0x01); // same direction?
 
}
 

	
 
static inline bool IsRoadStationTile(uint tile) {
 
	return IsTileType(tile, MP_STATION) && IS_BYTE_INSIDE(_map5[tile], 0x43, 0x4B);
 
}
station_cmd.c
Show inline comments
 
@@ -2322,7 +2322,7 @@ static uint32 VehicleEnter_Station(Vehic
 

	
 
	if (v->type == VEH_Train) {
 
		if (IS_BYTE_INSIDE(_map5[tile], 0, 8) && v->subtype == TS_Front_Engine &&
 
			!IsTrainStationTile(tile + TileOffsByDir(v->direction >> 1))) {
 
				!IsCompatibleTrainStationTile(tile + TileOffsByDir(v->direction >> 1), tile)) {
 

	
 
			station_id = _map2[tile];
 
			if ((!(v->current_order.flags & OF_NON_STOP) && !_patches.new_nonstop) ||
train_cmd.c
Show inline comments
 
@@ -154,7 +154,7 @@ static int GetTrainAcceleration(Vehicle 
 
			do {
 
				station_length++;
 
				tile = TILE_ADD(tile, TileOffsByDir(v->direction / 2));
 
			} while (IsTrainStationTile(tile) && (_map5[tile] & 1) == (_map5[v->tile] & 1));
 
			} while (IsCompatibleTrainStationTile(tile, v->tile));
 

	
 
			delta_v = v->cur_speed / (station_length + 1);
 
			if (v->max_speed > (v->cur_speed - delta_v))
0 comments (0 inline, 0 general)