(svn r13966) -Codechange [YAPP]: Bar level crossings upon path reservation. (michi_cc)
authorrubidium
Sat, 02 Aug 2008 22:57:18 +0000
changeset 9824 4db1a1b0ab09
parent 9823 352b11cff200
child 9825 885c1aeb56a9
(svn r13966) -Codechange [YAPP]: Bar level crossings upon path reservation. (michi_cc)
src/pbs.cpp
src/train_cmd.cpp
--- 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);
 				}