mirror of https://github.com/OpenTTD/OpenTTD
(svn r25132) -Fix [FS#5510, FS#5516]: station rebuilding could leave reserved tiles which caused crashes later on
parent
28a54208a3
commit
9986691220
|
@ -1319,8 +1319,16 @@ CommandCost CmdBuildRailStation(TileIndex tile_org, DoCommandFlag flags, uint32
|
||||||
TILE_AREA_LOOP(tile, update_reservation_area) {
|
TILE_AREA_LOOP(tile, update_reservation_area) {
|
||||||
DiagDirection dir = AxisToDiagDir(axis);
|
DiagDirection dir = AxisToDiagDir(axis);
|
||||||
TileIndexDiff tile_offset = TileOffsByDiagDir(dir);
|
TileIndexDiff tile_offset = TileOffsByDiagDir(dir);
|
||||||
TileIndex platform_begin = tile - tile_offset * (st->GetPlatformLength(tile, ReverseDiagDir(dir)) - 1);
|
TileIndex platform_begin = tile;
|
||||||
TileIndex platform_end = tile + tile_offset * (st->GetPlatformLength(tile, dir) - 1);
|
TileIndex platform_end = tile;
|
||||||
|
|
||||||
|
/* We can only account for tiles that are reachable from this tile, so ignore primarily blocked tiles while finding the platform begin and end. */
|
||||||
|
for (TileIndex next_tile = platform_begin - tile_offset; IsCompatibleTrainStationTile(next_tile, platform_begin); next_tile -= tile_offset) {
|
||||||
|
platform_begin = next_tile;
|
||||||
|
}
|
||||||
|
for (TileIndex next_tile = platform_end + tile_offset; IsCompatibleTrainStationTile(next_tile, platform_end); next_tile += tile_offset) {
|
||||||
|
platform_end = next_tile;
|
||||||
|
}
|
||||||
|
|
||||||
/* If there is at least on reservation on the platform, we reserve the whole platform. */
|
/* If there is at least on reservation on the platform, we reserve the whole platform. */
|
||||||
bool reservation = false;
|
bool reservation = false;
|
||||||
|
|
Loading…
Reference in New Issue