* Finds a vehicle approaching rail-road crossing * @param tile tile to test * @return true if a vehicle is approaching the crossing * @pre tile is a rail-road crossing */
| 1730 | * @pre tile is a rail-road crossing |
| 1731 | */ |
| 1732 | static bool TrainApproachingCrossing(TileIndex tile) |
| 1733 | { |
| 1734 | assert(IsLevelCrossingTile(tile)); |
| 1735 | |
| 1736 | DiagDirection dir = AxisToDiagDir(GetCrossingRailAxis(tile)); |
| 1737 | TileIndex tile_from = tile + TileOffsByDiagDir(dir); |
| 1738 | |
| 1739 | if (HasVehicleOnTile(tile_from, [&](const Vehicle *v) { |
| 1740 | return TrainApproachingCrossingEnum(v, tile); |
| 1741 | })) return true; |
| 1742 | |
| 1743 | dir = ReverseDiagDir(dir); |
| 1744 | tile_from = tile + TileOffsByDiagDir(dir); |
| 1745 | |
| 1746 | return HasVehicleOnTile(tile_from, [&](const Vehicle *v) { |
| 1747 | return TrainApproachingCrossingEnum(v, tile); |
| 1748 | }); |
| 1749 | } |
| 1750 | |
| 1751 | /** |
| 1752 | * Check if a level crossing should be barred. |
no test coverage detected