src/train_cmd.cpp
changeset 8840 81cfba69eddd
parent 8838 1549b7f9d0a8
child 8846 f3e877a92e2b
--- a/src/train_cmd.cpp	Thu Jan 17 20:00:13 2008 +0000
+++ b/src/train_cmd.cpp	Thu Jan 17 20:41:33 2008 +0000
@@ -1683,20 +1683,23 @@
 /**
  * Sets correct crossing state
  * @param tile tile to update
+ * @param sound should we play sound?
  * @pre tile is a rail-road crossing
  */
-void UpdateLevelCrossing(TileIndex tile)
+void UpdateLevelCrossing(TileIndex tile, bool sound)
 {
 	assert(IsLevelCrossingTile(tile));
 
-	UnbarCrossing(tile);
-
 	/* train on crossing || train approaching crossing */
-	if (VehicleFromPos(tile, NULL, &TrainOnTileEnum) || TrainApproachingCrossing(tile)) {
-		BarCrossing(tile);
+	bool new_state = VehicleFromPos(tile, NULL, &TrainOnTileEnum) || TrainApproachingCrossing(tile);
+
+	if (new_state != IsCrossingBarred(tile)) {
+		if (new_state && sound) {
+			SndPlayTileFx(SND_0E_LEVEL_CROSSING, tile);
+		}
+		SetCrossingBarred(tile, new_state);
+		MarkTileDirtyByTile(tile);
 	}
-
-	MarkTileDirtyByTile(tile);
 }
 
 
@@ -3458,7 +3461,7 @@
 	/* approaching a rail/road crossing? then make it red */
 	if (IsLevelCrossingTile(tile) && !IsCrossingBarred(tile)) {
 		BarCrossing(tile);
-		SndPlayVehicleFx(SND_0E_LEVEL_CROSSING, v);
+		SndPlayTileFx(SND_0E_LEVEL_CROSSING, tile);
 		MarkTileDirtyByTile(tile);
 	}