Add helper functions to get tunnel/bridge entrance/exit trackdirs
This commit is contained in:
@@ -2793,7 +2793,7 @@ void ReverseTrainDirection(Train *v)
|
||||
DiagDirection axial_dir = DirToDiagDirAlongAxis(v->direction, axis);
|
||||
TileIndex next_tile = TileVirtXY(v->x_pos, v->y_pos) + TileOffsByDiagDir(axial_dir);
|
||||
if ((!no_near_end_unreserve && next_tile == v->tile) || (!no_far_end_unreserve && next_tile == GetOtherTunnelBridgeEnd(v->tile))) {
|
||||
Trackdir exit_td = TrackEnterdirToTrackdir(FindFirstTrack(GetAcrossTunnelBridgeTrackBits(next_tile)), ReverseDiagDir(GetTunnelBridgeDirection(next_tile)));
|
||||
Trackdir exit_td = GetTunnelBridgeExitTrackdir(next_tile);
|
||||
CFollowTrackRail ft(GetTileOwner(next_tile), GetRailTypeInfo(v->railtype)->all_compatible_railtypes);
|
||||
if (ft.Follow(next_tile, exit_td)) {
|
||||
TrackdirBits reserved = ft.m_new_td_bits & TrackBitsToTrackdirBits(GetReservedTrackbits(ft.m_new_tile));
|
||||
@@ -3968,8 +3968,7 @@ static void TryLongReserveChooseTrainTrack(Train *v, TileIndex tile, Trackdir td
|
||||
TileIndex exit_tile = long_enough ? INVALID_TILE : CheckLongReservePbsTunnelBridgeOnTrackdir(v, tile, td);
|
||||
if (exit_tile != INVALID_TILE) {
|
||||
CFollowTrackRail ft(v);
|
||||
DiagDirection exit_dir = ReverseDiagDir(GetTunnelBridgeDirection(exit_tile));
|
||||
Trackdir exit_td = TrackEnterdirToTrackdir(FindFirstTrack(GetAcrossTunnelBridgeTrackBits(exit_tile)), exit_dir);
|
||||
Trackdir exit_td = GetTunnelBridgeExitTrackdir(exit_tile);
|
||||
if (ft.Follow(exit_tile, exit_td)) {
|
||||
const TrackBits reserved_bits = GetReservedTrackbits(ft.m_new_tile);
|
||||
if ((ft.m_new_td_bits & TrackBitsToTrackdirBits(reserved_bits)) == TRACKDIR_BIT_NONE) {
|
||||
@@ -4901,7 +4900,7 @@ static bool CheckTrainStayInWormHolePathReserve(Train *t, TileIndex tile)
|
||||
if (mark_dirty) MarkTileDirtyByTile(tile, VMDF_NOT_MAP_MODE);
|
||||
});
|
||||
|
||||
Trackdir td = TrackEnterdirToTrackdir(FindFirstTrack(GetAcrossTunnelBridgeTrackBits(tile)), ReverseDiagDir(GetTunnelBridgeDirection(tile)));
|
||||
Trackdir td = GetTunnelBridgeExitTrackdir(tile);
|
||||
CFollowTrackRail ft(GetTileOwner(tile), GetRailTypeInfo(t->railtype)->all_compatible_railtypes);
|
||||
|
||||
if (ft.Follow(tile, td)) {
|
||||
@@ -4995,7 +4994,7 @@ static bool CheckTrainStayInWormHole(Train *t, TileIndex tile)
|
||||
SigSegState seg_state = (_settings_game.pf.reserve_paths || IsTunnelBridgeEffectivelyPBS(tile)) ? SIGSEG_PBS : UpdateSignalsOnSegment(tile, INVALID_DIAGDIR, t->owner);
|
||||
if (seg_state != SIGSEG_PBS) {
|
||||
CFollowTrackRail ft(GetTileOwner(tile), GetRailTypeInfo(t->railtype)->all_compatible_railtypes);
|
||||
if (ft.Follow(tile, TrackEnterdirToTrackdir(FindFirstTrack(GetAcrossTunnelBridgeTrackBits(tile)), ReverseDiagDir(GetTunnelBridgeDirection(tile))))) {
|
||||
if (ft.Follow(tile, GetTunnelBridgeExitTrackdir(tile))) {
|
||||
if (ft.m_new_td_bits != TRACKDIR_BIT_NONE && KillFirstBit(ft.m_new_td_bits) == TRACKDIR_BIT_NONE) {
|
||||
Trackdir td = FindFirstTrackdir(ft.m_new_td_bits);
|
||||
if (HasPbsSignalOnTrackdir(ft.m_new_tile, td)) {
|
||||
|
Reference in New Issue
Block a user