File diff r5730:0ac943586328 → r5731:f5f88f3094dd
src/rail_gui.cpp
Show inline comments
 
@@ -164,16 +164,16 @@ static void PlaceRail_Station(TileIndex 
 

	
 
static void GenericPlaceSignals(TileIndex tile)
 
{
 
	uint trackstat;
 
	byte trackstat;
 
	uint i;
 

	
 
	trackstat = (byte)GetTileTrackStatus(tile, TRANSPORT_RAIL);
 

	
 
	if ((trackstat & 0x30)) // N-S direction
 
		trackstat = (_tile_fract_coords.x <= _tile_fract_coords.y) ? 0x20 : 0x10;
 
	if (trackstat & TRACK_BIT_VERT) // N-S direction
 
		trackstat = (_tile_fract_coords.x <= _tile_fract_coords.y) ? TRACK_BIT_RIGHT : TRACK_BIT_LEFT;
 

	
 
	if ((trackstat & 0x0C)) // E-W direction
 
		trackstat = (_tile_fract_coords.x + _tile_fract_coords.y <= 15) ? 4 : 8;
 
	if (trackstat & TRACK_BIT_HORZ) // E-W direction
 
		trackstat = (_tile_fract_coords.x + _tile_fract_coords.y <= 15) ? TRACK_BIT_UPPER : TRACK_BIT_LOWER;
 

	
 
	// Lookup the bit index
 
	i = 0;
 
@@ -182,13 +182,12 @@ static void GenericPlaceSignals(TileInde
 
	}
 

	
 
	if (!_remove_button_clicked) {
 
		uint32 p1 = _ctrl_pressed ? 8 : 0;
 
		if (IsTileType(tile, MP_RAILWAY) && !HasSignals(tile) && _cur_year < _patches.semaphore_build_before) {
 
			/* Reverse the logic, so semaphores are normally built, and light
 
			 * signals can be built with ctrl held down. */
 
			p1 = _ctrl_pressed ? 0 : 8;
 
		}
 
		DoCommandP(tile, i + p1, 0, CcPlaySound1E,
 
		uint32 p1 = 0;
 
		SB(p1, 0, 1, _ctrl_pressed);
 
		SB(p1, 1, 1, _ctrl_pressed ^ (_cur_year < _patches.semaphore_build_before));
 
		SB(p1, 2, 3, i);
 

	
 
		DoCommandP(tile, p1, 0, CcPlaySound1E,
 
			CMD_BUILD_SIGNALS | CMD_AUTO | CMD_MSG(STR_1010_CAN_T_BUILD_SIGNALS_HERE));
 
	} else {
 
		DoCommandP(tile, i, 0, CcPlaySound1E,
 
@@ -367,26 +366,24 @@ static void HandleAutoSignalPlacement(vo
 
{
 
	TileHighlightData *thd = &_thd;
 
	byte trackstat = thd->drawstyle & 0xF; // 0..5
 
	byte semaphore = _ctrl_pressed ? 1 : 0;
 

	
 
	if (thd->drawstyle == HT_RECT) { // one tile case
 
		GenericPlaceSignals(TileVirtXY(thd->selend.x, thd->selend.y));
 
		return;
 
	}
 

	
 
	TileIndex start_tile = TileVirtXY(thd->selstart.x, thd->selstart.y);
 
	if (IsTileType(start_tile, MP_RAILWAY) && !HasSignals(start_tile) && _cur_year < _patches.semaphore_build_before) {
 
		/* Reverse the logic, so semaphores are normally built, and light
 
		 * signals can be built with ctrl held down. */
 
		semaphore = _ctrl_pressed ? 0 : 1;
 
	}
 
	int p2 = 0;
 
	SB(p2,  0, 1, _ctrl_pressed);
 
	SB(p2,  1, 1, _ctrl_pressed ^ (_cur_year < _patches.semaphore_build_before));
 
	SB(p2,  2, 3, trackstat);
 
	SB(p2, 24, 8, _patches.drag_signals_density);
 

	
 
	// _patches.drag_signals_density is given as a parameter such that each user in a network
 
	// game can specify his/her own signal density
 
	/* _patches.drag_signals_density is given as a parameter such that each user
 
	 * in a network game can specify his/her own signal density */
 
	DoCommandP(
 
		start_tile,
 
		TileVirtXY(thd->selstart.x, thd->selstart.y),
 
		TileVirtXY(thd->selend.x, thd->selend.y),
 
		(semaphore << 3) | (trackstat << 4) | (_patches.drag_signals_density << 24),
 
		p2,
 
		CcPlaySound1E,
 
		_remove_button_clicked ?
 
			CMD_REMOVE_SIGNAL_TRACK | CMD_AUTO | CMD_NO_WATER | CMD_MSG(STR_1013_CAN_T_REMOVE_SIGNALS_FROM) :