(svn r13966) -Codechange [YAPP]: Bar level crossings upon path reservation. (michi_cc)
--- a/src/pbs.cpp Sat Aug 02 22:57:03 2008 +0000
+++ b/src/pbs.cpp Sat Aug 02 22:57:18 2008 +0000
@@ -101,6 +101,8 @@
case MP_ROAD:
if (IsLevelCrossing(tile) && !GetCrossingReservation(tile)) {
SetCrossingReservation(tile, true);
+ BarCrossing(tile);
+ MarkTileDirtyByTile(tile);
return true;
}
break;
@@ -149,7 +151,10 @@
break;
case MP_ROAD:
- if (IsLevelCrossing(tile)) SetCrossingReservation(tile, false);
+ if (IsLevelCrossing(tile)) {
+ SetCrossingReservation(tile, false);
+ UpdateLevelCrossing(tile);
+ }
break;
case MP_STATION:
--- a/src/train_cmd.cpp Sat Aug 02 22:57:03 2008 +0000
+++ b/src/train_cmd.cpp Sat Aug 02 22:57:18 2008 +0000
@@ -1773,8 +1773,8 @@
{
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) {
@@ -3734,6 +3734,10 @@
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);
}