(svn r14021) -Fix (r13957) [YAPP]: Overbuilding station tiles with non-track tiles could produce stale reservations. (michi_cc)

This commit is contained in:
smatz 2008-08-08 13:29:18 +00:00
parent de629dd62f
commit 5229e45363
2 changed files with 9 additions and 1 deletions

View File

@ -1031,6 +1031,9 @@ CommandCost CmdBuildRailroadStation(TileIndex tile_org, uint32 flags, uint32 p1,
if (v != NULL) { if (v != NULL) {
FreeTrainTrackReservation(v); FreeTrainTrackReservation(v);
*affected_vehicles.Append() = v; *affected_vehicles.Append() = v;
if (IsRailwayStationTile(v->tile)) SetRailwayStationPlatformReservation(v->tile, TrackdirToExitdir(GetVehicleTrackdir(v)), false);
for (; v->Next() != NULL; v = v->Next()) ;
if (IsRailwayStationTile(v->tile)) SetRailwayStationPlatformReservation(v->tile, TrackdirToExitdir(ReverseTrackdir(GetVehicleTrackdir(v))), false);
} }
} }
@ -1059,7 +1062,11 @@ CommandCost CmdBuildRailroadStation(TileIndex tile_org, uint32 flags, uint32 p1,
} while (--numtracks); } while (--numtracks);
for (uint i = 0; i < affected_vehicles.Length(); ++i) { for (uint i = 0; i < affected_vehicles.Length(); ++i) {
TryPathReserve(affected_vehicles[i], true); Vehicle *v = affected_vehicles[i];
if (IsRailwayStationTile(v->tile)) SetRailwayStationPlatformReservation(v->tile, TrackdirToExitdir(GetVehicleTrackdir(v)), true);
TryPathReserve(v, true);
for (; v->Next() != NULL; v = v->Next()) ;
if (IsRailwayStationTile(v->tile)) SetRailwayStationPlatformReservation(v->tile, TrackdirToExitdir(ReverseTrackdir(GetVehicleTrackdir(v))), true);
} }
st->MarkTilesDirty(false); st->MarkTilesDirty(false);

View File

@ -1949,6 +1949,7 @@ static void ReverseTrainDirection(Vehicle *v)
HasSignalOnTrackdir(v->tile, GetVehicleTrackdir(v)) && HasSignalOnTrackdir(v->tile, GetVehicleTrackdir(v)) &&
!IsPbsSignal(GetSignalType(v->tile, FindFirstTrack(v->u.rail.track)))); !IsPbsSignal(GetSignalType(v->tile, FindFirstTrack(v->u.rail.track))));
if (IsRailwayStationTile(v->tile)) SetRailwayStationPlatformReservation(v->tile, TrackdirToExitdir(GetVehicleTrackdir(v)), true);
if (TryPathReserve(v, true, first_tile_okay)) { if (TryPathReserve(v, true, first_tile_okay)) {
/* Do a look-ahead now in case our current tile was already a safe tile. */ /* Do a look-ahead now in case our current tile was already a safe tile. */
CheckNextTrainTile(v); CheckNextTrainTile(v);