(svn r2320) - Fix: [ 1185176 ] Train in tunnel is not properly detected by signal code (Hackykid)
This commit is contained in:
		
							
								
								
									
										30
									
								
								rail_cmd.c
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								rail_cmd.c
									
									
									
									
									
								
							@@ -1619,7 +1619,35 @@ bool SignalVehicleCheck(TileIndex tile, uint track)
 | 
				
			|||||||
	dest.tile = tile;
 | 
						dest.tile = tile;
 | 
				
			||||||
	dest.track = track;
 | 
						dest.track = track;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return VehicleFromPos(tile, &dest, SignalVehicleCheckProc) != NULL;
 | 
						if (GetTileType(tile)==MP_TUNNELBRIDGE && ((_map5[tile] & 0xF0)==0)) {
 | 
				
			||||||
 | 
							// It is a tunnel we're checking, we need to do some special stuff
 | 
				
			||||||
 | 
							// because VehicleFromPos will not find the vihicle otherwise
 | 
				
			||||||
 | 
							byte direction = _map5[tile] & 3;
 | 
				
			||||||
 | 
							FindLengthOfTunnelResult flotr;
 | 
				
			||||||
 | 
							flotr = FindLengthOfTunnel(tile, direction);
 | 
				
			||||||
 | 
							dest.track = 1 << (direction & 1); // get the trackbit the vehicle would have if it has not entered the tunnel yet (ie is still visible)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// check for a vehicle with that trackdir on the start tile of the tunnel
 | 
				
			||||||
 | 
							if (VehicleFromPos(tile, &dest, SignalVehicleCheckProc) != NULL)
 | 
				
			||||||
 | 
								return true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// check for a vehicle with that trackdir on the end tile of the tunnel
 | 
				
			||||||
 | 
							if (VehicleFromPos(flotr.tile, &dest, SignalVehicleCheckProc) != NULL)
 | 
				
			||||||
 | 
								return true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// now check all tiles from start to end for a "hidden" vehicle
 | 
				
			||||||
 | 
							// NOTE: the hashes for tiles may overlap, so this could maybe be optimised a bit by not checking every tile?
 | 
				
			||||||
 | 
							dest.track = 0x40; // trackbit for vehicles "hidden" inside a tunnel
 | 
				
			||||||
 | 
							for (; tile != flotr.tile; tile += TileOffsByDir(direction)) {
 | 
				
			||||||
 | 
								if (VehicleFromPos(tile, &dest, SignalVehicleCheckProc) != NULL)
 | 
				
			||||||
 | 
									return true;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// no vehicle found
 | 
				
			||||||
 | 
							return false;
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							return VehicleFromPos(tile, &dest, SignalVehicleCheckProc) != NULL;
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void SetSignalsAfterProc(TrackPathFinder *tpf)
 | 
					static void SetSignalsAfterProc(TrackPathFinder *tpf)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user