Changeset - r2824:e9055417341e
[Not reviewed]
master
0 1 0
peter1138 - 19 years ago 2006-01-06 17:45:43
peter1138@openttd.org
(svn r3372) - Fix: update signal states when building or removing rail station blocks
1 file changed with 9 insertions and 1 deletions:
0 comments (0 inline, 0 general)
station_cmd.c
Show inline comments
 
@@ -1016,6 +1016,7 @@ int32 CmdBuildRailroadStation(int x, int
 
		byte *layout_ptr;
 
		StationID station_index = st->index;
 
		const StationSpec *statspec;
 
		Track track;
 

	
 
		// Now really clear the land below the station
 
		// It should never return CMD_ERROR.. but you never know ;)
 
@@ -1033,6 +1034,7 @@ int32 CmdBuildRailroadStation(int x, int
 
		st->build_date = _date;
 

	
 
		tile_delta = direction ? TileDiffXY(0, 1) : TileDiffXY(1, 0);
 
		track = direction ? TRACK_DIAG2 : TRACK_DIAG1;
 

	
 
		statspec = (p2 & 0x10) != 0 ? GetCustomStation(STAT_CLASS_DFLT, p2 >> 8) : NULL;
 
		layout_ptr = alloca(numtracks * plat_len);
 
@@ -1054,6 +1056,7 @@ int32 CmdBuildRailroadStation(int x, int
 

	
 
				tile += tile_delta;
 
			} while (--w);
 
			SetSignalsOnBothDir(tile_org, track);
 
			tile_org += tile_delta ^ TileDiffXY(1, 1); // perpendicular to tile_delta
 
		} while (--numtracks);
 

	
 
@@ -1147,7 +1150,9 @@ int32 CmdRemoveFromRailroadStation(int x
 

	
 
	// if we reached here, it means we can actually delete it. do that.
 
	if (flags & DC_EXEC) {
 
		Track track = HASBIT(_m[tile].m5, 0) ? TRACK_DIAG2 : TRACK_DIAG1;
 
		DoClearSquare(tile);
 
		SetSignalsOnBothDir(tile, track);
 
		// now we need to make the "spanned" area of the railway station smaller if we deleted something at the edges.
 
		// we also need to adjust train_tile.
 
		MakeRailwayStationAreaSmaller(st);
 
@@ -1307,8 +1312,11 @@ static int32 RemoveRailroadStation(Stati
 
			if (TileBelongsToRailStation(st, tile)) {
 
				if (!EnsureNoVehicle(tile))
 
					return CMD_ERROR;
 
				if (flags & DC_EXEC)
 
				if (flags & DC_EXEC) {
 
					Track track = HASBIT(_m[tile].m5, 0) ? TRACK_DIAG2 : TRACK_DIAG1;
 
					DoClearSquare(tile);
 
					SetSignalsOnBothDir(tile, track);
 
				}
 
			}
 
			tile += TileDiffXY(1, 0);
 
		} while (--w);
0 comments (0 inline, 0 general)