Changeset - r9824:94c591de0a6f
[Not reviewed]
master
0 2 0
rubidium - 16 years ago 2008-08-02 22:57:18
rubidium@openttd.org
(svn r13966) -Codechange [YAPP]: Bar level crossings upon path reservation. (michi_cc)
2 files changed with 12 insertions and 3 deletions:
0 comments (0 inline, 0 general)
src/pbs.cpp
Show inline comments
 
@@ -98,12 +98,14 @@ bool TryReserveRailTrack(TileIndex tile,
 
			}
 
			break;
 

	
 
		case MP_ROAD:
 
			if (IsLevelCrossing(tile) && !GetCrossingReservation(tile)) {
 
				SetCrossingReservation(tile, true);
 
				BarCrossing(tile);
 
				MarkTileDirtyByTile(tile);
 
				return true;
 
			}
 
			break;
 

	
 
		case MP_STATION:
 
			if (IsRailwayStation(tile) && !GetRailwayStationReservation(tile)) {
 
@@ -146,13 +148,16 @@ bool TryReserveRailTrack(TileIndex tile,
 
				MarkTileDirtyByTile(tile);
 
			}
 
			if (IsPlainRailTile(tile)) UnreserveTrack(tile, t);
 
			break;
 

	
 
		case MP_ROAD:
 
			if (IsLevelCrossing(tile)) SetCrossingReservation(tile, false);
 
			if (IsLevelCrossing(tile)) {
 
				SetCrossingReservation(tile, false);
 
				UpdateLevelCrossing(tile);
 
			}
 
			break;
 

	
 
		case MP_STATION:
 
			if (IsRailwayStation(tile)) {
 
				SetRailwayStationReservation(tile, false);
 
				MarkTileDirtyByTile(tile);
src/train_cmd.cpp
Show inline comments
 
@@ -1770,14 +1770,14 @@ static Vehicle *TrainApproachingCrossing
 
 * @pre tile is a rail-road crossing
 
 */
 
void UpdateLevelCrossing(TileIndex tile, bool sound)
 
{
 
	assert(IsLevelCrossingTile(tile));
 

	
 
	/* train on crossing || train approaching crossing */
 
	bool new_state = VehicleFromPos(tile, NULL, &TrainOnTileEnum) != NULL || TrainApproachingCrossing(tile);
 
	/* train on crossing || train approaching crossing || reserved */
 
	bool new_state = VehicleFromPos(tile, NULL, &TrainOnTileEnum) != NULL || TrainApproachingCrossing(tile) || GetCrossingReservation(tile);
 

	
 
	if (new_state != IsCrossingBarred(tile)) {
 
		if (new_state && sound) {
 
			SndPlayTileFx(SND_0E_LEVEL_CROSSING, tile);
 
		}
 
		SetCrossingBarred(tile, new_state);
 
@@ -3731,12 +3731,16 @@ static void TrainController(Vehicle *v, 
 

	
 
				v->direction = chosen_dir;
 

	
 
				if (IsFrontEngine(v)) {
 
					v->load_unload_time_rem = 0;
 

	
 
					/* If we are approching a crossing that is reserved, play the sound now. */
 
					TileIndex crossing = TrainApproachingCrossingTile(v);
 
					if (crossing != INVALID_TILE && GetCrossingReservation(crossing)) SndPlayTileFx(SND_0E_LEVEL_CROSSING, crossing);
 

	
 
					/* Always try to extend the reservation when entering a tile. */
 
					CheckNextTrainTile(v);
 
				}
 
			}
 
		} else {
 
			/* In a tunnel or on a bridge
0 comments (0 inline, 0 general)