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

@@ -414,11 +414,23 @@ static SigInfo ExploreSegment(Owner owner)
if (HasVehicleOnPos(GetOtherTunnelBridgeEnd(tile), &tile, &TrainInWormholeTileEnum)) info.flags |= SF_TRAIN;
if (!(info.flags & SF_TRAIN) && HasVehicleOnPos(tile, &tile, &TrainInWormholeTileEnum)) info.flags |= SF_TRAIN;
}
if (IsTunnelBridgeExit(tile) && !_tbuset.Add(tile, INVALID_TRACKDIR)) {
info.flags |= SF_FULL;
return info;
}
enterdir = dir;
exitdir = ReverseDiagDir(dir);
tile += TileOffsByDiagDir(exitdir); // just skip to next tile
} else { // NOT incoming from the wormhole!
if (ReverseDiagDir(enterdir) != dir) continue;
if (IsTunnelBridgeExit(tile)) {
if (IsTunnelBridgePBS(tile)) {
info.flags |= SF_PBS;
} else if (!_tbuset.Add(tile, INVALID_TRACKDIR)) {
info.flags |= SF_FULL;
return info;
}
}
if (!(info.flags & SF_TRAIN)) {
if (HasVehicleOnPos(tile, &tile, &TrainInWormholeTileEnum)) info.flags |= SF_TRAIN;
if (!(info.flags & SF_TRAIN) && IsTunnelBridgeExit(tile)) {
@@ -469,6 +481,17 @@ static void UpdateSignalsAroundSegment(SigInfo info)
Track track;
while (_tbuset.Get(&tile, &trackdir)) {
if (IsTileType(tile, MP_TUNNELBRIDGE) && IsTunnelBridgeExit(tile)) {
if (IsTunnelBridgePBS(tile)) continue;
bool old_state = IsTunnelBridgeExitGreen(tile);
bool new_state = !(info.flags & SF_TRAIN);
if (old_state != new_state) {
SetTunnelBridgeExitGreen(tile, new_state);
MarkTileDirtyByTile(tile, ZOOM_LVL_DRAW_MAP);
}
continue;
}
assert(HasSignalOnTrackdir(tile, trackdir));
track = TrackdirToTrack(trackdir);