Merge branch 'signal_tunnels_bridges-sx' into jgrpp

# Conflicts:
#	src/saveload/afterload.cpp
#	src/saveload/extended_ver_sl.cpp
#	src/signal.cpp
#	src/train_cmd.cpp
This commit is contained in:
Jonathan G Rennison
2016-02-21 12:16:11 +00:00
12 changed files with 243 additions and 35 deletions

View File

@@ -364,7 +364,7 @@ protected:
if (IsTunnel(m_new_tile)) {
if (!m_is_tunnel) {
DiagDirection tunnel_enterdir = GetTunnelBridgeDirection(m_new_tile);
if (tunnel_enterdir != m_exitdir || IsTunnelBridgeExit(m_new_tile)) {
if (tunnel_enterdir != m_exitdir) {
m_err = EC_NO_WAY;
return false;
}
@@ -372,7 +372,7 @@ protected:
} else { // IsBridge(m_new_tile)
if (!m_is_bridge) {
DiagDirection ramp_enderdir = GetTunnelBridgeDirection(m_new_tile);
if (ramp_enderdir != m_exitdir || IsTunnelBridgeExit(m_new_tile)) {
if (ramp_enderdir != m_exitdir) {
m_err = EC_NO_WAY;
return false;
}

View File

@@ -943,6 +943,10 @@ static void NPFFollowTrack(AyStar *aystar, OpenListNode *current)
break;
}
}
if (IsTileType(dst_tile, MP_TUNNELBRIDGE) && IsTunnelBridgeExit(dst_tile) && DiagDirToDiagTrackdir(GetTunnelBridgeDirection(dst_tile)) == dst_trackdir) {
/* Entering a signalled bridge/tunnel from the wrong side, equivalent to encountering a one-way signal from the wrong side */
break;
}
{
/* We've found ourselves a neighbour :-) */
AyStarNode *neighbour = &aystar->neighbours[i];

View File

@@ -360,6 +360,10 @@ public:
}
}
}
if (IsTileType(tile, MP_TUNNELBRIDGE) && IsTunnelBridgeExit(tile) && DiagDirToDiagTrackdir(GetTunnelBridgeDirection(tile)) == trackdir) {
/* Entering a signalled bridge/tunnel from the wrong side, equivalent to encountering a one-way signal from the wrong side */
n.m_segment->m_end_segment_reason |= ESRB_DEAD_END;
}
return cost;
}