MCPcopy Create free account
hub / github.com/OpenTTD/OpenTTD / TrainApproachingCrossingTile

Function TrainApproachingCrossingTile

src/train_cmd.cpp:3869–3886  ·  view source on GitHub ↗

* Determines whether train is approaching a rail-road crossing * (thus making it barred) * @param v front engine of train * @return TileIndex of crossing the train is approaching, else INVALID_TILE * @pre v in non-crashed front engine */

Source from the content-addressed store, hash-verified

3867 * @pre v in non-crashed front engine
3868 */
3869static TileIndex TrainApproachingCrossingTile(const Train *v)
3870{
3871 assert(v->IsFrontEngine());
3872 assert(!v->vehstatus.Test(VehState::Crashed));
3873
3874 if (!TrainCanLeaveTile(v)) return INVALID_TILE;
3875
3876 DiagDirection dir = VehicleExitDir(v->direction, v->track);
3877 TileIndex tile = v->tile + TileOffsByDiagDir(dir);
3878
3879 /* not a crossing || wrong axis || unusable rail (wrong type or owner) */
3880 if (!IsLevelCrossingTile(tile) || DiagDirToAxis(dir) == GetCrossingRoadAxis(tile) ||
3881 !CheckCompatibleRail(v, tile)) {
3882 return INVALID_TILE;
3883 }
3884
3885 return tile;
3886}
3887
3888
3889/**

Callers 4

ReverseTrainDirectionFunction · 0.85
CrashMethod · 0.85
TrainControllerFunction · 0.85

Calls 9

TrainCanLeaveTileFunction · 0.85
VehicleExitDirFunction · 0.85
TileOffsByDiagDirFunction · 0.85
IsLevelCrossingTileFunction · 0.85
DiagDirToAxisFunction · 0.85
GetCrossingRoadAxisFunction · 0.85
CheckCompatibleRailFunction · 0.85
IsFrontEngineMethod · 0.80
TestMethod · 0.80

Tested by

no test coverage detected