From 183f6f6d07920e24c804dc4c93d36aa4a944403d Mon Sep 17 00:00:00 2001 From: peter1138 Date: Fri, 6 Jan 2006 17:45:43 +0000 Subject: (svn r3372) - Fix: update signal states when building or removing rail station blocks --- station_cmd.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'station_cmd.c') diff --git a/station_cmd.c b/station_cmd.c index b55c0ac24..67e70cde5 100644 --- a/station_cmd.c +++ b/station_cmd.c @@ -1016,6 +1016,7 @@ int32 CmdBuildRailroadStation(int x, int y, uint32 flags, uint32 p1, uint32 p2) 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 y, uint32 flags, uint32 p1, uint32 p2) 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 y, uint32 flags, uint32 p1, uint32 p2) 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, int y, uint32 flags, uint32 p1, uint32 // 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(Station *st, TileIndex tile, uint32 flags) 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); -- cgit v1.2.3-54-g00ecf