(svn r25037) -Fix [FS#5480]: green path signals would be shown when building them 'under' a train, and they would keep showing green until they were passed again

This commit is contained in:
rubidium 2013-02-23 18:15:54 +00:00
parent c58c86efda
commit 0c8b215935

View File

@ -1139,9 +1139,9 @@ CommandCost CmdBuildSingleSignal(TileIndex tile, DoCommandFlag flags, uint32 p1,
DirtyCompanyInfrastructureWindows(GetTileOwner(tile)); DirtyCompanyInfrastructureWindows(GetTileOwner(tile));
if (IsPbsSignal(sigtype)) { if (IsPbsSignal(sigtype)) {
/* PBS signals should show red unless they are on a reservation. */ /* PBS signals should show red unless they are on reserved tiles without a train. */
uint mask = GetPresentSignals(tile) & SignalOnTrack(track); uint mask = GetPresentSignals(tile) & SignalOnTrack(track);
SetSignalStates(tile, (GetSignalStates(tile) & ~mask) | ((HasBit(GetRailReservationTrackBits(tile), track) ? UINT_MAX : 0) & mask)); SetSignalStates(tile, (GetSignalStates(tile) & ~mask) | ((HasBit(GetRailReservationTrackBits(tile), track) && EnsureNoVehicleOnGround(tile).Succeeded() ? UINT_MAX : 0) & mask));
} }
MarkTileDirtyByTile(tile); MarkTileDirtyByTile(tile);
AddTrackToSignalBuffer(tile, track, _current_company); AddTrackToSignalBuffer(tile, track, _current_company);