Fix train reverse inside signalled tunnel/bridge entrance clearing reservation of incoming train
This commit is contained in:
@@ -2725,6 +2725,9 @@ void FreeTrainTrackReservation(const Train *v, TileIndex origin, Trackdir orig_t
|
|||||||
/* Don't free reservation if it's not ours. */
|
/* Don't free reservation if it's not ours. */
|
||||||
if (TracksOverlap(GetReservedTrackbits(tile) | TrackToTrackBits(TrackdirToTrack(td)))) return;
|
if (TracksOverlap(GetReservedTrackbits(tile) | TrackToTrackBits(TrackdirToTrack(td)))) return;
|
||||||
|
|
||||||
|
/* Do not attempt to unreserve out of a signalled tunnel/bridge entrance, as this would unreserve the reservations of another train coming in */
|
||||||
|
if (IsTunnelBridgeWithSignalSimulation(tile) && TrackdirExitsTunnelBridge(tile, td) && IsTunnelBridgeSignalSimulationEntranceOnly(tile)) return;
|
||||||
|
|
||||||
CFollowTrackRail ft(v, GetRailTypeInfo(v->railtype)->compatible_railtypes);
|
CFollowTrackRail ft(v, GetRailTypeInfo(v->railtype)->compatible_railtypes);
|
||||||
while (ft.Follow(tile, td)) {
|
while (ft.Follow(tile, td)) {
|
||||||
tile = ft.m_new_tile;
|
tile = ft.m_new_tile;
|
||||||
|
@@ -372,6 +372,18 @@ static inline bool IsTunnelBridgeSignalSimulationEntrance(TileIndex t)
|
|||||||
return HasBit(_m[t].m5, 5);
|
return HasBit(_m[t].m5, 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Is this a tunnel/bridge entrance tile with signal only?
|
||||||
|
* @param t the tile that might be a tunnel/bridge.
|
||||||
|
* @pre IsTileType(t, MP_TUNNELBRIDGE)
|
||||||
|
* @return true if and only if this tile is a tunnel/bridge entrance only.
|
||||||
|
*/
|
||||||
|
static inline bool IsTunnelBridgeSignalSimulationEntranceOnly(TileIndex t)
|
||||||
|
{
|
||||||
|
assert_tile(IsTileType(t, MP_TUNNELBRIDGE), t);
|
||||||
|
return HasBit(_m[t].m5, 5) && !HasBit(_m[t].m5, 6);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Is this a tunnel/bridge exit?
|
* Is this a tunnel/bridge exit?
|
||||||
* @param t the tile that might be a tunnel/bridge.
|
* @param t the tile that might be a tunnel/bridge.
|
||||||
|
Reference in New Issue
Block a user